티스토리 뷰
긴 매개변수 목록
- 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다.
- 과연 그 함수는 한가지 일을 하고 있는게 맞는가?
- 불필요한 매개변수는 없는가?
- 하나의 레코드로 뭉칠 수 있는 매개변수 목록은 없는가?
- 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면,
매개변수를 질의 함수로 바꾸기 (Replace Parameter with Query)
를 사용할 수 있다. - 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신,
객체 통째로 넘기기 (Preserve Whole Object)
를 사용할 수 있다. - 일부 매개변수들이 대부분 같이 넘겨진다면,
매개변수 객체 만들기 (Introduce Parameter Object)
를 적용할 수 있다. - 매개변수가 플래그로 사용된다면,
플래그 인수 제거하기 (Remove Falg Argument)
를 사용할 수 있다. - 여러 함수가 일부 매개변수를 공통적으로 사용한다면
여러 함수를 클래스로 묶기 (Combine Functions into Class)
를 통해 매개변수를 해당 클래스의 필드로 만들고 매서드에 전달해야 할 매개변수 목록을 줄일 수 있다.
매개변수를 질의 함수로 바꾸기 (Replace Parameter with Query)
- 함수의 매개변수 목록은 함수의 다양성을 대변하며, 짧을수록 이해하기 좋다.
- 어떤 한 매개변수를 다른 매개변수를 통해 알아낼 수 있다면
중복 매개변수
라 생각할 수 있다. - 매개변수에 값을 전달하는 것은
함수를 호출하는 쪽
의 책임이다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다. 임시 변수를 질의 함수로 바꾸기
와함수 선언 변경하기
를 통해 이 리팩토링을 적용한다.
플래그 인수 제거하기 (Remove Falg Argument)
- 플래그는 보통 함수에 매개변수로 전달해서, 함수 내부의 로직을 분기하는데 사용한다.
- 플래그를 사용한 함수는 차이를 파악하기 어렵다.
- bookConcert(customer, false), bookConcert(customer, true)
- bookConcert(customer), premiumBookConcert(customer)
조건문 분해하기 (Decompose Condition)
를 활용할 수 있다.
여러 함수를 클래스로 묶기 (Combine Functions into Class)
- 비슷한 매개변수 목록을 여러 함수에서 사용하고 있다면 해당 메소드를 모아서 클래스를 만들 수 있다.
- 클래스 내부로 메소드를 옮기고, 데이터를 필드로 만들면 메소드에 전달해야 하는 매개변수 목록도 줄일 수 있다.
Reference
백기선. 코딩으로 학습하는 리팩토링. 인프런. https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81/dashboard
'Study' 카테고리의 다른 글
[Refactoring] 가변 데이터 (0) | 2022.02.26 |
---|---|
[Refactoring] 전역 데이터 (0) | 2022.02.25 |
[Refactoring] 긴 함수 (0) | 2022.02.21 |
[Refactoring] 중복 코드 (0) | 2022.02.20 |
[Refactoring] 이해하기 힘든 이름 (0) | 2022.02.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링 부트
- 스프링부트
- Algorithm
- 알고리즘
- leetcode
- 릿코드
- 백준
- 스프링
- 자료구조
- 그리디
- 리팩토링
- 데이터베이스
- 인프런
- webflux
- 코틀린
- Spring
- 정렬
- 코테
- mysql 8.0
- 북클럽
- MySQL
- 문자열
- 노마드
- spring boot
- 김영한
- 구현
- 노마드코더
- Real MySQL
- kotlin
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함