저장 프로퍼티
- 구조체 -struct S_Point {
var x : Int
var y : Int
}
// 구조체는 기본적으로 저장 프로퍼티를 매개변수로 갖는 이니셜라이저가 있습니다.
let testPoint = S_Point(x: 10, y: 10)
- 클래스 -
class Position{
var point : S_Point // << stored property 'point' without initial value prevents synthesized initializers 컴파일 에러 발생
let name : String // << stored property 'name' without initial value prevents synthesized initializers 컴파일 에러 발생
// 프로퍼티 기본값이 지정되어 있지 않다면 이니셜라이저를 따로 정의해주어야 합니다. 정의하지 않으면 위 컴파일 에러 발생
init(name : String, currentPoint : S_Point) {
self.name = name
self.point = currentPoint
}
// 이니셜라이저 정의 후 컴파일 에러 사라짐
}
// 이니셜라이저를 호출함으로써 초기값을 할당해야 인스턴스가 생성됩니다.
let testPoint2 = Position(name: "tester", currentPoint: testPoint)
구조체는 프로퍼티에 맞는 이니셜라이저를 자동으로 제공하지만 클래스는 그렇지 않습니다. 하지만 클래스의 저장 프로퍼티의 초기값을 지정해주면 따로 이니셜라이저를 구현하지 않아도 됩니다.
class CustomPosition {
var name : String = "tester" // << 초기값을 지정했기 때문에 이니셜라이저 없어도 컴파일 에러 발생 안함
var age : Int? // 인스턴스 생성 시 프로퍼티에 값이 필요 없다면 프로퍼티를 옵셔널로 선언가능
}
let customName : CustomPosition = CustomPosition()
print(customName.name) // "tester" 출력
print(customName.age) // "nil" 출력
// 옵셔널 프로퍼티의 값을 알게 되었을때 할당
customName.age = 10
print(customName.age) // "Optional(10)"
print(customName.age!) // 옵셔널 벗기기 "10"
var name : String = "tester" // << 초기값을 지정했기 때문에 이니셜라이저 없어도 컴파일 에러 발생 안함
var age : Int? // 인스턴스 생성 시 프로퍼티에 값이 필요 없다면 프로퍼티를 옵셔널로 선언가능
}
let customName : CustomPosition = CustomPosition()
print(customName.name) // "tester" 출력
print(customName.age) // "nil" 출력
// 옵셔널 프로퍼티의 값을 알게 되었을때 할당
customName.age = 10
print(customName.age) // "Optional(10)"
print(customName.age!) // 옵셔널 벗기기 "10"
댓글 없음:
댓글 쓰기