CHAPTER 7 코드를 오용하기 어렵게 만들라

좋은코드 나쁜코드: 프로그래머의 코드 품질 개선법(PART II 실전)

CHAPTER 7 코드를 오용하기 어렵게 만들라

코드를 잘못 사용할수 있는 몇가지 일반적인 경우

  • 호출하는 쪽에서 잘못된 입력을 제공
  • 다른 코드의 부수효과
  • 정확한 시간이나 순서에 따라 함수를 호출하지 않음
  • 관련 코드에서 가정과 맞지 않게 수정이 이루어짐

7.1 불변 객체로 만드는 것을 고려하라

객체가 생성된 후에 상태를 바꿀 수 없는 객체는 불변(불가변)이다

가변객체의 문제점

  • 가변 객체는 추론하기 어렵다

  • 가변 객체는 다중 스레드에서 문제가 발생할 수 있다

  • 가변 클래스는 오용하기 쉽다

    • 객체를 생성할 때만 값을 할당하라
    • 불변성에 대한 디자인 패턴을 사용하라
      • 빌더 패턴
        • 값을 하나씩 설정할 수 있는 빌더 클래스
        • 발더에 의해 작성된 불변적인 읽기 전용 클래스
      • 쓰기시 복사 패턴

7.2 객체를 깊은 수준까지 불변적으로 만드는 것을 고려하라

클래스가 실수로 가변적으로 될수 있는 일반적인 경우는 깊은 가변성 때문이다

  • 깊은 가변성은 오용을 초래할 수 있다
    • 방어적으로 복사하라
    • 불변적 자료구조를 사용하라

7.3 지나치게 일반적인 데이터 유형을 피하라

  • 지나치게 일반적인 유형은 오용될 수 있다
    • 유형 자체로 아무것도 설명해주지 않는다
    • 리스트에서 어떤 항목인지 혼동하기 쉽다
    • 패러다임은 퍼지기 쉽다
    • 페어 유형은 오용하기 쉽다
      • 전용 유형 사용

7.4 시간 처리

시간을 다룰 때 코드를 잘못 사용하고 혼동을 일으킬 여지가 굉장히 많다.

  • 정수로 시간을 나타내는 것은 문제가 될수 있다
    • 한순간의 시간인가 아니면 시간의 양인가?
    • 일치하지 않은 단위
    • 시간대 처리오류
  • 해결책
    • 적절한 자료구조를 사용하라
      • 양으로서의 시간과 순간의 시간을 구분
      • 더이상 단위에 대한 혼동이 없다

7.5 데이터에 대해 진실의 원천을 하나만 가져야 한다

  • 기본데이터 : 코드에 제공해야 할 데이터

  • 파생데이터 : 주어진 기본 데이터에 기반해서 코그가 계산할 수 있는 데이터

  • 또 다른 진싱의 원천으 유효하지 않은 상태를 초래할 수 있다

    • 기본데이터를 유일한 진실의 원천으로 사용하라
      • 데이터 계산에 비용이 많은 드는 경우
        • 지연계산 및 캐싱

7.6 논리에 대한 진실의 원천을 하나만 가져야 한다

진실의 원천은 코드에 제공된 데이터에만 적용되는 것이 아니라 코드에 포함된 논리에도 적용된다

  • 논리에 대한 진싱의 원천이 여러 개 있으면 버그를 유발할 수 있다
    • 진실의 원천은 단 하나만 있어야 한다

참조