본문 바로가기
iOS/Swift 문법 심화 학습

구조체 [ Struct ]

by 황민우 2022. 2. 3.

정의

- 구조체는 인스턴스의 값(프로퍼티)을 저장하거나 기능(메서드)을 제공하고,

  이를 캡슐화할 수 있는 스위프트가 제공하는 타입입니다.

- 구조체 안의 변수를 프로퍼티라고 합니다.

- 구조체 안의 함수를 메서드라고 합니다.

- Swift에서는 대부분의 타입이 구조체로 이루어져 있습니다.

- 구조체는 값 타입입니다.


정의 형식

struct 이름 {
	// 구현 코드
}

구조체 예제

구조체 생성

- 간단한 예제를 통해 알아보겠습니다.

- 특정 타입 안에 들어있는 인스턴스 변수를 프로퍼티, 구조체 안에 있는 함수를 메서드라고 칭합니다.

- 가변 프로퍼티는 변수 선언 후에도 값을 변경할 수 있는 (인스턴스) 프로퍼티입니다.

- 불변 프로퍼티는 값을 변경할 수 없는 (인스턴스) 프로퍼티입니다.

- static 키워드를 사용하면 해당 타입에서 사용할 수 있는 타입 프로퍼티가 됩니다.

struct Sample {
    
    var mutableProperty: Int = 100 // 가변 프로퍼티
    let immutableProperty: Int = 100 // 불변 프로퍼티
    static var typeProperty: Int = 100 // 타입 프로퍼티
    
    // 인스턴스 메서드
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드
    static func typeMethod() {
        print("type method")
    }
}

구조체 사용

- 다음은 구조체의 사용입니다.

- 위의 예제와 연결되는 내용입니다.

 

가변 인스턴스

- Sample이라는 이름으로 생성한 구조체가 mutable 변수의 타입으로 사용되었습니다.

- mutable 변수와 mutableProperty는 가변 프로퍼티이기 때문에,

  다음과 같이 값을 변경시켜도 오류가 발생하지 않습니다.

var mutable: Sample = Sample()
mutable.mutableProperty = 200

 

불변 인스턴스

- Sample이라는 이름으로 생성한 구조체가 immutable 상수의 타입으로 사용되었습니다.

- let으로 선언한 불변 인스턴스는 값을 변경시킬 수 없습니다. 

let immutable: Sample = Sample()
immutable.immutableProperty = 200

 

타입 프로퍼티

- 타입 프로퍼티는 Sample이라는 구조체 타입 자체가 사용할 수 있는 프로퍼티입니다.

Sample.typeProperty = 300
Sample.typeMethod()

구조체 예제 2

- name, species라는 변수와 타입 메서드, 인스턴스 메서드를 가진 Zoo 구조체를 만들었습니다.

- 1번 코드를 보시면, Zoo라는 구조체가 타입 자체적으로 타입 메서드를 구현하여 "동물원입니다."가 출력됩니다.

- 2번 코드를 보시면, 인스턴스를 만든 후, introduce 인스턴스 메서드를 구현하여

  "저는 \(self.species) 동물 \(name)입니다." 코드가 출력됩니다.

- 3번 코드를 보시면, 불변 인스턴스를 사용하여 메서드를 호출하여 Zoo에 입력된 코드를 출력했습니다.

struct Zoo {
    var name: String = "캥거루"
    var species: String = "포유류"

    static func introduce() {
        print("동물원입니다.")
    }
    
    func introduce() {
        print("저는 \(self.species) 동물 \(name)입니다.")
    }
}
// 1
Zoo.introduce()
// 2
var tiger: Zoo = Zoo()
tiger.name = "호랑이"
tiger.species = "고양이과"
tiger.introduce()
// 3
let kangaroo: Zoo = Zoo()
kangaroo.introduce()

실행결과
// 동물원입니다.
// 저는 고양이과 동물 호랑이입니다.
// 저는 포유류 동물 캥거루입니다.

내용출처

https://www.youtube.com/watch?v=0ZF5lhpEcC8&list=PLz8NH7YHUj_ZmlgcSETF51Z9GSSU6Uioy&index=13 

 

'iOS > Swift 문법 심화 학습' 카테고리의 다른 글

열거형 [ enum ]  (0) 2022.02.03
클래스 [ Class ]  (0) 2022.02.03
클로저 고급  (0) 2022.02.02
클로저  (0) 2022.02.01
값 타입과 참조 타입  (0) 2022.01.31

댓글