들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 36. 특이 케이스 추가하기 (Introduce Special Case) 어떤 필드의 특정한 값에 따라 다른 동작을 하는 코드가 반복적으로 나타난다면, 해당 필드를 감싸는 '특별한 케이스'를 만들어 해당 조건을 표현할 수 있다. 위의 내용은 '임시 변수'에도 해당된다. 이런 메커니즘을 '특이 케이스 패턴'이라고 부르고 'Null Object 패턴'을 이러한 패턴의 특수한 형태라고 볼 수 있다. '임시 변수 냄새'를 제거하는 리팩토링이다. 어떤 특정한 경우에만 값이 설정되는 임시 필드가 존재하며, 임시 필드에 따라 로직이 계속 바뀌는 것이 반복되어서 코드가 지저분해지는 경우가 있다. 굳이 임시 필드가 아니더라도, 특정 값을 ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 35. 죽은 코드 제거하기 (Remove Dead Code) 사용하지 않는 코드가 어플리케이션 성능이나 기능에 영향을 끼치지는 않는다. 하지만 해당 소프트웨어가 어떻게 동작하는지 이해하려는 사람들에게는 꽤 고통을 줄 수 있다. 나중에 필요해질 코드라 하더라도, 지금 쓰이지 않는 코드라면 (주석으로 감싸는게 아니라) 삭제해야 한다. 나중에 정말로 다시 필요해진다면 git과 같은 버전 관리 시스템을 사용해 복원할 수 있다. 이 리팩토링은 불필요한 코드를 삭제해주는 리팩토링이다. 불필요한 코드는 소프트웨어에 영향을 하나도 주지 않는다 하더라도, 이 코드를 읽는 사람에게는 '이해해야하는 부분'이기 때문에 꽤 큰 고통을 줄 수 있다..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 15. 추측성 일반화 (Speculative Generality) 추측성 일반화란? 나중에 생길 것으로 예상해 미리 기능을 구현해두었지만, 결국에 쓰이지 않는 코드가 발생한 경우. XP의 YAGNI(You aren't gonna need it) 원칙을 따르자. 관련 리팩토링 추상 클래스를 만들었지만 크게 유효하지 않다면 '계층 합치기' 불필요한 위임은 '함수 인라인' 또는 '클래스 인라인' 불필요한 위임은 '의미가 바뀌지 않았을 때'로 볼 수 있을 듯. 사용하지 않는 매개변수를 가진 함수는 '함수 선언 변경하기' 오로지 테스트 코드에서만 사용하고 있는 코드는 '죽은 코드 제거하기' 추측성 일반화는 지금 필요하지 않은 기능을 미..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 리팩토링 34. 계층 합치기 (Collapse Hierarchy) 계층 합치기 의미 상속 구조를 리팩토링하는 중에 기능을 올리고 내리다 보면 자식 / 부모 클래스 코드에 차이가 없는 경우가 있음. 두 클래스의 코드가 차이가 없다는 것은 하나는 불필요한 요소라는 것임. 따라서 이 때, 계층 합치기를 통해서 클래스를 제거할 수도 있다. 하위 클래스와 상위 클래스 중에 어떤 것을 없애야 하는가? 둘 중에 보다 이름이 적절한 쪽을 선택. 애매하다면 어느 쪽을 선택해도 문제 없음. 자식 / 부모 클래스 간의 기능을 리팩토링 하는 과정에서 자식 / 부모 클래스에 있는 코드가 동일해지는 경우가 있다. '성의없는 요소'가 발생했다고 볼 수 있다...
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 냄새 14. 성의없는 요소 (Lazy Element) 여러 프로그래밍적인 요소(변수, 메서드, 클래스 등)을 만드는 이유 나중에 발생할 변화를 대비해서 해당 함수 / 클래스를 재사용하기 위해 의미있는 이름을 지어주기 위해 가끔 만들어 놓은 요소들이 위 기대에 부응하지 못하는 경우가 있음. 이 경우, 해당 요소들을 제거해야 함. 관련 리팩토링 기술 함수 인라인 클래스 인라인 불필요한 상속 구조는 '계층 합치기'를 사용할 수 있다. 우리가 만드는 요소들 중에는 처음에는 필요했었던 요소지만, 리팩토링 과정에서 필요없어지는 요소가 생길 수도 있다. 이런 필요없는 요소들은 제거하거나 다른 곳에 합쳐주면서 코드가 더욱 간결해지고 가독성이 좋아..