본문 바로가기
객체지향

[클린코드] 5 ~ 10장

by 순원이 2024. 3. 4.

1. 클래스 200줄 넘기지 않기

 

2.  외부 클래스 바로 의존하지 않고 경계 클래스 두기

 

나쁜 예)

Map<String, Sensor> sensors = SensorsFactory().get(); // 외부 라이브러리

Sensor s = sensors.get(sensorId);

좋은 예)

public class Sensors {
    private Map<String, Sensor> sensors = SensorsFactory().get();
    
    public Sensor getById(String id) {
        return sensors.get(id);
    }
    
    // 이하 생략
}

 

 

3. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다.

  • 테스트 케이스가 있다면 공포는 사실상 사라진다. 테스트 커버리지가 높을수록 공포는 줄어든다.

 

4. 테스트 당 assert 하나

  • 결론이 하나라 이해하기 쉽다

 

5. 테스트 F.I.R.S.T

  • 빠르게 Fast
  • 독립적으로 Independent
  • 반복가능하게 Repeatable
    • 어떠한 환경에서도 반복 가능해야 한다. 
    • 네트워크에 연결되지 않은 노트북 환경에서도 실행할 수 있어야 한다.
    • 9월 17일과 맞는지 확인하고 아니면 오류를 던지는 함수가 있다. 만약 이 함수가 9월 17일이 아니라 다른 날 실행한다면 테스트는 실패할 것이다. 그러기 때문에 위 함수는 특정 날짜가 아닌 입력된 두 날짜가 맞는지 확인하는 함수로 만들어져야 한다. 
  • 자가검증하는 Self - Validating
    • 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안된다.
    • 테스트가 스스로 성공과 실패를 판단하게 해야 한다.
  • 적시에 Timely
    • 테스트 코드는 적시에 작성해야 한다.실제 코드를 구현한 다음에 테스트 코드를 만들면 실제 코드를 구현하기 어렵다는 사실을 뒤늦게 발견할지도 모른다. 

 

4. SOLID

1. SRP(Single Responsibliity Principle)

  • 클래스는 하나의 역할만 맡아야 한다.
  • 클래스를 변경할 이유도 하나여야 한다.
  • 변경할 이유를 파악하려 애쓰다 보면 코드를 추상화하기도 쉬워진다.

2. OCP(Open Close Principle)

  • 확장에 열려있고, 변경엔 닫혀있어야 한다.
    • 즉, 새로운 기능 추가는 쉽지만, 변경의 영향은 작아야 한다.

3.  LSP(Liskov Substitution Principle)

  • 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있어야 한다.

4. ISP(Interface Segregation Principle)

  • 필요한 인터페이스는 각각 따로 정의해서 사용해라.
  • 한 인터페이스에 너무 많은 기능을 제공하지 마라.

5. DIP(Dependency Inversion Principle)

  • 추상화에 의존해야지 구체적인 것에 의존하지 마라
  • 추상클래스를 사용해라
  • 다른 클래스나 자료구조에 의존적인 코드를 짜지마라.
  1.  

'객체지향' 카테고리의 다른 글

[클린코드] 4. 주석  (0) 2024.03.04
[클린코드] 3.함수  (0) 2024.03.04
정순원의 코드 원칙  (0) 2024.02.27