ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (Swift) 구조체 정리
    Programing Language/Swift 2019. 10. 10. 14:09
    728x90
    반응형

    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
    반응형
Designed by Tistory.