Home [Clean code] Ch12. Emergence
Post
Cancel

[Clean code] Ch12. Emergence

Ch12. Emergence

테스트

모든 테스트를 실행한다

리팩터링

중복을 없앤다

프로그래머 의도를 표현한다

클래스와 메서드 수를 최소로 줄인다

위의 4가지 규칙을 적용한다면 설계는 단순해진다

  • 테스트
    • 테스트를 철저히 거쳐서 모든 테스트 케이스를 항상 통과하는 시스템은 테스트가 가능한 시스템.
    • 결합도가 높으면 테스트 케이스 작성이 어려움
    • → 테스트 케이스를 많이 작성할 수록 자연스럽게 DIP, DI, interface, Abstraction 등 을 사용해서 결합도를 낮추게 됨
  • 리팩터링
    • 테스트 케이스가 잘 되어있다면 리팩터링 및 기능 추가 또한 두렵지 않음
    • 중복 없애기
      • Template Method 패턴
        • 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화해서 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용만 바꾸는 패턴
        • 객체지향에서는 아주 일반적임
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        66
        
          //추상 클래스 선생님
          abstract class Teacher{
              public void start_class() {
                  inside();
                  attendance();
                  teach();
                  outside();
              }
                    	
              // 공통 메서드
              public void inside() {
                  System.out.println("선생님이 강의실로 들어옵니다.");
              }
                        
              public void attendance() {
                  System.out.println("선생님이 출석을 부릅니다.");
              }
                        
              public void outside() {
                  System.out.println("선생님이 강의실을 나갑니다.");
              }
                        
              // 추상 메서드
              abstract void teach();
          }
                     
          // 국어 선생님
          class Korean_Teacher extends Teacher{
                        
              @Override
              public void teach() {
                  System.out.println("선생님이 국어를 수업합니다.");
              }
          }
                     
          //수학 선생님
          class Math_Teacher extends Teacher{
                    
              @Override
              public void teach() {
                  System.out.println("선생님이 수학을 수업합니다.");
              }
          }
                    
          //영어 선생님
          class English_Teacher extends Teacher{
                    
              @Override
              public void teach() {
                  System.out.println("선생님이 영어를 수업합니다.");
              }
          }
                    
          public class Main {
              public static void main(String[] args) {
                  Korean_Teacher kr = new Korean_Teacher(); //국어
                  Math_Teacher mt = new Math_Teacher(); //수학
                  English_Teacher en = new English_Teacher(); //영어
                            
                  kr.start_class();
                  System.out.println("----------------------------");
                  mt.start_class();
                  System.out.println("----------------------------");
                  en.start_class();
              }
          }
        
    • 표현하기
      • 유지보수가 제일 코스트가 큼
      • 코드를 이해하기 쉽게 만들어야함
        • 좋은 이름
        • 함수와 클래스 크기 줄이기
        • 표준명칭
          • 클래스가 표준 패턴을 사용하여 구현된다면 클래스 이름에 패턴 이름을 넣어주기
            • singleton, factory, facade … 등
        • 유닛 테스트 케이스 꼼꼼히 작성
        • 노오력
    • 클래스와 메서드 수를 최소로 줄여라
      • 중요하긴 하지만, 테스트 케이스 만들고 리펙터링 하는게 더 중요함
      • 목표는 함수와 클래스 크기를 작게 유지하면서 동시에 시스템 크기도 작게 유지하는 데 있음
This post is licensed under CC BY 4.0 by the author.