Language/Java

[2] Duplicated Code - 중복코드

지팡구 2024. 1. 22. 00:36

효율적으로 코드를 짜기 위해선 앞서 설명한 네이밍 관련 규칙들과 중복된 코드를 줄이는 것이 중요합니다.

 

이번 챕터에서는 중복된 코드를 줄일 수 있는 방법론 들을 설명했습니다.

 

중복코드의 단점은 코드의 변경 시, 동일한 모든 곳의 코드를 변경해야합니다.

 

이러한 단점을 개선하기 위해 사용할 수있는 리팩토링 기술은 다음과 같습니다.

 


Extract Funcation ( 함수 추출 )
- 동일한 코드를 여러 메소드에서 사용하는 경우
Slide Statements ( 코드 분리 )
- 비슷하게 생겼지만 완전히 같지는 않은 경우
Pul Up Method( 메소드 올리기 )
- 여러 하위 클래스에 동일한 코드가 있다면 메소드 올리기


1.  함수 추출하기

 

"의도"와 "구현" 분리하기

 

의도와 구현?

어떤 일을 하려는지 << 잘 표현하고 있다면 "의도"를 잘 파악하고 있음 
잘 표현하고 있지 못하다면 우리가 "구현"을 들여다 보고 있음


내가 과연 이 코드가, 메서드가 어떤 함수인지 

- 무슨 일을 하는 코드인지 알아내려고 노력해야하는 코드라면 해당 코드를 함수로분리,
그리고 함수 이름으로 행위를 표현할 수 있음
- 한줄짜리 메소드도 괜찮은가?
거대한 함수 안에 들어있는 주석은 추출한 함수룰 찾는데 있어 좋은 단서가 될 수 있음

2. 코드 정리하기 (Slide statements)


관련있는 코드끼리 묶여있어야 더욱 쉽게 코드를 이해 가능
함수에서 사용할 변수를 상단에 미리 정의하기 보다, 해당 변수를 사용하는 코드 바로 위 선언
관련있는 코드끼리 묶은 다음 함수 추출을 한번 더 하면 더욱 깔끔

 

 

3. 메소드 올리기 ( Pull up Method )


중복 코드는 당장 잘 동작하더라도 미래에 버그를 만들어낼 빌미를 제공
여러 하위 클래스에 동일한 코드가 있다면 손쉽게 이 방법을 적용할 수있음
비슷하지만 일부 값만 다른 경우라면 함수 매개변수화 리팩토링을 적용 후  이 방법 사용 가능
하위 클래스에 있는 코드가 상위 클래스가 아닌 하위 클래스 기능에 의존하고 있다면  필드올리기를 적용 한 이후 이 방법을 적용할 수있음

두 메소드가 비슷한 절차를 지니고 있따면 템플릿 메소드 패턴 적용 가능 

'Language > Java' 카테고리의 다른 글

[3] 긴 함수  (1) 2024.01.29
[1] 이해하기 힘든 이름  (1) 2024.01.22
Reflection(리플렉션)이란?  (0) 2023.04.01
객체 지향적 설계?  (0) 2022.11.21
문자열 나누기 - StringTokenizer  (0) 2022.08.03