티스토리 뷰

Study

[Refactoring] 뒤엉킨 변경

hyuuny 2022. 2. 27. 12:48

뒤엉킨 변경

  • 소프트웨어는 변경에 유연하게 대처할 수 있어야 한다.
  • 어떤 한 모듈이 (함수 또는 클래스가) 여러가지 이유로 다양하게 변경되어야 하는 상황.
    • ex) 새로운 결제 방식을 도입하거나, DB를 변경할 때 동일한 클래스에 여러 메소드를 수정해야 하는 경우.
  • 서로 다른 문제는 서로 다른 모듈에서 해결해야 한다.
    • 모듈의 책임이 분리되어 있을수록 해당 문맥을 더 잘 이해할 수 있으며, 다른 문제는 신경쓰지 않아도 된다.
  • 이와 관련된 리팩토링 기술은 3종류가 있다.
    • 단계 쪼개기(Split Phase)를 사용해 서로 다른 문맥의 코드를 분리할 수 있다.
    • 함수 옮기기 (Move Function)를 사용해 적절한 모듈로 함수를 옮길 수 있다.
    • 모듈이 클래스 단위라면 클래스 추출하기 (Extract Class)를 사용해 별도의 클래스로 분리할 수 있다.

단계 쪼개기 (Split Phase)


  • 서로 다른 일을 하는 코드를 각기 다른 모듈로 분리한다.
    • 그래야 어떤 것을 변경해야 할 때, 그것과 관련있는 것만 신경쓸 수 있다.
  • 여러 일을 하는 함수의 처리 과정을 각기 다른 단계로 구분할 수 있다.
    • ex) 전처리 -> 주요 작업 -> 후처리
    • ex) 컴파일러: 텍스트 읽어오기 -> 실행 가능한 형태로 변경
  • 서로 다른 데이터를 사용한다면 단계를 나누는데 있어 중요한 단서가 될 수 있다.
  • 중간 데이터(intermediate Data)를 만들어 단계를 구분하고 매개변수를 줄이는데 활용할 수 있다.

함수 옮기기 (Move Function)


  • 모듈화가 잘 된 소프트웨어는 최소한의 지식만으로 프로그램을 변경할 수 있다.
  • 관련있는 함수나 필드가 모여있어야 더 쉽게 찾고 이해할 수 있다.
  • 하지만 관련있는 함수나 필드가 항상 고정적인 것은 아니기 때문에 때에 따라 옮겨야 할 필요가 있다.
  • 함수를 옮겨야 하는 경우
    • 해당 함수가 다른 문맥 (클래스)에 있는 데이터 (필드)를 더 많이 참조하는 경우.
    • 해당 함수를 다른 클라이언트 (클래스)에서도 필요로 하는 경우.
  • 함수를 옮겨갈 새로운 문맥 (클래스)이 필요한 경우에는 여러 함수를 클래스로 묶기 (Combine Functions info Class) 또는 클래스 추출하기 (Extract Class)를 사용한다.
  • 함수를 옮길 적당한 위치를 찾기가 어렵다면, 그대로 두어도 괜찮다. 언제든 나중에 옮길 수 있다.

클래스 추출하기 (Extract Class)


  • 클래스가 다루는 책임(Responsibility)이 많아질수록 클래스가 점차 커진다.
  • 클래스를 쪼개는 기준
    • 데이터나 메소드 중 일부가 매우 밀접한 관련이 있는 경우
    • 일부 데이터가 대부분 같이 바뀌는 경우
      • 하위 클래스를 만들어 책임을 분산 시킬 수도 있다.



Reference
백기선. 코딩으로 학습하는 리팩토링. 인프런. https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81/dashboard

'Study' 카테고리의 다른 글

[Refactoring] 기본형 집착  (0) 2022.03.19
[Refactoring] 산탄총 수술  (0) 2022.03.18
[Refactoring] 가변 데이터  (0) 2022.02.26
[Refactoring] 전역 데이터  (0) 2022.02.25
[Refactoring] 긴 매개변수 목록  (0) 2022.02.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함