본문 바로가기
Swift/기본

구조체 (Struct)

by 밤새는탐험가 2024. 4. 1.

정의 문법

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

구조체는 값 타입이다.

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

 

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

 

 

프로퍼티 및 메서드 구현

프로퍼티는 변수의 다른 이름을 말한다. 

 

클래스, 구조체, 열거형 등 전체적으로 사용되는 변수를 프로퍼티라고 부른다. 

프로퍼티에는 저장, 연산, 타입 프로퍼티가 있다. 

 

메서드는 함수와 같은 의미인데, 구조체, 클래스 내에서 쓸 때 메서드라고 한다. 

 

struct Sample {
	// 가변 프로퍼티
    var mutableProperty: Int = 100 
    
    // 불변 프로퍼티
    let immutableProperty: Int = 100 
    
    // 타입 프로퍼티
    static var typeProperty: Int = 100 
    
    // 인스턴스 메서드
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드
    static func typeMethod() {
        print("type method")
    }
}

 

 

 

구조체 사용

var mutable: Sample = Sample()
mutable.mutableProperty = 200
print(mutable)   // Sample(mutableProperty: 200, immutableProperty: 100)

/*
 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없다.
 컴파일 오류 발생한다.
 */

/*
mutable.immutableProperty = 200
error: cannot assign to property: 'immutableProperty' is a 'let' constant
 */

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

/*
 불변 인스턴스로 생성할 경우 가변 프로퍼티라도
 인스턴스 생성 후, 수정할 수 없다.
 
 immutable.mutableProperty = 300
 immutable.immutableProperty = 1000
 // error
 */


// 타입 프로퍼티 및 메서드
Sample.typeProperty = 400
print(Sample.typeProperty)   // 400

Sample.typeMethod()   // type method

/*
 인스턴스에서는 타입 프로퍼티나 타입 메서드를 사용할 수 없다.
 */

 

 

 

과일 구조체 만들기 

struct FruitInfo {
    
    // 가변 프로퍼티
    var name: String = "No Selected"
    
    // 가변 프로퍼티
    var price: Int = 0
    
    // 타입 메서드
    static func selfIntroduce() {
        print("과일 타입입니다.")
    }
    
    /*
     인스턴스 메서드
     self는 인스턴스 자신을 지칭,
     사용은 선택사항
     */
    func selfIntroduce() {
        print("과일 이름: \(self.name), 과일 가격: \(self.price)")
    }
}

// 타입 메서드 사용
FruitInfo.selfIntroduce()   // 과일 타입입니다.


// 가변 인스턴스 생성
var apple: FruitInfo = FruitInfo()
apple.name = "사과"
apple.price = 1500
apple.selfIntroduce()   // 과일 이름: 사과, 과일 가격: 1500


var banana: FruitInfo = FruitInfo(name: "바나나", price: 2500)
banana.selfIntroduce()  // 과일 이름: 바나나, 과일 가격: 2500


// 불변 인스턴스 생성
let kiwi: FruitInfo = FruitInfo()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// kiwi.name = "키위"
// error: cannot assign to property: 'kiwi' is a 'let' constant

kiwi.selfIntroduce()
// 과일 이름: No Selected, 과일 가격: 0

 

 

'Swift > 기본' 카테고리의 다른 글

열거형  (0) 2024.04.02
클래스 (Class)  (0) 2024.04.01
옵셔널  (0) 2024.03.29
반복문  (0) 2024.03.26
조건문  (0) 2024.03.26