Swift 구조체

Steve Jack·2021년 7월 25일
0

Swift 문법(야곰)

목록 보기
6/9
post-thumbnail

야곰님의 강의 자료

구조체란?

스위프트 대부분 타입은 구조체로 이루어져 있을 정도로 중요합니다.
구조체는 값(value) 타입을 정의합니다.
타입이름은 대문자 카멜케이스를 사용하여 정의합니다.

struct 이름 {
	/* 구현부 */
}

구조체 프로퍼티 및 메서드 구현

struct Sample { 
    // 가변 프로퍼티(값 변경 가능)
    var mutableProperty: Int = 100 
    
    // 불변 프로퍼티(값 변경 불가능)
    let immutableProperty: Int = 100 
    
    // 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티)
    // 구조체 Sample 에서 사용할 수 있는 타입 프로퍼티
    static var typeProperty: Int = 100 
    
    // 인스턴스 메서드 :구조체 안에 들어가 있는 함수(인스턴스가 사용하는 메서드)
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드(static 키워드 사용 : 타입 자체가 사용하는 메서드)
    static func typeMethod() {
        print("type method")
    }
}

Instance(인스턴스) : 구조체나 클래스는 일종의 설계도입니다. 구조체나 클래스에서 생성된 객체가 인스턴스이며, 설계도를 구체적인 제품으로 만들어야 합니다. 제품이 바로 인스턴스라고 생각하면 됩니다.
Property(프로퍼티) : 구조체나 클래스 안의 상수와 변수들의 속성을 프로퍼티라고 합니다.
Struct(구조체) : 구조체는 연관되어 있는 변수와 메소드의 집합입니다.
Method(메소드) : Swift에서의 메소드란 특정 타입의 클래스, 구조체, 열거형과 관련된 함수를 지칭합니다.


구조체 사용

// 가변 인스턴스 생성(var)
// 구조체가 Sample이라는 타입이 된거임
var mutable: Sample = Sample()

mutable.mutableProperty = 200

// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없습니다
// 컴파일 오류 발생
mutable.immutableProperty = 200 

// 불변 인스턴스(let)
let immutable: Sample = Sample()

// 불변 인스턴스는 아무리 가변 프로퍼티라도
// 인스턴스 생성 후에 수정할 수 없습니다
// 컴파일 오류 발생
immutable.mutableProperty = 200
immutable.immutableProperty = 200


// 타입 프로퍼티 및 메서드
// 타입 프로퍼티 : Sample 구조체 자체가 사용할수 있는 프로퍼티 
Sample.typeProperty = 300

// 구조체 자체가 사용할수 있는 메소드
Sample.typeMethod() // type method

// 인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할 수 없습니다
// 컴파일 오류 발생
mutable.typeProperty = 400
mutable.typeMethod()

Student 구조체 생성

struct Student {
    // 가변 프로퍼티
    var name: String = "unknown" 

    // 키워드도 ''로 묶어주면 이름으로 사용할 수 있습니다
    var `class`: String = "Swift"
    
    // 타입 메서드
    static func selfIntroduce() {
        print("학생타입입니다")
    }
    
    // 인스턴스 메서드
    // self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항입니다
    func selfIntroduce() {
        print("저는 \(self.class)\(name)입니다")
    }
}

가변 프로퍼티 name의 초기값은 "unknown" 이며 'class'의 초기값은 "Swift"입니다.

Student 구조체 사용

// 타입 메서드 사용
Student.selfIntroduce() // 학생타입입니다

// 가변 인스턴스 생성
var yagom: Student = Student()
yagom.name = "yagom"
yagom.class = "스위프트"
yagom.selfIntroduce()   // 저는 스위프트반 yagom입니다

// 불변 인스턴스 생성
let jina: Student = Student()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// 컴파일 오류 발생
jina.name = "jina"

jina.selfIntroduce() // 저는 Swift반 unknown입니다
profile
To put up a flag.

0개의 댓글