[다양한 표현 및 확장] 1. 구조체

Seoyoung Lee·2022년 2월 24일
0


2021년 11월 17일에 공부한 내용입니다.

1. 구조체

  • 스위프트에서는 대부분의 타입이 구조체로 이루어져 있다.
    • 구조체가 굉장히 중요한 역할을 한다!
  • 스위프트의 구조체는 타입을 정의하는 것이기 때문에 카멜케이스를 사용하여 정의한다.
struct 이름 {
    /* 구현부 */
}

2. 구조체 문법

  • 구조체는 struct 키워들르 사용하여 정의한다.
// 프로퍼티 및 메소드
struct Sample {
    // 인스턴스 프로퍼티
    var mutableProperty: Int = 100 // 가변 프로퍼티
    let immutableProperty: Int = 100 // 불변 프로퍼티

    static var typeProperty: Int = 100 // 타입 프로퍼티, Sample 구조체 안에서 사용 가능

    // 인스턴스 메서드
    func instanceMethod() {
        print("instance method")
    }

    // 타입 메서드
    static func typeMethod() {
        print("type method")
    }
}
  • 프로퍼티: 구조체 안에 들어가는 인스턴스 변수
  • 메서드: 구조체 안에 들어있는 함수
  • static 키워드를 사용하면 타입 자체가 사용하는 프로퍼티 또는 메서드가 된다.

구조체 사용

// 가변 인스턴스
var mutable: Sample = Sample()

// 가변 인스턴스는 내부 프로퍼티의 값을 변경할 수 있다.
mutable.mutableProperty = 200
mutable.immutableProperty = 200 // 단, 불변 프로퍼티는 값 변경 불가능

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

// 가변 프로퍼티의 값도 변경할 수 없다.
immutable.mutableProperty = 200
immutable.immutableProperty = 200

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


// 인스턴스 내에서 타입 프로퍼티 및 메서드 사용 불가능
mutable.typeProperty = 400
mutable.typeMethod()

// 타입 프로퍼티 및 메서드 사용 예시
struct Student {
    var name: String = "unknown"
    var `class`: String = "Swift" // class는 스위프트 내에서 사용되는 키워드이기 때문에 ``를 붙임

    static func selfIntroduce() {
        print("학생타입입니다")
    }

    func selfIntroduce() {
        print("저는 \(self.class)반 \(name)입니다")
    }
}

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

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

let beomgyu: Student = Student()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// 컴파일 오류 발생
beomgyu.name = "beomgyu"
beomgyu.selfIntroduce() // 저는 Swift반 unknown입니다
profile
나의 내일은 파래 🐳

0개의 댓글