CaseIterable, 연산 프로퍼티의 사용

나이든별 / Oldstar·2022년 5월 11일
0

Think about Keywords

목록 보기
16/37

공부한 것

  • CaseIterable
  • 연산 프로퍼티의 사용

고민한 점 및 생각해본 점

  • CaseIterableenum에 사용하면, 반복문에 넣을 수 있게 된다. ?!
  • 이것을 나는, 모든 케이스들을 하나의 배열로 묶어 주는 것과 비슷하다고 느꼈다.
  • 또한 이 '배열'에 직접 접근할 수도 있다. 바로 .allCases 메서드를 이용하는 방법이다.
enum Tastes: CaseIterable {
    case sour
    case sweet
    case bitter
    case salty
    case umami
}

for taste in Tastes.allCases {
    print(taste)
}

// sour
// sweet
// bitter
// salty
// umami
  • 진행중인 프로젝트에서는, 이를 통해 혹시 향후에 과일이 추가되더라도 이니셜라이저를 바꿀 필요가 없다.

  • 디미터의 법칙을 지키게끔 Wrapping Method를 사용하던 중 생각해볼 기회가 있었다. 언제 메서드를 쓰고, 언제 연산 프로퍼티를 쓸까?
  • 메서드를 통해 값을 불러왔던 경우는, 대표적으로 현재 쥬스의 종류에 따라 다른 레시피를 반환하는 경우였다.
  • 하지만 이 경우 굳이 메서드일 필요가 있었을까? 리뷰받을 때 이에 대해 생각할 기회가 있었다.
  • 과거 경험을 기반으로 기준을 세워볼 수 있었다. 이전에 SwiftArray 타입에 메서드를 추가해서 썼던 적이 있었다.
extension Array {
    static func slice() -> [Element] {
        if self.count > 3 {
            return Array(self[0...2])
        } else {
            return self
        }
    }
}
  • 이 경우 왜 메서드를 썼느냐? 안에서 값이 변화하기 때문이다.
  • 따라서, 내부에서 연산을 통해 값이 변화하지 않고, 단지 self의 상태에 따라 특정 값을 반환하는 내 레시피 반환 로직은, 연산 프로퍼티를 통해 이루어져야 한다고 느꼈다.
profile
함께 나아가고자 하는 사람

0개의 댓글