본문 바로가기

카테고리 없음

[Swift] 구조체 기본 개념

1. 구조체란?

 - 스위프트 대부분 타입은 구조체로 이루어져 있습니다

 - 구조체는 값(value)타입입니다!

 - 타입이름은 대문자 카멜케이스를 사용하여 정의합니다

 

 구조체 정의: "struct" 키워드를 사용해요!

 struc 이름 {

    코드구현부

 }

 

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

 struct Sample {

    //가변 프로퍼티(값 변경 가능)

    var mutableProperty: Int = 100

 

    //불변 프로퍼티(값 변경 불가)

    let immutableProperty: Int = 100

 

    //타입 프로퍼티(static 키워드 사용: 타입 자체가 사용하는 프로퍼티)

    static var typeProperty: Int = 100

 

    //인스턴스 메소드(인스턴스가 사용하는 메소드)

    func instanceMethod() {

        print("Instance method")

    }

 

    //타입 메소드(static 키워드 사용: 타입 자체가 사용하는 메소드)

    static func typeMethod() {

        print("type method")

    }

 }

 

// ! 구조체 사용

 

 //가변 인스턴스 생성

 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"

 

 //키워드도 `로 묶어주면 이름으로 사용할 수 있습니다 (option + ~)

 var `class`: String = "Swift"

 

 //타입 메서드

 static func selfIntroduce() {

    print("학생타입입니다")

 

 //인스턴스 메서드

 //self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항입니다

 func selfIntroduce() {

    print("저는 ₩(self.class)반 ₩(name)입니다")

 }

 }

 

 //타입 메서드 사용

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

 

 //가변 인스턴스 생성

 var jaeH: Student = Student()

 jaeH.name = "jaeH"

 jaeH.class = "스위프트"

 jaeH.selfIntroduce() //저는 스위프트반 jaeH입니다

 

 //불변 인스턴스 생성

 let jina: Student = Student()

 

 //불변 인스턴스이므로 프로퍼티 값 변경 불가

 //컴파일 오류 발생

 //jina.name = "jina"

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

 

 

! 저는 Swift를 배우며 기록하는 목적으로 블로그에 작성중이며 다른 사람에게 전달이나 강의를 위한 글은 아니기 때문에 틀린 내용이 있을 수 있습니다.

 

 

*야곰님의 강의 참고하였습니다.