공부한 것
고민한 점 및 생각해본 점
CaseIterable
을 enum
에 사용하면, 반복문에 넣을 수 있게 된다. ?!
- 이것을 나는, 모든 케이스들을 하나의 배열로 묶어 주는 것과 비슷하다고 느꼈다.
- 또한 이 '배열'에 직접 접근할 수도 있다. 바로
.allCases
메서드를 이용하는 방법이다.
enum Tastes: CaseIterable {
case sour
case sweet
case bitter
case salty
case umami
}
for taste in Tastes.allCases {
print(taste)
}
- 진행중인 프로젝트에서는, 이를 통해 혹시 향후에 과일이 추가되더라도 이니셜라이저를 바꿀 필요가 없다.
- 디미터의 법칙을 지키게끔 Wrapping Method를 사용하던 중 생각해볼 기회가 있었다. 언제 메서드를 쓰고, 언제 연산 프로퍼티를 쓸까?
- 메서드를 통해 값을 불러왔던 경우는, 대표적으로 현재 쥬스의 종류에 따라 다른 레시피를 반환하는 경우였다.
- 하지만 이 경우 굳이 메서드일 필요가 있었을까? 리뷰받을 때 이에 대해 생각할 기회가 있었다.
- 과거 경험을 기반으로 기준을 세워볼 수 있었다. 이전에
Swift
의 Array
타입에 메서드를 추가해서 썼던 적이 있었다.
extension Array {
static func slice() -> [Element] {
if self.count > 3 {
return Array(self[0...2])
} else {
return self
}
}
}
- 이 경우 왜 메서드를 썼느냐? 안에서 값이 변화하기 때문이다.
- 따라서, 내부에서 연산을 통해 값이 변화하지 않고, 단지
self
의 상태에 따라 특정 값을 반환하는 내 레시피 반환 로직은, 연산 프로퍼티를 통해 이루어져야 한다고 느꼈다.