궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift : 기초문법 [ CLASS / STRUCT / ENUM 간단비교]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

본 게시글은 yagom님과Zedd0202님의 Swift 프로그래밍 3판을 참고하여 작성되었습니다.

 

⭐️ Swift Tip of the day : 스위프트 기초 문법  CLASS / STRUCT / ENUM

CLASS / STRUCT / ENUM

CLASS(클래스)

  • swift에서는 객체라는 용어대신에 인스턴스 라는 용어를 사용합니다. 한마디로 클래스타입의 인스턴스를 객체라고 칭하지 않습니다. 
  • 단일 상속만 가능합니다.
  • (인스턴스/타입) 메서드, (인스턴스/타입) 프로퍼티 (Struct와 같음)
  • 참조타입(=reference type) (리퍼런스reference 라고 부름)
  • iOS 프레임워크의 대부분이 클래스로 구성되어있습니다.
  • SwiftUI에서는 대부분잉 Struct로 구성되어있습니다.

STRUCT(구조체)

  • CLASS와 다르게 상속이 불가능 합니다.
  • (인스턴스/타입)메서드, (인스턴스/타입)프로퍼티 (클래스와 같음)
  • 값타입(=value type) (value 라고 부름)
  •  Swift의 대부분의 큰 뼈대는 모두 STRUCT(구조체)로 구성이 되어있습니다.
  •  Int, Double, String 등 데이터 타입 

- Struct를 사용하는 경우

1. 연관된 몇몇의 값들을 모아서 하나의 데이터타입으로 표현하고 싶을 때,

2. 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때,

3. 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속받을 필요가 없을 때,

4. Apple 프레임워크에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용한다.

 

Struct에 대해 자세히 알고싶다면 여기를 클릭해주세요.

ENUM(열거형)

  • 상속이 불가능하다
  • (인스턴스/타입)메서드, (인스턴스/타입)연산 프로퍼티
enum Animal {
  case tiger 
  case lion
  case bear
}

 let tiger2: Animal = Animal.tiger
 let lion2: Animal = .lion

열거형으로 동물의 이름을 설정해줬고, tiger2라는 변수는 Animal타입을 가지고 Animal.tiger 값을 줬습니다.

 

하지만 lion2Animal타입을 가지고 .lion 값만 주었는데 위와 같은 의미를 가지고 있는 것입니다.

처음 변수를 선언할 때 tiger2에 이 것은 Animal타입이다. 라는 것을 인식시켜주었고, 컴파일러가 알아서 기억을 하게 되는것입니다.

 

열거형에서 원시값은 rawValue 입니다. Animal에 타입을 지정해줘보록 하겠습니다.

enum Animal : Int {

    case tiger = 0
    case lion
    case bear

}

tirger 에게 0이라는 원시값을 할당해주었습니다.

print(tiger2.rawValue)   // 0

print(lion2.rawValue)    // 1

print(bear2.rawValue)    // 2
enum Animal : Double {

    case tiger = 0
    case lion
    case bear

}
print(tiger2.rawValue)   // 0.0

print(lion2.rawValue)    // 0.1

print(bear2.rawValue)    // 0.2

Enum을 사용하는 여러가지 방법

enum School {
    case elementry
    case middle
    case high
    
    //아래와 같이 한 줄 표현 가능
   // case elementary, middle, high
}
let yourSchool = School.elementry
print("YourSchool : \(yourSchool)")     //YourSchool : elementry

enum Grade : Int {
    case first = 1
    case second = 2
}

let yourGrade = Grade.second
print("YourGrade : \(yourGrade.rawValue)")  //YourGrade : 2

enum SchoolDetail {
    case elementary(name: String)
    case middle(name: String)
    
    func get() -> String {
        switch self {
        case .elementary(let name):
            return name
        case .middle(let name):
            return name
        }
    }
}
let yourMiddleSchoolName = SchoolDetail.middle(name: "서근")
print("Your Middle School Name is \(yourMiddleSchoolName.get())")
//Your Middle School Name is 서근

Class 와 Struct의 차이점

- 클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이

- 클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능

Class 와 Struct의 공통점

- 서로 다른 타입(자료형)들을 하나로 묶을 수 있다.

- (인스턴스/타입) 메서드, (인스턴스/타입) 프로퍼티

- 이러한 묶은 자료형들을 새로운 타입처럼 사용 가능.

- 클래스/구조체 안에서 함수/프로퍼티 정의 가능

- extension이 가능.

 

Class Struct Enum
Type Reference Value Value
Subclassing X X
Extension

 

 

읽어주셔서 감사합니다🤟

 

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.