Class, Struct, Enumeration

최완식·2022년 2월 5일
0

Swift

목록 보기
5/36
post-thumbnail

Swift는 객체의 느낌으로 사용하는 3개의 개체가 있다. struct, class, enumeration이 그것이다. struct는 apple에서 권장하고, 실제로도 대체하는 것이 좋다고 생각되는 자료구조이고, enum의 경우 다른 언어보다 기능이 많이 추가되었다. property와 method 작성도 가능하다. 실제로 enum의 경우 값을 관리하는 목적으로 많이 사용했었다. 3개의 자료구조의 공통점과 차이점에 유의하며
읽다보면 금방 이해가 될 듯하다. 그럼 시작해보자.

Class

  • 전통적인 OOP 관점에서의 클래스
  • 단일 상속
  • 인스턴스/타입 메서드
  • 인스턴스/타입 프로퍼티
  • 참조타입
  • Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스
  • identity operator
    • reference type의 경우 같은 instance인지 확인할 방법이 필요함
    • ===, !==

Structure

  • C언어 등의 구조체보다 다양한 기능
  • 상속 불가능
  • 인스턴스/타입 메서드
  • 인스턴스/타입 프로퍼티
  • 값타입
  • Swift의 대부분의 큰 뼈대는 모두 구조체

Struct가 선호되는 이유

  • mutability control에 유리
    • 상태로 인한 부작용 없음
    • let 선언으로 완전한 immutable 자료형 생성
      • class의 경우 let 인스턴스여도 member 변수 변경 가능
  • 성능 유리
    • referencing 소요 시간 감소
    • compiler가 강력한 최적화 수행
  • 함수형 프로그래밍에서 효과정
    • immutable 요소를 바탕으로 code 가독성 향상
    • concurrency programming시 안정적인 코드 작성 가능
      • 순수함수이기 때문에 같은 결과를 기대할 수 있음

Enumeration

  • 연관된 Value들의 공통 Type을 정의할 경우 사용

  • Type-Safe한 방법으로 사용 가능

  • 특정 값으로 Raw Value 지정 필수 아님

  • Raw Value 사용 가능 자료 구조

    • String
    • Chracter
    • Integer
    • Floating-point
  • 사용 가능 기능

    • Computed Property
    • Instance method
    • Initializer
    • Extension
    • Protocol
  • Raw Value의 묵시적 할당

    enum Planet: Int {
        case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune // 2, 3, 4, 5, 6, 7, 8
    }
    
    enum CompassPoint: String { // RawValue type String으로 지정시 
        case north, south, east, west // member 이름이 RawValue가 됨
    }
  • Iterating

    • CaseIterable Protocol
  • Associated Values

    • member에 연관된 값을 저장할 수 있음
    • 각각의 member에 따른 다른 형태의 값을 저장할 수 있음
      • tuple 지원으로 여러개 값도 가능
    • Associated Value 사용시 enum에 Raw Value type 지정 불가
      enum Barcode {
          case upc(Int, Int, Int, Int)
          case qrCode(String)
      }
    • Optional도 Enum임

정리

profile
Goal, Plan, Execute.

0개의 댓글