struct
- 연관된 상태는 변수, 상수에 저장하고 행동은 함수를 정의한 후 그룹화하여 데이터타입으로 사용할 수 있음.
- 프로퍼티 : 구조체, 클래스 안에 있는 변수, 상수
- 메소드 : 구조체, 클래스 안에 있는 함수
- 구조체의 인스턴스를 생성하여 사용할 수 있음.
- 구조체 안에서 사용되는 변수와 상수인 프로퍼티에는 default 값을 정해줄 수 있음.
- Memberwise Initializer 를 제공함.
- 직접 init을 정의하지 않아도 모든 프로퍼티의 초기화를 자동으로 생성해주는 기능.
- 구조체를 사용하여 만들어진 인스턴스는 Value Type임.
- 구조체의 인스턴스는 값이 복사되므로, 서로 다른 값으로 처리하게 됨. *
- 메소드에서 프로퍼티를 변경하려면 mutating 키워드를 사용해야 함.
- 상속 불가능.
- 인스턴스를 let으로 만들면 내부 프로퍼티를 변경할 수 없음.
프로퍼티를 변경하려면 var로 만들어야 함.
struct 정의, 사용하는 방법
// 기본 정의 방법
struct 구조체이름 {
// 프로퍼티 선언
// 함수 구현
// ⭐️ class와 다르게 init을 만들지 않아도 자동으로 만들어주어서 생략해도 됩니다!
}
// 사용 방법
// 구조체이름() 를 사용하면 됩니다.
// ()안에 구조체에서 사용하는 프로퍼티들의 내용을 채워주어야 합니다/
let 상수이름 = 구조체이름()
struct Person {
var name: String
var age: Int = 0
func introduce() {
print("안녕하세요 \(name)입니다. 저는 \(age)살 입니다")
}
mutating func happyNewYear() {
age += 1
}
}
var me = Person(name: "Brody") // struct의 프로퍼티에 기본값을 주었기 때문에 생략 가능
let friend = Person(name: "감자", age: 5)
me.age // me의 age 프로퍼티
me.name // me 의 name 프로퍼티
me.introduce() // me 의 introduce 함수를 호출합니다.
// 출력 값 : 안녕하세요 Brody입니다. 저는 0살 입니다
me.happyNewYear()
me.introduce() // 안녕하세요. Brody입니다. 저는 1살 입니다
friend.introduce() // // 안녕하세요. 감자입니다. 저는 5살 입니다