우아한테크코스

Lv1 레벨로그

Lv1에서 좋은 코드가 무엇인가에 대해 배웠습니다. 좋은 코드의 기준 중 하나는 유지보수가 용이한 코드라고 생각합니다.


1.  MVC 구조

Model : 데이터와 관련된 부분 

View : 사용자한테 보여지는 부분 

Controller : Model과 View를 이어주는 부분

  1) MVC 구조 설계 시 주의사항

  • Model은 View에 관한 코드를 가지면 안된다.
  • 컨트롤러는 thread-safe 해야만 한다. 즉, thread-safe하지 않은 상태를 가지면 안된다.

2. if-else가 계속 반복되는 구조에 대응

1) Enum 활용

Enum은 비슷한 속성을 묶는 기능을 한다.

Enum을 사용함으로써 얻는 장점

  • 다른 사람이 봐도 비슷한 속성임을 알 수 있다. => 불필요한 문서화를 줄인다.
  • 컴파일 단계에서 에러를 체크할 수 있다.
  • 연관된 속성을 if문으로 가져올 수고를 없앨 수 있다.
  • 데이터와 연산로직을 하나의 클래스가 담당하도록 만들 수 있다.

2) 디자인 패턴 활용

a. 상태 패턴

메서드를 사용할 때마다 계속해서 if문이 나오는 구조라면 상태패턴을 고려해봐야 한다.

상태패턴을 사용해서 상태에 책임을 위임한다.


3. 불변 객체

불변 객체는 생성 후 그 상태를 바꿀 수 없는 객체를 의미한다. 불변객체를 만드는 이유는 부작용을 줄여 프로그램의 안정성을 높이기 위해서이다. 불변객체는 원시타입의 불변, 참조타입의 불변으로 나뉜다.

1) 원시 타입의 불변

 int, String과 같은 원시타입은 final 키워드를 붙임으로써 손쉽게 불변객체로 만들 수 있다.

2) 참조 타입의 불변

참조 타입의 경우 외부에서의 데이터 변경을 막기 위해서는 먼저 setter를 사용하지 말아야 한다.

또한, 생성자나 getter에서 a)방어적 복사b)깊은 복사를 사용해야 한다.


4. 정적 팩토리 메서드

정적팩토리 메서드란 객체 생성 역할을 하는 클래스 메서드를 말한다.

 

정적 팩토리 메서드가 갖는 장점

  • 이름을 가질 수 있다. => 생성자를 사용할 때마다 직관적이다.
  • 캐싱 구조와 함께 활용하면 매번 새로운 객체를 만들지 않아도 된다.
  • 객체 생성을 캡슐화할 수 있다.