본문 바로가기
개발/iOS

swift 문법 기초 4/7

by 마자용 2021. 8. 26.
코드 출처 - iOS 프로그래밍을 위한 Swift 기초 강의

 

  • 구조체, 클래스, 열거형은 모두 type을 정의하는 것이기 때문에 Upper Camel Case로 명명한다.
  • 구조체 struct (→ 값 타입)
    • Swift에서 대부분의 타입은 구조체로 정의된다.
    • 정의
      • struct 이름 {
        	/* 구현부 */
        }
    • 프로퍼티 property
      • 인스턴스 프로퍼티 - 타입 안에 들어있는 변수
      • 타입 프로퍼티 - 타입 자체가 사용하는 변수
        • struct 내에서 사용함
        • 앞에 static을 붙여 정의한다.
      • 정의할 때 var를 붙이면 가변, let을 붙이면 불변이 된다.
    • 메서드 method
      • 구조체 내에 들어 있는 함수
      • 인스턴스 메서드, 타입 메서드가 있다.
    • 코드
  • 클래스 class (→ 참조 타입)
  • 열거형 enum (→ 값 타입)
    • 유사한 종류의 여러 값을 한 곳에 모아서 정리한 것
      • ex) 요일, 월, 계절, ...
    •  정의
      • enum 이름 {
        	case 이름1,
            case 이름2,
            case 이름3, 이름4, 이름5
            //...
        }
      • 한 줄에 개별로 하나씩, 또는 여러 개로 정의할 수 있음
    • C언어의 열거형: 각 case별로 정수값을 할당함
      • ↔ Swift의 열거형: 각각의 case가 고유한 값으로 취급됨
        • 각 case별로 정수값을 할당하려면 원시값 rawValue를 사용하면 된다.
          • 값은 모두 달라야 함
          • 열거형의 이름 뒤에 : 원시값의 type를 표시
    • case는 한정되어 있기 때문에 다 적어주고 나면 default를 생략해도 된다.
    • 원시값으로 case를 초기화할 수 있다.
      • but 원시값이 case에 해당하지 않을 수 있으므로 원시값을 통해 초기화한 인스턴스는 옵셔널 타입이어야 한다.
        • let apple: Fruit? = Fruit(rawValue: 0)
    • 열거형에 메서드를 추가할 수 있다.
      • enum Month {
            case dec, jan, feb
            case mar, apr, may
            case jun, jul, aug
            case sep, oct, nov
            
            func printMessage() {
                switch self {
                case .mar, .apr, .may:
                    print("따스한 봄~")
                case .jun, .jul, .aug:
                    print("더운 여름~")
                case .sep, .oct, .nov:
                    print("선선한 가을~")
                case .dec, .jan, .feb:
                    print("추운 겨울~")
                }
            }
        }
        
        Month.apr.printMessage()    // 따스한 봄~
    • 그 외 코드
  • 클래스 vs 구조체/열거형
    • 클래스 class
      • 기존의 OOP 관점에서의 class와 크게 다를 바 없음
        • but 상속이 된다는 점에서 다르다.
      • 참조 타입이다.
        • 값의 메모리 위치를 전달한다.
      • Apple frame work의 대부분의 큰 뼈대 → class로 구성
    • 구조체 struct
      • 다른 언어의 구조체보다 다양한 기능을 가진다.
      • 상속이 되지 않으며, 값 타입이다.
        • 값을 복사해 전달한다.
      • 사용
        • 연관된 값들을 모아서 하나의 data type으로 표현하고자 할 때
        • 참조가 아닌 복사를 원할 때
        • 자신을 상속하거나 다른 타입을 상속받을 필요가 없을 때
      • Swift의 대부분의 큰 뼈대 → struct로 구성
    • 열거형 enum
      • 다른 언어의 enum과 많이 다르다.
        • Swift에서는 열거형 자체가 하나의 데이터 타입으로 취급된다.
        • 각각의 case들을 전부 하나의 유의미한 값으로 취급한다.
          • 다른 언어 → 정수 값으로만 취급
    • 정리

'개발 > iOS' 카테고리의 다른 글

swift 문법 기초 5/7  (0) 2021.08.28
[Swift] 함수형 타입 Functional Type  (0) 2021.08.28
틀린 문제 (스위프트 함수 퀴즈)  (0) 2021.08.26
swift 문법 기초 3/7 (nil, Optional)  (0) 2021.08.25
swift 문법 기초 2/7  (0) 2021.08.25

댓글