Skip to content

Commit 9727fb7

Browse files
committed
feat: add refactoring-category-summary.mdx
1 parent c368b19 commit 9727fb7

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
---
2+
title: "리팩토링 기술에 대해서 카테고리별 정리 - 요약편"
3+
date: "2025-07-13"
4+
tags: ["Clean Code", "Java"]
5+
summary: "A categorized summary of essential refactoring techniques for improving code structure and readability"
6+
description: "자주 사용되는 리팩토링 기법들을 카테고리별로 정리한 요약편"
7+
---
8+
9+
:::quote
10+
[리팩토링 2판](https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599/ref=pd_sbs_5/147-9985226-7575522?pd_rd_w=IqNPf&pf_rd_p=3676f086-9496-4fd7-8490-77cf7f43f846&pf_rd_r=D6D6Y0JWZ93JER6KZ2J3&pd_rd_r=abe95b3d-5be0-437a-8fd3-e5d4959ae207&pd_rd_wg=k2g1l&pd_rd_i=0134757599&psc=1)과, 백기선님의 강의인 [인프런 - 코딩으로 학습하는 리팩토링](https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81)의 내용이 포함되어 있다.
11+
:::
12+
13+
14+
---
15+
16+
### 기본 기술 - 가장 자주 사용하는 리팩토링 기술
17+
18+
아래와 같은 refactoring 기술은 여러 refactoring 을 할 때 사용되는 기본이 되면서 자주 사용하는 기술이라고 할 수 있다.
19+
20+
#### 1) Extract Function (함수 추출하기) ↔ Inline Function (함수 인라인하기)
21+
#### 2) Inline Function (함수 인라인하기) ↔ Extract Function (함수 추출하기)
22+
* 함수 추출하기, 함수 인라인하기는 서로 반대되는 리팩토링 기술이다.
23+
24+
#### 3) Extract Variable (변수 추출하기)
25+
#### 4) Inline Variable (변수 인라인하기)
26+
#### 5) Change Function Declaration (함수 선언 변경하기)
27+
#### 6) Encapsulate Variable (변수 캡슐화하기)
28+
#### 7) Rename Variable (변수 이름 바꾸기)
29+
#### 8) Introduce Parameter Object (매개 변수 객체 만들기)
30+
#### 9) Combine Functions into Class (여러 함수를 클래스로 묶기)
31+
#### 10) Combine Function into TransForm (여러 함수를 변환 함수로 묶기)
32+
#### 11) Split Phase (단계 쪼개기)
33+
34+
35+
---
36+
37+
### 캡슐화 - 모듈에서 외부 시스템으로 공개하지 않아도 되는 데이터를 숨기는 기술
38+
39+
#### 1) Encapsulate Record (레코드 캡슐화하기)
40+
#### 2)Encapsulate Collection (컬렉션 캡슐화하기)
41+
- 어떠한 클래스가 가지고 있는 컬렉션을 캡슐화하는 방법이다.
42+
- 컬렉션 자체를 캡슐화하는 것.
43+
- 컬렉션의 복사본을 전달하거나 컬렉션 자체를 제공하는게 아니라, 컬렉션을 수정할 수 있는 메서드를 제공한다거나..
44+
#### 3) Replace Primitive with Object (기본형을 객체로 바꾸기)
45+
#### 4) Replace Temp with Object (임시 변수를 질의 함수로 바꾸기)
46+
#### 5) Extract Class (클래스 추출하기)
47+
#### 6) Inline Class (클래스 인라인하기)
48+
#### 7) Hide Delegate (위임 숨기기) ↔ Remove Middle Man (중재자 제거하기)
49+
#### 8) Remove Middle Man (중재자 제거하기) ↔ Hide Delegate (위임 숨기기)
50+
#### 9) Substitute Algorithm (알고리듬 교체하기)
51+
- 캡슐화가 잘되어 있을때 사용할 수 있는 리팩토링 기술이라고 할 수 있음.
52+
53+
---
54+
55+
### 기능 옮기기 - 함수나 필드 또는 문장을 적절한 위치로 옮기는 기술
56+
57+
#### 1) Move Function (함수 옮기기)
58+
#### 2) Move Field (필드 옮기기)
59+
#### 3) Move Statements into Function (문장을 함수로 옮기기) ↔ Move Statements to Callers (문장을 호출한 곳으로 옮기기)
60+
- statements 를 함수 안으로 옮기는 것
61+
- 항상 호출되는 statements 는 함수 안으로 옮기는 것이 더 적절하다는 것이다.
62+
#### 4) Move Statements to Callers (문장을 호출한 곳으로 옮기기) ↔ Move Statements into Function (문장을 함수로 옮기기)
63+
- 문장을 함수를 호출하는 곳으로 옮기는 것
64+
- 함수 추출하기를 다시 하고 싶은 경우에 사용
65+
- 하나의 Statement 에 대해서 적절한 위치를 찾아주는 리팩토링 기술
66+
#### 5) Replace Inline Code with Function Call (인라인 코드를 함수 호출로 바꾸기)
67+
- Inline 된 코드가 여러번 사용되면 함수로 변경하는 것
68+
#### 6) Slide Statements (문장 슬라이드 하기)
69+
- 코드를 정리하다보면 위아래로 내리기만해도 그 부분을 줄일 수 있다.
70+
#### 7) Split Loop (반복문 쪼개기)
71+
- 반복문 안에서 여러가지 일을 하니깐 하나의 Function 으로 추출하는 것이고, 필드가 옮겨질수도 있다.
72+
#### 8) Replace Loop with Pipeline (반복문을 파이프라인으로 바꾸기)
73+
#### 9) Remove Dead Code (죽은 코드 제거하기)
74+
75+
---
76+
77+
### 데이터 조직화 - 데이터(변수가 필드) 구조를 다루는 기술
78+
79+
#### 1) Split Variable (변수 쪼개기)
80+
#### 2) Rename Field (필드 이름 바꾸기)
81+
#### 3) Replace Derived Variable with Query (파생 변수를 질의 함수로 바꾸기)
82+
- 계산할 수 있는 변수를 굳이 필드로 선언하지 말자는 것.
83+
- 다른 변수들을 통해서 계산할 수 있는 것은 함수로 바꾸자는 것.
84+
#### 4) Change References to Value (참조를 값으로 바꾸기)
85+
- 어떤 매개변수를 다룰 때 참조가 아니라 값을 전달한다는 것.
86+
- Reference 의 값을 많이 쓴다면 적절하겟지만 값하나만 쓰는 거면 값 하나만 전달한다는 것.
87+
#### 5) Change Value to References (값을 참조로 바꾸기)
88+
89+
---
90+
91+
### 조건부 로직 간소화 - 복잡한 조건문을 다루는 기술
92+
93+
#### 1) Decompose Conditional (조건문 분해하기)
94+
#### 2) Consolidate Conditional Expression (조건식 통합하기)
95+
- 여러 조건문이 있는 경우에 하나의 메서드로 빼내는것.
96+
#### 3) Replace Nested Conditional with Guard Clauses (중첩 조건문을 보호 구문으로 바꾸기)
97+
- Guard Clauses
98+
#### 4) Replace Conditional with Polymorphism (조건부 로직을 다형성으로 바꾸기)
99+
#### 5) Introduce Special Case (특이 케이스 추가하기)
100+
#### 6) Introduce Assertion (어서션 추가하기)
101+
102+
---
103+
104+
### API 리팩토링 - 쉽게 이해하고 사용할 수 있는 API 를 만드는 기술
105+
106+
:::warning
107+
✔ HTTP API 와 같은 것만 API 가 아니고, interface, class, function, method 이런 것들도 모두 API 라고 볼 수 있다.
108+
✔ 함수의 선언부를 변경하는 것도 API 리팩토링이라고 볼 수 있다.
109+
:::
110+
111+
#### 1) Separate Query from Modifier (질의 함수와 변경 함수 분리하기)
112+
#### 2) Parameterize Function (함수 매개 변수화하기)
113+
- 매개변수에 따라서 함수가 하는 일이 달라지게 만들어주는 것이다.
114+
- 그렇게 함으로써, 여러 함수들을 만드는 것을 줄일 수 있다면 유용한 리팩토링이 된다는 이야기.
115+
#### 3) Remove Flag Argument (플래그 인수 제거하기)
116+
#### 4) Preserve Whole Object (객체 통째로 넘기기)
117+
#### 5) Replace Parameter with Query (매개 변수를 질의 함수로 바꾸기)
118+
#### 6) Replace Query with Parameter (질의 함수를 매개 변수로 바꾸기)
119+
#### 7) Remove Setting Method (세터 제거하기)
120+
#### 8) Replace Constructor with Factory Function (생성자를 팩토리 함수로 바꾸기)
121+
#### 9) Replace Function with Command (함수를 명령으로 바꾸기)
122+
#### 10) Replace Command with Function (명령을 함수로 바꾸기)
123+
124+
---
125+
126+
### 상속 다루기 - 상속을 제대로 사용하는 기술
127+
128+
#### 1) Pull up Method (메서드 올리기)
129+
#### 2) Pull up Field (필드 올리기)
130+
#### 3) Pull up Constructor Body (생성자 본문 올리기)
131+
#### 4) Push Down Method (메서드 내리기)
132+
#### 5) Push Down Field (필드 내리기)
133+
#### 6) Replace Type Code with Subclasses (타입 코드를 서브 클래스로 바꾸기)
134+
#### 7) Remove Subclass (서브클래스 제거하기)
135+
#### 8) Extract Superclass (슈퍼 클래스 추출하기)
136+
#### 9) Collapse Hierarchy (계층 합치기)
137+
#### 10) Replace Subclass with Delegate (서브 클래스를 위임으로 바꾸기)
138+
#### 11) Replace Superclass with Delegate (슈퍼 클래스를 위임으로 바꾸기)
139+
140+
:::tip
141+
<a href="https://github.com/eottabom/refactoring-study" target="_blank" >예제 코드 보러가기 (클릭)</a>
142+
:::
143+
144+
---
145+
146+
:::success
147+
<b> 개인적인 생각</b>
148+
✔ 다양한 Refactoring 기술이 있지만, 중요한 것은 <b>의미 전달</b>이라고 생각한다.
149+
✔ 의도가 드러나게 코드를 작성해야 협업도 수월하고 유지보수도 쉬워진다.
150+
✔ 좋은 리팩토링은 읽는 사람이 고민하지 않게 만든다는 것이다.
151+
:::
152+
153+
---
154+
155+
### 📚 Reference
156+
157+
* [리팩토링 2판](https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599/ref=pd_sbs_5/147-9985226-7575522?pd_rd_w=IqNPf&pf_rd_p=3676f086-9496-4fd7-8490-77cf7f43f846&pf_rd_r=D6D6Y0JWZ93JER6KZ2J3&pd_rd_r=abe95b3d-5be0-437a-8fd3-e5d4959ae207&pd_rd_wg=k2g1l&pd_rd_i=0134757599&psc=1)
158+
* [인프런 - 코딩으로 학습하는 리팩토링](https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81)
159+
160+
<br/><br/>

0 commit comments

Comments
 (0)