ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2021.12.07~08 기록장
    TIL 2021. 12. 7. 23:34

    ToDo

    • 책 읽기
    •  

    Done

    • 책 읽기

    Weekly goal

    • 책 읽기
    • 영어 레퍼런스 읽기
    • 북마크 읽기, 정리

    리팩터링

    269p.

    분류 부호를 하위 클래스로 전환

     

    코드 내부에 존재하는 switch문을 분리할 수 있을 거다.

    근데 클래스로 바꾸기 전에 클래스에 기능적으로 영향을 끼치는 지를 판단하고 끼치지 않는다면 (각자 하는 일이 단수 분류) enum으로 분류하고 반대라면 클래스로 분리하여 각자 각기 다른 일을 처리할 수 있다.

     

    단순 혈액형은 enum으로 충분하지만 만약 혈액형별로 각자의 일이 존재한다면 하위 클래스로 분리할 수 있다.

     

    273p.

    분류 부호를 상태/전략 패턴으로 전환

     

    위의 상황에서 하위 클래스로 전환할 수 없을 때 사용된다.

    ex) 분류 부호가 수시로 바뀜

     

    상태/전략 패턴과 하위 클래스로 전환은 어느 정도 비슷한 것 같다.

    단 위에서도 말했듯이 분류 부호가 바뀔 경우 대비할 수 있으면 상태 전략, 그게 아니면 추가, 삭제만 된다면 하위 클래스 일 듯하다

    클래스로 빼서 기능을 정의한다.

     

    279p.

    하위 클래스를 필드로 전환

    단순한 기능을 하위 클래스로 빼면 오히려 복잡도가 증가한다.

    분리를 할 때 중심을 잡기는 힘들어 보이는데 이는 직감에 맡겨야 할 듯하다. 책에도 직감을 언급한다.

    286p.

    if문 쪼개기

    if문은 복잡해지기 쉽다. 그렇게 되면 코드는 이해되지만 왜 그렇게 되는지는 알기 힘들기에 적절한 명의 메서드로 분리해서 처리하자.

     

    301p.

    감시 절은 특정 if문이 true일 때 바로 반환하는 경우를 칭한다.

    이는 리턴하는 부분이 증가됨을 의미한다.

     

    310p.

    null 검사를 널 객체에 위임

    굉장히 흥미로운 주제이다. 또 구현은 아름답다.

     

    예제를 보자.

    가게는 직원이 있고 직원은 월급이 있다.

    store가 주어졌을 때 직원은 있을 수도 없을 수도 있기에 null 검사가 이뤄질 것이다.

    근데 이는 매번 검사를 해야 하는 작업이다.

    이를 좀 우아하게 바꿔보자.

     

    store에서 직원을 꺼낼 때 null 검사를 한다.

    이때 없으면 null을 보내는 것이 아닌 null객체를 보낸다.

    null객체는 null검사 메서드가 있기에 service에서 간단하게 메서드를 변경할 수 있다.

     

    근데 아직까진 우아하지 않다. 좀 더 머리를 써보자.

     

    null객체에서도 월급 객체를 반환할 수 있다.

    이를 통해 service에서는 null객체인지 여부는 상관하지 않는다.

    그저 월급 객체를 받아서 반환할 뿐이다.

     

    좀 더 활용방법을 찾아봐야겠다. 좋은 코드 작성법인 것 같다.

    ps) db에 없을 때 적용 방법이 있을까?

     

    https://github.com/ChoiGiSung/Refactoring/commit/d0c1778f3f6e5cdedbe0c70a1aa79ed39b40d3f5

     

    feat : null 객체를 위한 기본 세팅 · ChoiGiSung/Refactoring@d0c1778

    Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Showing 5 changed files with 95 additions and 0 deletions. +14 −0 src/main/java/chapter9/Employee.java +18 −0 src/main/java/chap

    github.com

     

    319p.

    어설션 넣기

    메서드를 작성하다 보면 전제조건을 만족하고 다음 메서드를 실행시켜야 할 때가 있다.

    근데 모듈화가 되어있기에 전제조건을 판단하는 코드를 다음 메서드에 넣기는 좀 그렇다.

    책에서도 어설션은 개발할 때는 넣되 제품으로 발매할 때는 삭제한다고 되어있다.

     

    이는 코드를 안전하게 할 수 있지만 오히려 코드 스멜이 될 수 있다.

    'TIL' 카테고리의 다른 글

    2021.12.11 기록장  (0) 2021.12.11
    2021.12.09 기록장  (0) 2021.12.09
    2021.12.04~06기록장  (0) 2021.12.03
    2021.12.03 기록장  (0) 2021.12.03
    2021.11.29 기록장  (0) 2021.11.29

    댓글

Designed by Tistory.