Notice
Recent Posts
Recent Comments
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 | 29 | 30 |
Tags
- RxCocoa
- 클린 코드
- UITextView
- Xcode
- Observable
- 리팩토링
- Clean Code
- uitableview
- HIG
- UICollectionView
- 애니메이션
- 리펙터링
- combine
- MVVM
- Refactoring
- collectionview
- ribs
- 리펙토링
- SWIFT
- map
- uiscrollview
- Protocol
- clean architecture
- Human interface guide
- rxswift
- swiftUI
- 스위프트
- tableView
- ios
- swift documentation
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 2-1. 리팩터링 원칙, 리펙터링의 목적 본문
리팩터링 원칙
- 리펙터링이란?
- 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
- 주의: 리팩터링은 특정한 방식에 따라 코드를 정리하는것이며, 단순히 코드를 정리하는 작업은 리펙터링이 아니고 `재구성(restructuring)`이라고 명칭
목적을 명확히 할 것
- 기능 추가인지 리펙터링인지 인식하면서 프로그래밍할 것
- 기능 추가: 기존 코드는 절대 건드리지 않고 새 기능을 추가 (진정성은 테스트를 추가해서 통과하는지 확인하는 방식으로 측정)
- 리펙토링: 기능 추가는 절대 하지 않기로 다짐한 뒤 오로지 코드 재구성에만 전념 (테스트도 새로 만들지 않을 것)
- 리팩터링의 목적은 개발 기간을 단축하기 위함 (기능 추가 시간을 줄이고, 버그 수정 시간을 줄이는 것)
리팩터링을 하는 이유
- 소프트웨어 설계가 좋아지는 효과
- 리팩터링을 하지 않으면 내부 설계(아키텍처)가 썩기 쉽고, 아키텍처를 충분히 이해하지 못한 채 단기 목표만을 위해 코드를 수정하다 보면 기반 구조가 무너지기 쉬운 현상
- 소프트웨어를 이해하기 쉬워지는 장점
- 보통 프로그램을 동작시키는 데만 신경 쓰다 보면 나중에 그 코드르 다룰 개발자를 배려하지 못한채 진행되지만, 리팩터링은 코드가 더 잘 읽히게끔 도움을 주는 효과
- 곧 리팩토링은 내 의도를 더 명확하게 전달하도록 개선할 수 있는 장점이 존재
- 게으른 프로그래머 - 내가 직접 짠 코드를 기억할 필요가 있는 것들은 최대한 코드에 담도록 수정
- 리팩터링하면 버그를 쉽게 탐색
- 리팩터링하다보면 코드가 하는 일을 깊이 파악하게 되면서 새로 깨달은 것을 곧바로 코드에 반영
- 프록그램의 구조를 명확하게 다듬으면 그냥 '이럴 것이다'라고 가정하던 점들이 명확히 들어나면서 버그도 쉽게 발견
- 프로그래밍 속도 향상
- 보통 리팩터링을 하면 시간이 더 소모된다고 생각하지만, 장기적으로 보았을 때 한 시스템에 기능을 추가하려면 훨씬 오래걸리는 현상
- 기존 코드베이스에 잘 녹여낼 방법을 찾는데 시간이 들고, 기능을 추가하면 버그가 발생하는 일이 잦고, 이를 해결하는데 시간이 더욱 소모
- 20년 전만해도 설계를 잘하려면 코딩을 시작하기 전에 설계부터 완벽히 마쳐야 했지만, 코딩 단계에 한번 들어서면 코드가 부패할 일이 많고 빠른 프로그래밍을 위해서는 리팩터링이 중요
리팩터링을 하는 타이밍
- Don Roberts의 3의 법칙
- 1) 처음에는 그냥 한다
- 2) 비슷한 일을 두 번째로 하게 되면, 일단 계속 진행한다
- 3) 비슷한 일을 세 번째 하게 되면 리팩터링한다
- 리팩터링이 필요없는 코드는?
- 리팩터링하는 것보다 처음부터 새로 작성하는게 쉬운 경우
[Refactoring] 2-2. 리팩터링 원칙에서 계속
* 참고
- Refactoring (Marting Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 3-2. 코드에서 나는 악취 (중복 코드, 긴 함수, 긴 매개변수, 전역 데이터, 가변 데이터, switch 문, 반복문, default value) (0) | 2023.01.15 |
---|---|
[Refactoring] 3-1. 코드에서 나는 악취 (0) | 2022.01.23 |
[Refactoring] 2-2. 리팩터링 원칙, 리펙터링의 목적 (3) | 2022.01.21 |
[Refactoring] 1-2. 리펙토링이란?, 리펙토링의 예시 (0) | 2022.01.03 |
[Refactoring] 1-1. 리펙토링이란?, 리펙토링의 예시 (0) | 2021.12.31 |
Comments