Language/Swift

[Swift] Class, Struct, Enum

jaewpark 2022. 12. 19. 21:34

좀 더 명확하게 이해하고 제대로 쓰기 위해서 공부

 

Class

전통적인 OOP 관점에서의 클래스

단일상속

(인스턴스/타입) 메서드

(인스턴스/타입) 프로퍼티

참조 타입

Apple 프레임워크 대부분의 큰 뼈대는 모두 클래스로 구성

 

Struct

상속 불가

(인스턴스/타입) 메서드

(인스턴스/타입) 프로퍼티

값 타입

Swift 대부분의 큰 뼈대는 모두 구조체로 구성

 

Enum

다른 언어의 열거형과는 많이 다른 존재

상속 불가

(인스턴스/타입) 메서드

(인스턴스/타입) 연산 프로퍼티

값 타입


구조체의 사용은 ❓

하나의 데이터타입으로 표현할 때

참조가 아닌 복사를 원할 때

자신이 다른 타입을 상속받을 필요가 없을 때

 

Value Type

데이터를 전달할 때 값을 복사하여 전달

 

Reference Type

데이터를 전달할 때 값의 메모리 위치를 전달

 


다양한 Initialization

 

struct Fahrenheit {
    var temperature: Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrenheit()
print("The default temperature is \(f.temperature)° Fahrenheit")
// Prints "The default temperature is 32.0° Fahrenheit"

/* 위 코드와 동일하게 사용가능
struct Fahrenheit {
    var temperature = 32.0
}
*/

 

struct Color {
    let red, green, blue: Double
    init(red: Double, green: Double, blue: Double) {
        self.red   = red
        self.green = green
        self.blue  = blue
    }
    init(white: Double) {
        red   = white
        green = white
        blue  = white
    }
}

let magenta = Color(red: 1.0, green: 0.0, blue: 1.0)
let halfGray = Color(white: 0.5)

 

class SurveyQuestion {
    let text: String
    var response: String?
    init(text: String) {
        self.text = text
    }
    func ask() {
        print(text)
    }
}
let beetsQuestion = SurveyQuestion(text: "How about beets?")
beetsQuestion.ask()
// Prints "How about beets?"
beetsQuestion.response = "I also like beets. (But not with cheese.)"
For class instances, a constant property can be modified during initialization only by the class that introduces it. It can’t be modified by a subclass.
클래스 인스턴스의 경우, 상수 프로퍼티는 초기화 중에 수정할 수 있습니다.

 

struct Size {
    var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)
기본 값이 있는 속성의 값을 생략할 수 있습니다.

 

상속과 관련된 초기화는 추가할 예정

 

참고 사이트 : 링크