티스토리 뷰
뒤엉킨 변경
- 소프트웨어는 변경에 유연하게 대처할 수 있어야 한다.
- 어떤 한 모듈이 (함수 또는 클래스가) 여러가지 이유로 다양하게 변경되어야 하는 상황.
- 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
링크
TAG
- 데이터베이스
- 김영한
- kotlin
- 코테
- 스프링
- 노마드
- webflux
- Algorithm
- MySQL
- 인프런
- 문자열
- 코틀린
- 자료구조
- 노마드코더
- 정렬
- leetcode
- Real MySQL
- Spring
- 알고리즘
- spring boot
- 북클럽
- 파이썬
- 릿코드
- 리팩토링
- 스프링부트
- 스프링 부트
- 구현
- mysql 8.0
- 백준
- 그리디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함