-
(Swift) 구조체 정리Programing Language/Swift 2019. 10. 10. 14:09728x90반응형
1. 구조체란?
- 스위프트 대부분 타입은 구조체로 이루어져 있습니다.
- 구조체는 값(value) 타입입니다.
- 타입이름은 대문자 카멜케이스를 사용하여 정의합니다.
2. 구조체 문법
- 구조체 정의 : "struct" 키워드 사용
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 imutableProperty : int =200 // 불변 인스턴스 let immutable: Sample = Sample() // 불변 인스턴스는 아무리 가변 프로퍼티라도 // 인스턴스 생성 후에 수정할 수 없습니다 // 컴파일 오류 발생 //immutable.mutableProperty = 200 <- var mutableProperty : int = 200 //immutable.immutableProperty = 200 <- let imutableProperty : int =200 // 타입 프로퍼티 및 메서드 Sample.typeProperty = 300 Sample.typeMethod() // type method // 인스턴스에서는 타입 프로퍼티나 타입 메서드를 // 사용할 수 없습니다 // 컴파일 오류 발생 //mutable.typeProperty = 400 //mutable.typeMethod()
자바에서 ABC abc = new Abc(); 와 같이 var 변수명 : 구조체명 = 구조체명() 으로 선언한다.
var로 구조체를 선언했을 때 구조체 내에서 var로 선언한 변수나 func 은 사용 가능하나
let 변수명 : 구조체명 = 구조체명() 으로 선언한 경우.
구조체 내에서 let 으로 선언한 상수나 static func 와 같은 불면하는 값을 가지는 상수, 메서드만 사용가능하다.
3. 학생 구조체 만들어보기
struct Student { // 가변 프로퍼티 var name: String = "unknown" // 키워드도 `로 묶어주면 이름으로 사용할 수 있습니다 var `class`: String = "Swift" // 타입 메서드 static func selfIntroduce() { print("학생타입입니다") } // 인스턴스 메서드 // self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항입니다 func selfIntroduce() { print("저는 \(self.class)반 \(name)입니다") } } // 타입 메서드 사용 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입니다
728x90반응형'Programing Language > Swift' 카테고리의 다른 글
(Swift) lazy 변수형 사용 방법 (0) 2019.10.25 (Swift) 클래스,구조체/ 열거형 차이 (0) 2019.10.15 (Swift) 옵셔녈[Optional] 정리 2/2 (0) 2019.10.10 (Swift) 옵셔녈[Optional] 정리 1/2 (0) 2019.10.10 (Swift) 반복문 (0) 2019.10.10