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 |
Tags
- 캐시
- 부트캠프
- 폴링
- 멀티프로세스
- Swift
- 스풀
- kernel
- 하버드구조
- 코딩
- 앱개발
- 폰노이만구조
- 마이크로 커널
- 커널
- closure
- 폰노이만
- API
- Components
- 프로세스
- 버퍼
- 계층형 구조 커널
- 멀티스레드
- 단일형 구조 커널
- sdk
- 인터럽트
- IODevice
- 야곰아카데미
- 컴퓨터구조
- 운영체제
- bus
- 스레드
Archives
- Today
- Total
생각, 고민, 문제해결의 기록
[iOS/Swift] 구조체(Struct)와 클래스(Class) 본문
해당 내용은 공부한 내용을 바탕으로 작성하였기에 수시로 업데이트됩니다.
피드백과 태클은 언제나 환영입니다.
구조체 vs 클래스
새로운 데이터 구조를 정의할 때 구조체냐 클래스냐로 고민이 될 때가 있을것이다.
오늘은 구조체와 클래스의 차이및 특징과 어느 상황에서 무엇을 사용해야 좋을지 알아보도록 하자😎
공통점
- 값을 저장할 프로퍼티를 선언할 수 있다.
- 함수 기능을 하는 메서드를 선언할 수 있다.
- 내부 값에 .(점)을 사용하여 접근할 수 있다.
- 생성자를 사용해 초기 상태를 설정할 수 있다.
- extension을 사용하여 기능을 확장할 수 있다.
- Protocol을 채택하여 기능을 설정할 수 있다.
구조체와 클래스의 차이점
구조체(Struct)
- 값 타입이다. (값이 복사되서 전달됨)
- 열거형도 값 타입이다.
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 생성된다.
즉, 하나의 구조체를 여러 변수에 할당한 뒤에 값을 변경하더라도, 새로이 생성된 변수들의 값은 변하지 않는다.
클래스(Class)
- 참조 타입이다. (참조: 값을 갖고 있는 메모리를 바라보고 있다는 뜻)
- ARC로 메모리를 관리한다.
- 클래스의 변수를 여러 변수에 할당한 뒤 값을 변경하면 할당된 모든 변수의 값이 바뀐다.
- 클래스에서만 가능한 기능
- 상속 (Inheritance) : 클래스의 여러 속성을 다른 클래스에 물려 줌
- 타입 캐스팅 (Type casting) : 런타임에 클래스 인스턴스의 타입을 확인
- 소멸자 (Deinitializers) : 할당된 자원을 해제(free up) 시킴
- 참조카운트 (Reference counting) : 클래스 인스턴스에 하나 이상의 참조가 가능
클래스를 쓸까 구조체를 쓸까
일반적으로 다음의 조건 중 1개 이상을 만족하면 구조체를 사용하는 것을 고려해 볼 수 있다.
해당조건이 없으면 클래스를 사용하면 된다.
- 구조체의 주 목적이 관계된 간단한 값을 캡슐화하기 위한 것인 경우
- 구조체의 인스턴스가 참조되기보다 복사되기를 기대하는 경우
- 구조체에 의해 저장된 어떠한 프로퍼티가 참조되기보다 복사되기는 기대하는 경우
- 구조체가 프로퍼티나 메소드 등을 상속할 필요가 없는 경우
'iOS > Swift' 카테고리의 다른 글
[iOS/Swift] 연산자(Operators) (0) | 2022.10.24 |
---|---|
[iOS/Swift] 컬렉션 타입(Collection Type) (0) | 2022.10.20 |
[iOS/Swift] 클로저(Closures) (0) | 2022.10.11 |