-
Struct, Class오늘의 Swift 상식 2021. 7. 18. 20:36728x90반응형
안녕하세요. iOS 개발자 에이든입니다!👦🏻
드디어! 본격적으로 Swift와 관련된 공부를 할 차례입니다!
프로그램 언어에는 많은 타입들이 있죠. String, Int, Bool,... 등등
이번 시간에는 프로그램을 만들 때 없으면 안 되는 Struct, Class에 대해 알아보겠습니다.
타입은 언어별로 다르기 때문에 Swift에서의 Struct, Class를 설명드리겠습니다.
자 그럼 바로 들어가~봅시다!!
하핳라할라하하
Struct, Class는 쉽게 말해 데이터를 알맞게 묶어 커스텀한 데이터 타입이라고 보시면 됩니다!
둘 다 데이터를 구조화해서 관리를 편리하게 하기 위한 용도로 사용되죠!
이번 시간에는 Struct, Class의 큰 특징, 공통점, 차이점 위주로 설명드릴 거라
많은 부분 예전 블로그 글을 참조하는 점 양해 부탁드립니당ㅎㅎ
간만에 이전 글들을 링크 올리며 보니 어우 민망하네요ㅋㅋㅋㅋㅋㅋ
자 그럼 공통점부터 살펴볼까요?
공통점
- 여러 변수를 담을 수 있는 컨테이너
- 데이터를 용도에 맞게 묶어 표현하고자 할 때 용이해요.
- 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가집니다.
- 하나의 새로운 사용자 정의 데이터 타입을 만들어 준다고 보시면 됩니다.
- 초기화를 정의하여 초기 상태를 설정할 수 있어요.
- 확장(extension)하여 프로퍼티나 메소드를 추가할 수 있습니다.
- 프로토콜 사용이 가능합니다.
- 서브 스크립트(subscript) 사용이 가능합니다.
- 참조: 오늘의 Swift 상식 (Subscript)
https://medium.com/@jgj455/오늘의-swift-상식-subscript-2288551588f9
오늘의 Swift 상식 (Subscript)
서브스크립트란?
medium.com
- “.”을 이용해 하위의 프로퍼티에 접근 가능합니다.
차이점
- Struct는 값 타입, Class는 참조 타입
- Struct는 상속할 수 없습니다.
- 타입 캐스팅은 Class의 인스턴스에만 허용됩니다. (상위 또는 하위 클래스 타입으로 형 변환 가능)
- Deinitializers(초기화 해제)는 Class의 인스턴스에만 활용할 수 있습니다.
- 참조 횟수 계산은 Class의 인스턴스에만 적용됩니다.
Struct
- 형태
struct 이름 { 프로퍼티나 메소드들 }
- Initialization(초기화)
- 참조: 오늘의 Swift 상식(초기화, 값 타입의 Initializer)
https://aiden-ios.tistory.com/8
Initializer 1편 (Struct의 Initializer)
안녕하세요. iOS 개발자 에이든입니다!👦🏻 이번 시간은 Initializer에 대해 알아보겠습니다! 처음 객체를 생성할 때 쓰이는 아주 중요한 녀석이죠! 지난 시간에 Struct, Class에 대해서 알아보셨죠?
aiden-ios.tistory.com
- 인스턴스 생성
let structInstance = StructName()
Class
- 형태
class 이름 { 프로퍼티와 메소드들 }
- Initialization(초기화)
- 참조: 오늘의 Swift 상식(Initializer 2편, 클래스의 Initializer)
https://aiden-ios.tistory.com/9
Initializer 2편 (Class의 Initializer)
안녕하세요. iOS 개발자 에이든입니다!👦🏻 지난 시간 값 타입의 Initializer에 대해서 알아보았죠? 이어서 바로 Class의 Initializer에 대해 알아보도록 하겠습니다! 빠르게 들어가 봅시다~ Class의 Initi
aiden-ios.tistory.com
- 인스턴스 생성
let classInstance = ClassName()
- 클래스의 상속
- 참조: 오늘의 Swift 상식(클래스의 상속)
https://aiden-ios.tistory.com/11
Class의 상속
안녕하세요. iOS 개발자 에이든입니다!👦🏻 오늘은 Class의 상속에 대해서 알아볼게요! 상속이라는 개념은 다른 언어들에서도 많이 있는 개념인데요 과연 Swift에서는 어떨지 같이 알아보도록 합
aiden-ios.tistory.com
Class는 Struct와 다르게 참조 타입이죠! 이 부분에 대해 조금 더 자세히 설명드릴게요!
참조 타입
값 타입과 달리 값이 복사되는 것이 아니라 메모리를 참조합니다.
let referenceExample = ReferenceClass() referenceExample.number = 27 let result = referenceExample result.number = 32 print(referenceExample.number) // 32
위의 코드에서 referenceExample의 number 프로퍼티에 27이라는 상수를 선언해주었습니다.
그리고 result 역시 상수로 선언해서 referenceExample을 대입시켜주었구요!
이때 result는 값을 복사한 게 아니라 referenceExample이 가리키고 있는 메모리 주소를 참조한 것입니다.
그래서 상수로 선언했어도 값이 바뀌는 이유가 result 자체를 변경한 것이 아닌 result가 바라보는 값을 변경한 것이기 referenceExample의 number도 바뀌게 된 거죠.
자 Struct와 Class의 공통점과 차이점을 간단하게 살펴봤습니다. 그럼 어느 것을 어떨 때 사용하는 것이 좋을까요?
Apple에서는 다음 조건 중 하나 이상에 해당한다면 Struct를 사용하는 것을 권장합니다.
1. 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
2. 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
3. Struct에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
4. 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
오늘은 Struct와 Class에 대해서 간단히 살펴봤습니다!
Apple에서는 정말 Class를 써야 하는 게 아니면 되도록 Struct를 사용하라고 권장하고 있습니다.
아무래도 Class는 메모리를 참조하다 보니 강한 순환 참조와 같은 메모리 관련 문제가 발생할까 봐 그런 것 같아요!
오늘은 여기까지~
혹시라도 부족하거나 잘못된 부분 그리고 질문 있으시면 언제든 댓글 부탁드려요! 감사합니다!👦🏻👋🏻
728x90반응형'오늘의 Swift 상식' 카테고리의 다른 글
Protocol 1편 (Protocol 정의 방법) (0) 2021.08.16 Class의 상속 (0) 2021.08.15 Initializer 2편 (Class의 Initializer) (0) 2021.08.08 Initializer 1편 (Struct의 Initializer) (0) 2021.08.08 iOS 앱 생명주기 (3) 2021.07.14