적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/Swift

[Swift] Class / Struct / Enum Types

hongssup_ 2022. 5. 12. 23:09
반응형

값 타입 vs 참조 타입 설명은 다음을 참고 -> Value Type / Reference Type

 

Enumerations 열거형

An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code.

연관된 값들을 하나의 그룹으로 묶어 데이터 타입으로 정의한 자료형

열거형을 사용하면 미리 정의해둔 타입의 케이스 내에서 벗어날 수 없으므로 코드의 가독성과 안정성이 높아짐 

→ 명확한 분기 처리 가능 (열거형은 항상 switch문으로 분기처리 가능)

다른 언어와 다르게 Swift에서 열거형은 값을 따로 선언해주지 않아도 된다. 

- 값 타입

ex) enum 사용 예시

더보기
enum Family {
    case father
    case mother
    case brother
    //case father, mother, brother
}
print(Family.mother) //mother

enum Order: Int {
    case father = 1
    case mother
    case brother
}
print(Order.mother.rawValue) //2

enum FamilyName {
    case father(name: String)
    case mother(name: String)
    
    func get() -> String {
        switch self {
        case .father(let name):
            return name
        case let .mother(name):
            return name
        }
    }
}
let motherName = FamilyName.mother(name: "김태희")
print(motherName) //mother(name: "김태희")
print(motherName.getName()) //김태희

 

 

클래스와 구조체는 정의 방식은 비슷하지만(similar definition syntax), 엑세스 할 때 (가져다 쓸 때) 차이가 난다.

 

Class

- 단일 상속만 가능

- 참조 타입 (= reference type) 

Struct 구조체

- 상속이 불가능

- 값 타입 (= value type) 변수나 상수에 할당되거나 함수에 전달될 때 값이 복사되는 유형

struct는 값을 복사하기 때문에 원본/복사본 값이 서로 영향을 받지 않아 안전하다. 보통 서버에서 json 정보 등을 가져왔을 때 사용. 

따라서 간단한 json 정보를 파싱하거나 기능들을 모아놓은 구조체를 만들 때 사용.  

 

 

Class 클래스 Struct 구조체 Enum 열거형
참조 타입 call by reference 값 타입 call by value 값 타입 call by value
상속가능 상속 불가능 상속 불가능
참조되는 값은 힙 메모리 영역에 저장됨 스택 메모리 영역에 할당 → 속도가 빠름  
레퍼런스 형태로 공유가 가능 공유 불가능  
iOS 프레임워크의 대부분이 클래스로 구성 Swift의 대부분 큰 뼈대는 모두 구조체로 구성
ex) 데이터 자료형 타입 (Int, String, Double, Float, Array 등)
 
  항상 새로운 변수로 값의 복사가 일어나기 때문에 멀티스레드 환경에서 문제가 일어날 확률이 적음  

 

 

 

 

+ 타입 프로퍼티? 인스턴스 프로퍼티?


참고 : ZeddiOS, roniruny

728x90
반응형