본문 바로가기

앱 개발/IOS

[IOS 프로그래밍을 위한 스위프트 기초] 2단원 13. 구조체

2단원

13. 구조체

정의

Swift의 구조체는 타입을 정의하는 것이기 때문에 대문자 카멜케이스를 사용하여 정의한다.

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

var → 가변, let → 불변

static을 붙이면 struct Sample에서 사용할 수 있는 타입 프로퍼티가 된다.

 

가변 인스턴스

var mutable: Sample = Sample()

앞에 var를 붙였기 때문에 내부 프로퍼티를 변경할 수 있다.

mutable.mutableProperty = 200

다만, 프로퍼티 선언 시 불변으로 정의한 것은 변경할 수 없다.

mutable.immutableProperty = 100 // 오류발생

 

불변 인스턴스

let immutable: Sample = Sample()

주의할 점은, let으로 선언한 인스턴스에서는 아무리 프로퍼티가 var로 선언되었어도 변경할 수 없다.

immutable.mutableProperty = 200		// 오류발생
immutable.imutableProperty = 200	// 오류발생

 

타입 프로퍼티 및 메서드

Sample.typeProperty = 300
Sample.typeMethod() // Type method

위의 방식과는 다르게 타입의 하나로서 바로바로 사용할 수 있다.

다만, 주의해야할 점은 인스턴스에서 타입 프로퍼티를 접근하는 것은 허용되지 않는다.

mutable.typeProperty = 400 // 오류발생
mutable.typeMethod() // 오류발생

 

예시

Student 구조체를 만든다.

struct Student {
	var name: String = "unknown"
    var `class`: String = "Swift" // class는 원래 정의되어 있기 때문에 강세표를 넣어서 사용할 수 있도록 한다.
    
    static func selfIntroduce() {
    	print("학생타입입니다")
    }
    func selfIntroduce() {
		print("저는 \(self.class)반 \(name)입니다")
	}
}

타입 메소드

Student.selfIntroduce() // 학생타입입니다

인스턴스를 만든다음 selfIntroduce()를 실행하면

var fuyukawa: Student = Student()
fuyukawa.name = "fuyukawa"
fuyukawa.class = "스위프트"
fuyukawa.selfIntroduce() // 저는 스위프트반 fuyukawa입니다.

func selfIntroduce가 실행된다.

불변으로 정의하면

let jina: Student = Student()

이고 수정하려고 하면

jina.name = "jina"

오류가 발생한다.

그렇지만, 메소드는 실행할 수 있다.

jina.selfIntroduce() // 저는 Swift반 unknown입니다

 

 

 

 

 

©️NAVER Boostcourse. All Rights Reserved.