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 | 31 |
Tags
- ribs
- rxswift
- collectionview
- map
- ios
- 리팩토링
- tableView
- 클린 코드
- swiftUI
- UITextView
- MVVM
- HIG
- 리펙터링
- uitableview
- 애니메이션
- Clean Code
- Protocol
- combine
- SWIFT
- UICollectionView
- 스위프트
- clean architecture
- uiscrollview
- Observable
- RxCocoa
- Refactoring
- swift documentation
- Xcode
- 리펙토링
- Human interface guide
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Clean Code(클린 코드) - 2. 의미 있는 이름 본문
의도를 명확히
- 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 더 많은 장점이 존재
- 의도가 명확하게 이름을 지을 것 (주석이 필요하다면 의도를 명확히 드러내지 못한 것)
- 존재 이유는?
- 수행 기능은?
- 사용 방법은?
WRONG
var d: Int // 경과 시간 (단위: 날짜)
RIGHT
var elapsedTimeInDays: Int
var daysSinceCreation: Int
var daysSinceModification: Int
var fileAgeInDays: Int
잘못된 정보를 지양
- 여러 계정 그룹을 묶을 때 실제 List가 아니면 accountList라 하지 않는것을 주의
- 실제 컨테이너가 List인 경우에도 컨터이너 유형을 이름에 넣지 않는 것이 바람직
WRONG
var accountList: [String]
RIGHT
var accountGroup: [String]
var accountOfAccounts: [String]
var accounts: [String]
불필요한 용어를 지양
- 아무런 내용도 제공해주지 않는 의미 없는 용어가 없는 코드가 훨씬 쉬워지므로 불필요한 용어를 사용하지 않는 것
- 불필요한 용어라는 것은 `중복`을 의미
WRONG
struct ProductInfo { ... }
struct ProductData { ... }
var nameString: String
- Manager
- Processor
- Data
- Info
RIGHT
struct Product { ... }
var name: String
자신의 기억력을 믿지 말것
- 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 따로 변환해야 한다면, 이 변수이름은 바람직하지 않은 코드
- 똑똑한 프로그래머와 전문가 프로그래머 사이에서 나타나는 차이점
- 전문가 프로그래머 - 명로함이 최고
- 똑똑한 프로그래머 - 자신의 정신적 능력을 과시하고 싶어하는 점
의미 있는 맥락을 추가
- 사용자가 이름을 봤을 때 앞,뒤 변수 이름을 보고 따로 유추하지 않고도, 해당 이름만 봤을때 이름이 명확할때까지 맥락을 추가
- 맥락을 넣어서 의미가 명확해지게 하는데, 만약 맥락이 넣을 아이디어가 떠오르지 않을때는 접두어를 붙이는 방법 사용
WRONG
// property만 봤을 때, state라는 property가 추가되면 address인지 명확하지 않은 상태
var firstName: String
var secondName: String
var street: String
var houseNumber: String
var city: String
RIGHT
// addr를 붙여서 의미가 명확해지도록 설정
var addrFirstName: String
var addrSecondName: String
var addrStreet: String
var addrHouseNumber: String
var addrCity: String
- 이름을 추가하여 맥락을 명확히 하는 방법도 있지만, 함수 형태를 클래스 형태로 변환하는 방법도 존재
WRONG
number, verb, pluralModifier는 유추해야하는 변수 - 함수를 끝까지 읽어보고 나서야 추측이 가능하므로, 함수를 짧게 만드는게 핵심
func printGuessStatistics(candidate: String, count: Int) {
var number: String
var verb: String
var pluralModifier: String
if count == 0 {
number = "no"
verb = "are"
pluralModifier = "s"
} else if count == 1 {
number = "1"
verb = "is"
pluralModifier = ""
} else {
number = String(count)
verb = "are"
pluralModifier = "s"
}
let guessMessage = number + verb + candidate + pluralModifier
print(guessMessage)
}
RIGHT
함수를 읽어보고 나서야 유추가 가능하므로, 각 함수들을 짧게 만들어서 빠르게 유추할 수 있게끔 설계
class GuessStatisticsMessage {
var number: String
var verb: String
var pluralModifier: String
public func make(candidate: String, count: Int) -> String {
createPluralDependentMessageParts(count)
return verb + number + candidate + pluralModifier
}
private func createPluralDependentMessageParts(_ count: Int) {
if count == 0 {
thereAreNoLetters()
} else if count == 1 {
thereIsOneLetter()
} else {
thereAreManyLetters(count)
}
}
private func thereAreManyLetters(_ count: Int) {
number = String(count)
verb = "are"
pluralModifier = "s"
}
private func thereIsOneLetter() {
number = "1"
verb = "is"
pluralModifier = ""
}
private func thereAreNoLetters() {
number = "no"
verb = "are"
pluralModifier = "s"
}
}
* 참고: Clean Code (로버트 C. 마틴)
'Clean Code (클린 코드)' 카테고리의 다른 글
[iOS - swift] Clean Code(클린 코드) - 5. 객체와 자료 구조 (객체지향, 절차지향 장단점) (0) | 2021.11.17 |
---|---|
[iOS - swift] Clean Code(클린 코드) - 4. 주석 (0) | 2021.11.14 |
[iOS - swift] Clean Code(클린 코드) - 3. 함수 (2) (0) | 2021.11.13 |
[iOS - swift] Clean Code(클린 코드) - 3. 함수 (1) (0) | 2021.11.11 |
[iOS - swift] Clean Code(클린 코드) - 1. 클린 코드의 개념 (0) | 2021.11.10 |
Comments