티스토리 뷰
기본형 집착
- 애플리케이션이 다루고 있는 도메인에 필요한 기본 타입을 만들지 않고 프로그래밍 언어가 제공하는 기본 타입을 사용하는 경우가 많다.
- 예) 전화번호, 좌표, 돈, 범위, 수량 등
- 기본형으로는 단위 (인치 vs 미터) 또는 표기법을 표현하기 어렵다.
- 이완 관련된 리팩토링 기술은
3종류
가 있다.기본형을 객체로 바꾸기 (Replace Primitive with Object)
타입 코드를 서브클래스로 바꾸기 (Replace Type Code with Subclasses)
조건부 로직을 다형성으로 바꾸기 (Replace Conditional with Polymorphism)
- “클래스 추출하기 (Extract Class)”
- “매개변수 객체 만들기 (Introduce Parameter Object)”
기본형을 객체로 바꾸기 (Replace Primitive with Object)
- 개발 초기에는 기본형 (숫자 또는 문자열)으로 표현한 데이터가 나중에는 해당 데이터와 관련있는 다양한 기능을 필요로 하는 경우가 발생한다.
- 예) 문자열로 표현하던 전화번호의 지역 코드가 필요하거나 다양한 포맷을 지원하는 경우.
- 예) 숫자로 표현하던 온도의 단위 (화씨, 섭씨)를 변환하는 경우.
- 기본형을 사용한 데이터를 감싸 줄 클래스를 만들면, 필요한 기능을 추가할 수 있다.
타입 코드를 서브클래스로 바꾸기 (Replace Type Code with Subclasses)
- 비슷하지만 다른 것들을 표현해야 하는 경우, 문자열(String), 열거형 (enum), 숫자 (int) 등으 로 표현하기도 한다.
- 예) 주문 타입, “일반 주문”, “빠른 주문”
- 예) 직원 타입, “엔지니어”, “매니저”, “세일즈”
- 타입을 서브클래스로 바꾸는 계기
- 조건문을 다형성으로 표현할 수 있을 때, 서브클래스를 만들고
조건부 로직을 다형성으로 바꾸기
를 적용한다. - 특정 타입에만 유효한 필드가 있을 때, 서브클래스를 만들고
필드 내리기
를 적용한다.
- 조건문을 다형성으로 표현할 수 있을 때, 서브클래스를 만들고
조건부 로직을 다형성으로 바꾸기 (Replace Conditional with Polymorphism)
- 복잡한 조건식을 상속과 다형성을 사용해 코드를 보다 명확하게 분리할 수 있다.
swich
문을 사용해서 타입에 따라 각기 다른 로직을 사용하는 코드.- 기본 동작과 (타입에 따른) 특수한 기능이 섞여있는 경우에 상속 구조를 만들어서 기본 동작을 상위클래스에 두고 특수한 기능을 하위클래스로 옮겨서 각 타입에 따른
차이점
을 강조할 수 있다. - 모든 조건문을 다형성으로 옮겨야 하는가?
- 단순한 조건문은 그대로 두어도 좋다.
- 오직 복잡한 조건문을 다형성을 활용해 좀 더 나은 코드로 만들 수 있는 경우에만 적용한다. (과용을 조심하자.)
Reference
백기선. 코딩으로 학습하는 리팩토링. 인프런. https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81/dashboard
'Study' 카테고리의 다른 글
[Design Pattern] 전략 패턴 (0) | 2022.05.08 |
---|---|
[Design Pattern] 템플릿 메서드 패턴 (0) | 2022.05.08 |
[Refactoring] 산탄총 수술 (0) | 2022.03.18 |
[Refactoring] 뒤엉킨 변경 (0) | 2022.02.27 |
[Refactoring] 가변 데이터 (0) | 2022.02.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Algorithm
- 스프링부트
- 정렬
- 노마드
- 알고리즘
- 노마드코더
- 김영한
- Spring
- 리팩토링
- 자료구조
- leetcode
- 스프링
- MySQL
- 인프런
- 데이터베이스
- 코테
- 문자열
- Real MySQL
- spring boot
- 그리디
- mysql 8.0
- 북클럽
- kotlin
- 릿코드
- webflux
- 백준
- 파이썬
- 스프링 부트
- 구현
- 코틀린
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함