Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- vfr video
- 자원부족
- terminal
- python
- k8s #kubernetes #쿠버네티스
- table not found
- JanusWebRTCGateway
- 코루틴 빌더
- mp4fpsmod
- Value too long for column
- JanusWebRTC
- VARCHAR (1)
- Spring Batch
- PersistenceContext
- taint
- 겨울 부산
- 티스토리챌린지
- tolerated
- PytestPluginManager
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- preemption #
- 달인막창
- JanusWebRTCServer
- 개성국밥
- 깡돼후
- kotlin
- 코루틴 컨텍스트
- JanusGateway
- pytest
- 오블완
Archives
너와 나의 스토리
[리팩토링] Replace Inline Code with Function Call 인라인 코드를 함수 호출로 바꾸기 본문
개발/Refactoring
[리팩토링] Replace Inline Code with Function Call 인라인 코드를 함수 호출로 바꾸기
노는게제일좋아! 2021. 11. 20. 14:03반응형
배경
- 함수는 여러 동작을 하나로 묶어준다.
- 함수의 이름이 코드의 동작 방식보다는 목적을 말해주기 때문에 함수를 활용하면 코드를 이해하기가 쉬워진다.
- 함수는 중복을 없애는 데도 효과적이다.
- 동작을 변경할 때도, 비슷해 보이는 코드들을 일일이 찾아 수정하는 대신 함수 하나만 수정하면 된다.
- 이미 존재하는 함수와 똑같은 일을 하는 인라인 코드를 발견하면 보통은 해당 코드를 함수 호출로 대체하길 원할 것이다.
- 하지만 기존 함수의 코드를 수정하더라도 인라인 코드의 동작이 바뀌지 않을 때만 함수 호출로 대체할 수 있다.
- 이를 판단하는 데는 함수 이름이 힌트가 된다.
- 인라인 코드 대신 함수 이름을 넣었을 때 말이 돼야 한다.
- 특히 라이브러리가 제공하는 함수로 대체할 수 있다면 훨씬 좋다.
- 예:
- Before
-
let appliesToMass = false; for (const s of states) { if (s === "MA") appliesToMass = true; }
-
- After
-
appliesToMass = states.includes("MA");
-
- Before
절차
- 인라인 코드를 함수 호출로 대체한다.
- 테스트한다.
결론
- 특정 함수와 똑같이 동작하는 인라인 코드가 있는 지 확인한다.
- 본인이 직접 만든 함수 뿐만 아니라 사용 중인 프로그래밍 언어의 표준 라이브러리나 플랫폼이 제공하는 API를 잘 파악하라.
- 사용 중인 언어와 플랫폼이 버전 업될 때 어떤 기능이 새로 생기고 변경되는지를 평소에 잘 챙겨두면 코드를 개선하는데 많은 도움이 된다.
- 있다면, 해당 코드를 함수를 호출하는 것으로 대체하라.
* 함수 추출하기와 이번 리팩터링의 차이
- 인라인 코드를 대체할 함수가 이미 존재하는지 여부.
- 아직 없어서 새로 만들어야 한다면 함수 추출하기를 적용하고
- 이미 존재한다면 인라인 코드를 함수 호출로 바꾸기를 적용하면 된다.
출처:
- [리팩터링 2판]
반응형
'개발 > Refactoring' 카테고리의 다른 글
[리팩터링] 11.5 매개변수를 질의 함수로 바꾸기 Replace parameter with Query (0) | 2022.01.18 |
---|---|
[리팩터링] 특이 케이스 추가하기 Introduce Special Case (0) | 2022.01.02 |
[리팩터링] Move Field 필드 옮기기 (0) | 2021.11.20 |
[리팩토링] Substitute Algorithm 알고리즘 교체하기 (0) | 2021.11.08 |
[리팩토링] Extract Class 클래스 추출하기 (0) | 2021.11.01 |
Comments