티스토리 뷰
안녕하세요! Swallow입니다!
이번 포스팅은
⭐️ 클래스와 구조체의 특징과 차이점 ⭐️
두 번째 이야기!
관한 글입니다!
항상 어떠한 조언, 충고 환영입니다!
시작하기에 앞서 이 글은
앨런 Swift 문법 마스터 스쿨 강의와 야곰님의 스위프트 프로그래밍 책을
공부하고 참고하여 작성하였습니다!
그럼 시작하겠습니다!
지난 포스팅에 이어서
클래스와 구조체에 대해서 이야기를 해보겠습니다!
일반적인 let과 var는 데이터의 변경이 가능하냐의 차이인데
클래스와 구조체에서
let, var는
위와 같은 의미도 있으면서
다른 예시(?)가 존재합니다!
바로 보여드릴게요!

Person클래스와 Chicken구조체를 만들고,
상수man과 상수favorite에
인스턴스를 생성했습니다!
오호..
보통 많이 보던 예시에서는
var로 선언을 해서 인스턴스를 생성을 하던데
이번 예시에서는 let으로 선언을 했네요?
바로!!!!
말씀드리고 싶은 주제가 이 부분입니다!
인스턴스 생성 시 let으로 선언을 한다면
무슨 일이 일어날까요? 🧐
이 부분의 차이점을 이야기해볼게요!

위의 사진을 하나씩 설명드릴게요!
man은 클래스의 인스턴스를 생성을 했습니다!
그리고 밑에서 man.name에 접근을 하여 값을 변경해 주었습니다!
어랏?
let으로 선언을 했는데
값의 변경이 가능하네요...?
내가 여태까지 잘못 배운 건가...? 😱
라고 생각하실 수 있어요!
설명을 해드리자면
클래스의 경우 let으로 선언을 하고
인스턴스를 생성을 하면
메모리 주소를 바꿀 수 없다는 의미입니다!
즉, 다른 인스턴스를 가리킬 수 없다는 내용이고,
쉽게 말씀드리면 let이 메모리 주소에 적용이 되어서
다른 메모리 주소를 가리키지 못한다!
라고 생각하시면 됩니다!
그리고
클래스 내부의 저장 속성의 경우
let으로 선언을 하고 인스턴스를 생성했다고 해도
저장 속성은 클래스 내부에 선언한
var / let에 따라서 달라집니다!
무슨 말이냐면
클래스 내부에서
저장 속성을 var로 선언을 하면
위의 예시처럼 let으로 선언하고 인스턴스를 생성했다고 하더라도
메모리 주소에만 영향이 미치니,
값의 변경이 가능하다!라는 말입니다!
그리고 클래스 내부에서
저장속성을 let으로 선언을 하면
알고 계시는 let처럼 값의 변경이 불가능하게 됩니다!
다시 예시를 보여드리면서
구조체에 관한 설명도 드리겠습니다!

구조체의 경우에는
빨간 줄로 뜨면서 값의 변경이 불가능하다고 하네요??
설명을 드리면
구조체의 경우에는
let으로 선언 후 인스턴스를 생성을 하면
구조체 내부의 저장속성 자체가
상수로 선언이 됩니다!
클래스와 다르게
구조체 내부에서 저장속성을
var로 선언을 했다고 하더라도
인스턴스 생성 시에 let으로 선언을 하면
저장속성 자체가 let으로 바뀐다는 의미입니다!
그 이유가
클래스는 참조할 인스턴스가 힙에 저장이 되고
생성된 인스턴스의 주소를 스택에 저장하기 때문에
let선언 후 인스턴스를 생성을 하면
메모리 주소에 영향을 받지만
구조체는 바로 스택에 저장이 되니
let으로 선언을 하고 인스턴스를 생성을 하면
저장속성 자체가 영향을 받는 것입니다!
그리고
한 가지 더 말씀을 드리자면
클래스와 구조체가 동작을 할 때
어느 것이 더 빠르게 동작할까요??
그것은 바로
구조체입니다!
클래스의 경우에는
힙 영역에 데이터가 저장이 된다고 말씀을 드렸습니다!
데이터가 저장이 될 때
⭐️ 힙 영역에서 빈 공간을 스캔을 한 뒤 ⭐️
데이터를 저장합니다!
구조체의 경우에는
데이터를 스택 영역에 저장을 합니다!
데이터를 바로 스택에 저장을 하고
해당 스코프가 종료가 되면 메모리에서 자동 제거가 됩니다!
이러한 특징을 보면
구조체가 클래스보다
더 빠른 동작을 하고 있습니다! 😁
이외에도 상속에 관한 차이
생성자의 차이 등등
많은 차이점이 존재하지만,
자세한 내용은
나중에 그 내용을 다룰 때,
포스팅하도록 하겠습니다!
오늘 준비한 내용은 여기까지 입니다!
다음에 배울 내용은
제가 자주 언급한
⭐️ 속성과 메서드 ⭐️
관한 이야기입니다!
감사합니다!
피드백 언제나 환영입니다!
'Swift' 카테고리의 다른 글
| 속성(프로퍼티) 정복하기 - 2장 (0) | 2022.07.01 |
|---|---|
| 속성(프로퍼티) 정복하기 - 1장 (0) | 2022.06.24 |
| 클래스(Class)와 구조체(Struct)의 특징과 차이점 정복하기 - 1장 (0) | 2022.06.23 |
| 열거형(Enumeration) 정복하기 - 4장 (0) | 2022.06.02 |
| 열거형(Enumeration) 정복하기 - 3장 (0) | 2022.06.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- 옵셔널
- Swift enum
- optional unwrapped
- 열거형
- 옵셔널 패턴
- 연관값
- enum
- 저장 타입 속성
- 옵셔널 추출
- Property Observers
- 클래스 구조체 차이
- 속성 감시자
- Type Methods
- 옵셔널 바인딩
- optional unwrapping
- Instance Methods
- 프로퍼티 옵저버
- Optional pattern
- 서브스크립트
- 스위프트
- Swift Methods
- 원시값
- SWiFT
- 열거형 case 패턴
- swift struct
- optional
- 스위프트 메서드
- 저장 타입 프로퍼티
- swift class
- Swift Instance