들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 17. 메세지(메서드) 체인 (Message Chains) 메세지(메서드) 체인 냄새는 다음을 의미함. 레퍼런스를 따라 계속해서 메서드 호출이 이어지는 코드. this.member.getCredit().getLevel().getDescription() 문제점 해당 코드를 사용하는 클라이언트는 코드 체인을 모두 이해해야 함. 체인 중 일부가 변경된다면 클라이언트의 코드도 변경해야함. 관련 리팩토링 '위임 숨기기'를 사용해 메세지 체인을 캡슐화를 할 수 있음. '함수 추출하기'로 메세지 체인 일부를 함수로 추출한 다음, '함수 옮기기'으로 해당 함수를 적절한 이동을 할 수 있다. (함수 추출하기 → 함수 옮기기) 메서드 체인은 왜..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 16. 임시 필드(Temporary Field) 클래스에 있는 어떤 필드가 특정한 경우에만 값을 갖는 경우. 어떤 필드가 특정한 경우에만 값을 갖는 경우, 그 특정한 경우가 아닐 때는 해당 클래스의 해당 필드가 임시 값을 가진다. 따라서 임시변수라고 의미한다. 어떤 객체의 필드가 '특정한 경우에만' 값을 가진다는 것을 이해하는 것은 일반적으로 예상하지 못하기 때문에 이해하기 어렵다. 관련 리팩토링 '클래스 추출하기'를 사용해 해당 변수들을 옮길 수 있다. '함수 옮기기'를 사용해서 해당 변수를 사용하는 함수를 특정 클래스로 옮길 수 있다. '특이 케이스 추가하기'를 적용해 '특정한 경우'에 해당하는 클래스를 만들어 해당 조건을..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 36. 특이 케이스 추가하기 (Introduce Special Case) 어떤 필드의 특정한 값에 따라 다른 동작을 하는 코드가 반복적으로 나타난다면, 해당 필드를 감싸는 '특별한 케이스'를 만들어 해당 조건을 표현할 수 있다. 위의 내용은 '임시 변수'에도 해당된다. 이런 메커니즘을 '특이 케이스 패턴'이라고 부르고 'Null Object 패턴'을 이러한 패턴의 특수한 형태라고 볼 수 있다. '임시 변수 냄새'를 제거하는 리팩토링이다. 어떤 특정한 경우에만 값이 설정되는 임시 필드가 존재하며, 임시 필드에 따라 로직이 계속 바뀌는 것이 반복되어서 코드가 지저분해지는 경우가 있다. 굳이 임시 필드가 아니더라도, 특정 값을 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 35. 죽은 코드 제거하기 (Remove Dead Code) 사용하지 않는 코드가 어플리케이션 성능이나 기능에 영향을 끼치지는 않는다. 하지만 해당 소프트웨어가 어떻게 동작하는지 이해하려는 사람들에게는 꽤 고통을 줄 수 있다. 나중에 필요해질 코드라 하더라도, 지금 쓰이지 않는 코드라면 (주석으로 감싸는게 아니라) 삭제해야 한다. 나중에 정말로 다시 필요해진다면 git과 같은 버전 관리 시스템을 사용해 복원할 수 있다. 이 리팩토링은 불필요한 코드를 삭제해주는 리팩토링이다. 불필요한 코드는 소프트웨어에 영향을 하나도 주지 않는다 하더라도, 이 코드를 읽는 사람에게는 '이해해야하는 부분'이기 때문에 꽤 큰 고통을 줄 수 있다..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 15. 추측성 일반화 (Speculative Generality) 추측성 일반화란? 나중에 생길 것으로 예상해 미리 기능을 구현해두었지만, 결국에 쓰이지 않는 코드가 발생한 경우. XP의 YAGNI(You aren't gonna need it) 원칙을 따르자. 관련 리팩토링 추상 클래스를 만들었지만 크게 유효하지 않다면 '계층 합치기' 불필요한 위임은 '함수 인라인' 또는 '클래스 인라인' 불필요한 위임은 '의미가 바뀌지 않았을 때'로 볼 수 있을 듯. 사용하지 않는 매개변수를 가진 함수는 '함수 선언 변경하기' 오로지 테스트 코드에서만 사용하고 있는 코드는 '죽은 코드 제거하기' 추측성 일반화는 지금 필요하지 않은 기능을 미..