구조체와 클래스
- 일반적으로는 추론하기 쉬운 구조체를 선호
- 제어할 수 없는 ID가 있는 엔터티에 대한 정보가 포함된 데이터를 모델링할 때 구조체를 사용
- Objective-C 상호 운용성이 필요할 때 클래스 사용
- 모델링 중인 데이터의 ID를 제어해야 하는 경우 클래스를 사용
공통점
- 값을 저장하는 프로퍼티 정의
- 기능 제공을 위한 메서드 정의
- 서브 스크립트 구문을 사용하여 값에 접근을 제공하는 서브 스크립트 정의
- 초기화 상태를 설정하기 위한 초기화 정의
- 기본 구현을 넘어 기능적 확장을 위한 확장
- 특정 종류의 표준 기능을 제공하는 프로토콜 준수
클래스만 가지는 추가적인 기능
- 상속
- 타입 캐스팅
- Deinitialization(초기화 해제)
- 자동 참조 카운팅
정의 구문
- 타입명 UpperCamelCase 사용
- 프로퍼티와 메서드는 lowerCamelCase 사용
struct SomeStructure {
}
class SomeClass {
}
인스턴스 생성
let someStructure = SomeStructure()
let someClass = SomeClass()
- 클래스 또는 구조체 타입 이름 뒤에 빈 소괄호를 붙여 사용하면 모든 프로퍼티가 기본값으로 초기화되는 인스턴스 생성
프로퍼티 접근
- 점 구문 (dot syntax) 을 사용하여 인스턴스의 프로퍼티에 접근할 수 있다.
someStructure.someValue
구조체와 열거형은 값 타입
- 값 타입 (value type) 은 변수 또는 상수에 할당될 때나 함수에 전달될 때 복사 되는 값인 타입
struct Person {
let name: String
}
let min = Person(name= "min")
var min2 = min
클래스는 참조 타입
- 참조 타입 (reference types) 은 변수 또는 상수에 할당될 때나 함수로 전달될 복사본 대신에 존재하는 같은 인스턴스에 대한 참조가 사용됩니다.
class Person {
let name: String
init(name: String) {
self.name = name
}
}
let min = Person(name= "min")
var min2 = min
식별 연산자 (Identity Operators)
- 2개의 상수 또는 변수가 클래스의 같은 인스턴스를 참조하는지 확인가능
- 동일 인스턴스 (Identical to) (===)
- 동일하지 않은 인스턴스 (Not identical to) (!==)
if min === min2 {
print("동일한 인스턴스 참조")
}