728x90
반응형
01. 클래스 vs 구조체 vs 열거형
클래스 (Class)
- 전통적인 OOP 관점에서의 클래스
- 단일 상속
- 메서드/프로퍼티
- 참조 타입
- Apple 프레임워크의 큰 뼈대는 모두 클래스로 구성
구조체 (Struct)
- C 언어 등의 구조체보다 다양한 기능
- 상속 불가 → 자신을 상속할 필요가 없거나, 상속받을 필요가 없을 때 사용!
- 메서드/프로퍼티
- 값 타입 → 참조가 아닌 복사!
- Swift의 대부분 큰 뼈대는 모두 구조체로 구성
열거헝 (Enum, Enumeration)
- 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의
→ 열거형 자체가 하나의 데이터 타입! case 하나하나 전부 하나의 유의미한 값으로 취급 - 다른 언어의 열거형과는 많이 다른 존재
- 상속 불가
- 메서드/프로퍼티
- 값 타입
Class | Struct | Enum | |
Type | Reference | Value | Value |
Subclassing | O | X | X |
Extension | O | O | O |
02. Value vs Reference
- Value: 데이터를 전달할 때 값을 복사하여 전달
- Reference: 데이터를 전달할 때 값의 메모리 위치를 전달
truct ValueType {
var property = 1
}
class ReferenceType {
var property = 1
}
// 첫 번째 구조체 인스턴스
let firstStructInstance = ValueType()
// 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사
var secondStructInstance = firstStructInstance
// 두 번째 구조체 인스턴스 프로퍼티 값 수정
secondStructInstance.property = 2
// 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한
// 별도의 인스턴스이기 때문에
// 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도
// 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이 없음
print("first struct instance property : \(firstStructInstance.property)") // 1
print("second struct instance property : \(secondStructInstance.property)") // 2
// 클래스 인스턴스 생성 후 첫 번째 참조 생성
let firstClassReference = ReferenceType()
// 두 번째 참조 변수에 첫 번째 참조 할당
let secondClassReference = firstClassReference
secondClassReference.property = 2
// 두 번째 클래스 참조는 첫 번째 클래스 인스턴스를 참조하기 때문에
// 두 번째 참조를 통해 인스턴스의 프로퍼티 값을 변경하면
// 첫 번째 클래스 인스턴스의 프로퍼티 값을 변경하게 됨
print("first class reference property : \(firstClassReference.property)") // 2
print("second class reference property : \(secondClassReference.property)") // 2
본 내용은 부스트코스의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 토대로 작성되었습니다
728x90
반응형