냄새 20. 거대한 클래스

    들어가기 전

    이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 


    냄새 20. 거대한 클래스 (Large Class)

    • 거대한 클래스
      • 어떤 클래스가 너무 많은 일을 하다보면 필드도 많아지고, 중복 코드도 보이기 시작한다.
    • 클라이언트들이 거대한 클래스가 제공하는 기능을 각각 일부만 사용한다면, 각각의 세부 기능을 별도의 클래스로 분리할 수 있다.
    • 리팩토링 방법 
      • '클래스 추출하기'를 사용해 관련있는 필드를 한 곳으로 모을 수 있다. 
      • 상속 구조를 만들 수 있다면 '슈퍼 클래스 추출하기' 또는 '타입 코드를 서브클래스로 교체하기'를 적용할 수 있다.
      • 클래스 내부에 산재하는 중복 코드는 '메서드 추출'하여 제거할 수 있다. 

     

    거대한 클래스의 문제는 다음과 같다.

    • 클래스의 책임이 많아지면 필드가 많아진다.
    • 필드가 많아지면, 필드를 사용하는 메서드도 많아진다.
    • 그런데 필드가 많으면 다른 곳으로 보내기 싫어진다. 왜냐하면 이 클래스에 이미 필드가 있기 때문에 이곳에 필드를 조금 추가하는 식으로 하면 개발하기 쉽기 때문이다. 그런데 그렇게 필드가 쌓이면 거대한 클래스가 되어버린다. 

    각 필드를 활용하는 메서드들이 얽히고 섥히면서 필드를 분리하기가 사실상 어려워진다. 너무 거대해지기 전에 필드 / 메서드들을 뜯어내서 다른 클래스로 추출하는 것이 미래를 생각하면 더욱 좋다. 

     

    필드를 뜯어낼 때 기준은?

    • 관련있는 필드들 (어떤 메서드에서 항상 같이 쓰이는 필드)을 기준으로 뜯어냄. 

    댓글

    Designed by JB FACTORY