[레벨1] 레벨 로그

yoondgu·2023년 4월 1일
0

코드 품질

  • 좋은 코드를 위해 지켜야 할 것 중 가장 인상 깊었던 점들은 아래와 같다.
    • 다른 개발자, 또는 미래의 나 자신이 사용할 것을 고려해 예측 가능한 코드를 작성해야 한다.
    • 추상화 계층을 잘 만들면 각 계층의 코드를 이해, 사용, 테스트하기 쉬워진다.

단위 테스트와 TDD

  • 단위 테스트를 작성하는 이유
    • 테스트 작성 이유: 내가 구현한 기능이 의도대로 작동함을 보장하는 상태로 개발을 진행하기 위해서
    • “단위” 테스트여야 하는 이유: 보다 큰 범위에 대해 테스트 코드를 작성하면, 정확히 어느 부분에서 잘못 동작하는 것인지 파악하기 어려우므로 단위 테스트를 작성한다.
  • TDD
    • 실패 테스트 작성 → 테스트 성공 → 리팩터링을 빠른 주기로 반복하며 도메인 로직 구현에 집중할 수 있다.

MVC 패턴

  • UI와 비즈니스 로직을 분리함으로써, 서로 영향을 받지 않고 쉽게 유지보수할 수 있게 하는 디자인 패턴이다.

원시값 포장

  • 원시 데이터 유형으로는 도메인에서 의미하는 값을 정확히 표현하기 어려울 수 있다.
  • 이를 위해 원시값 포장으로 도메인을 표현하고 검증할 수 있다.

예외 처리

  • Checked Exception, Unchecked Exception 사용에 대한 나만의 기준
    • 예외가 전파되는 다음 클래스에게 예외 처리를 강제해야 할 때는 Checked Exception을 사용하는 게 좋다.
    • 예외가 전파되는 다음 클래스가 해당 예외에 대해 알 필요가 없을 때는 Unchecked Exception 을 사용한다.

방어적 복사 / 변경 방지

  • 방어적 복사: 인자값 또는 반환값으로 객체를 전달했을 때 내외부에서 같은 주소를 참조하는 것을 방지하기 위해, new ArrayList<>() 로 주소값의 참조를 끊어내고 새로운 객체로 복사한다.
  • 변경 방지: Unmodifiable Collection 는 원본 주소를 가지고 있지만 외부에서 변경을 위한 메서드를 호출 시 예외를 발생시키는 방식으로 변경을 방지한다.

Enum

  • 열거 타입(Enumeration Type)은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 컴파일 시점 이후에는 다른 상수 값이 추가될 위험이 없다.
  • 일반 클래스 타입의 값은 데이터 타입 -> 값과 같은 관계를 가지지만 Enum 클래스의 값은 데이터 타입 -> 이름 -> 값으로 이루어지기 때문에, 집합 요소에 대한 이름을 명명할 수있다.

Generic

  • 제네릭은 데이터 타입을 일반화한다.
  • 클래스, 메소드에서 사용하는 내부 데이터 타입을 컴파일 시 지정하기 때문에, Object 타입으로 일반화하는 것과 달리 미리 타입에 대해 검사할 수 있다.

0개의 댓글