Jupyo's Daily Story
구조체 (Struct) 본문
728x90
반응형
구조체(Struct)는 값을 저장하고 관련된 기능을 제공하는 데이터 타입입니다. 클래스와 비슷하지만 몇 가지 중요한 차이점이 있습니다. 클래스와 비슷하지만 몇 가지 중요한 차이점이 있습니다. 구조체는 주로 간단한 데이터 모델을 만들 때 사용됩니다.
구조체 특징
- 값 타입(Value Type): 구조체는 값 타입입니다. 즉, 구조체 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사본이 전달됩니다. 이와 달리, 클래스는 참조 타입(Reference Type)으로, 복사본 대신 참조가 전달됩니다.
- 상속 불가: 구조체는 다른 구조체나 클래스로부터 상속받을 수 없습니다. 클래스와 달리 구조체는 상속 계층을 가지지 않습니다.
- 기본 이니셜라이저 제공: 구조체는 모든 속성에 기본값을 제공하지 않으면 자동으로 멤버와이즈 이니셜라이저(Memeberwise Initalizer)가 제공됩니다. 이니셜라이저는 구조체의 속성을 초기화하는 메서드입니다.
- 불변성과 가변성: 구조체의 인스턴스가 let으로 선언되면 구조체의 속성은 수정할 수 없습니다. var로 선언된 경우에만 수정이 가능합니다.
- 메서드와 속성: 구조체는 속성(저장 속성 및 계산 속성)과 메서드를 가질 수 있으며, 클래스와 비슷하게 기능을 정의할 수 있습니다.
구조체 선언
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 |