반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리눅스
- 클라우드
- 데브옵스
- centOS7
- 부스트코스
- Swift
- 도커 명령어
- centOS
- boj
- kubernetes
- k8s
- 도커 컨테이너
- 컨테이너
- 운영체제
- 도커 이미지
- ios
- 쿠버네티스
- 프로세스
- swift 클로저
- AWS
- devops
- 네트워크
- linux
- 도커
- Python
- 인프라
- docker
- C++
- os
- NGINX
Archives
- Today
- Total
귀염둥이의 메모
[Swift] 구조체(struct) vs 클래스(class) 본문
반응형
구조체(struct)와 클래스(class)
공통점
- 값을 저장하기 위해 프로퍼티를 정의할 수 있다.
- 기능 수행을 위해 메서드를 정의할 수 있다.
- 서브스크립트 문법을 통해 구조체 또는 클래스가 가지는 값에 접근하도록 서브스크립트 정의 가능.
- 초기화될 때의 상태를 지정하기 위해 이니셜라이저 정의 가능.
- extension을 통해 확장 가능.
- 특정 protocol 준수 가능.
차이점
- 구조체(struct)
- 값 타입(Call by Value) : 데이터를 전달 할 때 값을 복사하여 전달.
- Stack memory 영역에 할당
- 상속 불가능
- 클래스(class)
- 참조 타입(Call by Reference) : 데이터를 전달 할 때 값의 메모리 위치를 전달.
- Heap memory 영역에 할당
- 상속 가능
struct 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
구조체와 클래스 선택해서 사용하기
구조체와 클래스는 새로운 데이터 타입을 정의하고 기능을 추가한다는 점에서는 같다. 하지만 구조체 인스턴스는 항상 값 타입, 클래스 인스턴스는 참조 타입이다.
생김새는 비슷하지만 용도는 다르다는 의미이다. 프로젝트의 성격에 따라, 데이터의 활용 용도에 따라, 특정 타입을 구현할 때 구조체와 클래스 둘 중 하나를 선택해서 사용해야한다.
Apple은 가이드라인에서 다음 조건 중 하나 이상에 해당된다면 구조체(struct) 사용을 권한다.
- 연관된 간단한 값의 집합을 캡슐화 하는 것만이 목적일 때
- 캡슐화된 값이 참조보다 복사되는 것이 합당할 때
- 구조체에 저장된 프로퍼티가 값 타입이며 참조보다 복사되는 것이 합당할 때
- 다른 타입으로부터 상속받거나 자신이 상속될 필요가 없을 때
<참고 자료>
BoostCourse - iOS 프로그래밍을 위한 스위프트 기초 : www.boostcourse.org/mo122/lecture/11274/
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] 클로저 (2) - Capturing Values, Escaping Closure, Auto Closure (0) | 2021.06.21 |
---|---|
[Swift] enum(열거형) 기초 (0) | 2021.05.17 |
[Swift] 클로저(Closure) (1) (0) | 2021.04.13 |
[Swift] 타입 캐스팅(Type Casting), 업 캐스팅(Up Casting), 다운 캐스팅(Down Casting) (0) | 2021.04.09 |
[Swift] Optional(옵셔널) (0) | 2021.02.17 |
Comments