본문 바로가기

클린코드

[클린코드 독서] 6장 - 객체와 자료구조

변수를 비공개(private)로 설정하는 이유는 남들이 변수에 의존하지 않게 하고싶어서이다.

그렇다면 왜 많은 프로그래머들은 get set함수를 당연하게 public으로 공개해서 private변수를 외부에 노출할까?

(참고로, 아무리 변수가 private이어도 getset함수가 public이면 그건 외부로 변수를 노출하는것이다)

→ 아무생각없이 get set함수를 설정하곤 하는데 이렇게 코드를 짜는것은 매우 나쁨. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 항상 고민해야함.

  1. 자료추상화
    1. 한마디로 interface로 만드는것!
    2. get set과 같은 함수를 변수사이에 넣는다해도 구현이 감춰지지않음. 구현을 감추려면 추상화가 필요
  2. 자료/객체 비대칭
    1. 절차적인 클래스와, 객체지향적인 클래스는 서로 상호 보완적인 특질이 있음
    2. 자료구조를 사용하는 절차적 코드는 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉬움
    3. 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉬움
    4. 반대의 경우에는 어려움
    5. 그래서 상황에 따라서 어떠한 방식의 코드를 적용해야하는지 생각해야함
  3. 디미터 법칙
    1. 잘 알려진 휴리스틱.
    2. 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙
    3. 클래스 C의 함수f는 오직 이런것만 호출해야한다
      1. 클래스 C
      2. f가 생성한 객체
      3. f인수로 넘어온 객체
      4. C 인스턴트 변수에 저장된 객체
    4. 이걸 어기는 코드중에 하나가 기차충돌임. 여러 객차가 한줄로 이어진 함수같아보임. 조잡하므로 피하기
    5. final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
    6. 잡종 구조 - bad
    7. 구조체 감추기
  4. 자료 전달 객체
    1. 공개 변수만 있고 함수가 없는 클래스를 이렇게 부름
    2.  DTO, bean같은거
    3. 활성레코드 - dto의 특수형태.