Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

구조체 (Struct) 본문

Swift

구조체 (Struct)

JangJupyo 2019. 12. 30. 02:00
728x90
반응형

구조체(Struct)는 값을 저장하고 관련된 기능을 제공하는 데이터 타입입니다. 클래스와 비슷하지만 몇 가지 중요한 차이점이 있습니다. 클래스와 비슷하지만 몇 가지 중요한 차이점이 있습니다. 구조체는 주로 간단한 데이터 모델을 만들 때 사용됩니다.

 

구조체 특징

  1. 값 타입(Value Type): 구조체는 값 타입입니다. 즉, 구조체 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사본이 전달됩니다. 이와 달리, 클래스는 참조 타입(Reference Type)으로, 복사본 대신 참조가 전달됩니다.
  2. 상속 불가: 구조체는 다른 구조체나 클래스로부터 상속받을 수 없습니다. 클래스와 달리 구조체는 상속 계층을 가지지 않습니다.
  3. 기본 이니셜라이저 제공: 구조체는 모든 속성에 기본값을 제공하지 않으면 자동으로 멤버와이즈 이니셜라이저(Memeberwise Initalizer)가 제공됩니다. 이니셜라이저는 구조체의 속성을 초기화하는 메서드입니다.
  4. 불변성과 가변성: 구조체의 인스턴스가 let으로 선언되면 구조체의 속성은 수정할 수 없습니다. var로 선언된 경우에만 수정이 가능합니다.
  5. 메서드와 속성: 구조체는 속성(저장 속성 및 계산 속성)과 메서드를 가질 수 있으며, 클래스와 비슷하게 기능을 정의할 수 있습니다.

 

구조체 선언

struct User {
    var name: String
    var age: Int
    
    func greet() {
        print("Hello, my name is \(name).")
    }
    
    mutating func haveBirthday() {
        age += 1
        print("Happy birthday! You are now \(age) years old.")
    }
}

 

 

구조체 사용 예시

var user1 = User(name: "Jin", age: 25)
user1.greet()  // "Hello, my name is Jin."

user1.haveBirthday()  // "Happy birthday! You are now 26 years old."

 

주요 개념

1. 값 타입: 구조체는 값 타입이기 때문에 변수에 할당되거나 함수에 전달될 때 복사됩니다.

var user2 = user1  // user1의 복사본이 user2에 할당됩니다.
user2.name = "Lee"
print(user1.name)  // "Jin", 복사본이므로 원본은 변하지 않음

 

2. mutating 키워드: 구조체의 인스턴스 메서드가 속성을 수정하려면 메서드 앞에 mutating 키워드를 붙여야 합니다.

mutating func haveBirthday() {
    age += 1
}

 

3. 기본 이니셜라이저: Swift는 모든 속성에 기본값을 제공하지 않으면, 자동으로 이니셜라이저를 생성해줍니다.

let user = User(name: "Jin", age: 25)

 

 

클래스와의 차이점

특징 구조체(Struct) 클래스(Class)
타입 값 타입(Value Type) 참조 타입(Reference Type)
상속 불가능 가능
초기화 멤버와이즈 이니셜라이저 자동 제공 사용자 정의 이니셜라이저 필요
불변성 let으로 선언 시 속성 수정 불가 let으로 선언 시에도 속성 수정 가능
참조 복사 복사본 전달 참조 전달

 

구조체는 주로 간단한 데이터 모델링이나 작은 데이터를 처리할 때 사용됩니다. 값 타입이므로 복사 작업을 통해 데이터를 보호할 수 있다는 장점이 있습니다.

반응형

'Swift' 카테고리의 다른 글

PictureInPicture  (0) 2020.10.21
Array vs NSArray, NSMutableArray  (0) 2020.01.22
iOS 13버전 SNS Login 대응 방법  (0) 2020.01.10
클래스 (Class)  (0) 2020.01.02
주석 작성법  (0) 2019.12.29