본문 바로가기

programming study/Refactoring

Refactoring - 캡슐화(2)

본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다.

 

캡슐화

  • 클래스는 본래 정보를 숨기는 용도로 설계
    • 내부 정보뿐 아니라 클래스 사이의 연결 관계를 숨기는 데도 유용

 

1. 클래스 추출하기

  • 반대 리팩터링 : 클래스 인라인 하기

설명

  • 클래스는 명확하게 추상화하고 소수의 주어진 역할만 처리
  • 개발을 진행할 수록 클래스가 비대해져 복잡해 짐
  • 한 클래스 안에 묶을 수 있는 데이터와 메서드가 있다면 분리하기

 

2. 클래스 인라인하기ㅋ르랫반대 리팩터링 : 클래스 추출하기

설명

  • 제 역할을 못하는 클래스는 인라인 하기
  • 별개의 클래스를 다르게 배분할 때도 하나의 클래스로 일단 인라인하기
    • 합친 후 클래스를 추출하는 것이 더 용이

 

3. 위임 숨기기

  • 반대 리팩터링 : 중개자 제거하기

설명

  • 서버 객체의 메서드를 호출하려면 클라이언트에서는 객체의 인터페이스를 알아야 함
    • 객체의 인터페이스가 바뀌면 해당 인터페이스를 사용하는 클라이언트의 모든 코드를 수정해야 함
  • 서버 자체에 위임 메서드를 만들어, 의존성 제거
    • 인터페이스가 바뀐다고 해도, 클라이언트에서 수정을 할 필요가 없음

 

4. 중개자 제거하기

  • 반대 리팩터링 : 위임 숨기기

설명

  • 위임 메서드가 많아질 수록 결합도가 높아지고 서버 클래스는 중개자 역할로 전락
    • 클라이언트에서 직접 호출하는 것이 나을 수도 있음
  • 위임 숨기긱 vs. 중개자 제거하기 사이에서 적절하게 판단

 

5. 알고리즘 교체하기

설명

  • 기존 로직 보다 더 간결하고 효율적인 로직으로 바꾸는 것
    • 라이브러리로 대체하는 것도 방법 중 하나