안녕하세요 rOar입니다.👀
오늘은 클래스와 구조체에 대해 정리해 보려고 합니다.
처음 배울때 가장 헷갈리기도 했고, 생성자나 속성이 나오기 시작하면서
어려웠던것 같아요.. (지금도😱)
그럼 클래스와 구조체에 대해 먼저 알아보고, 어떤 차이점이 있는지 보도록 하겠습니다.
1. 구조체(Struct)란?
- 값 형식(Value Type)
- 상속 불가능
- 인스턴스 데이터는 모두 스택(Stack)에 저장
(복사시 값을 전달할때마다 복사본을 생성 : 다른 메모리 공간 생성)
- 스택(Stack)영역에 저장되며, 종료시 메모리에서 자동으로 제거

위와같이 Dog구조체를 생성하여 사용자가 원하는 변수(property, 속성)와 함수(method)를 선언합니다.

그리고 위와같이 Dog구조체를 이용하여 인스턴스를 생성해줄 수 있습니다.
인스턴스를 생성하게 되면 해당 인스턴스를 담은 변수를 통해서
Dog구조체의 property혹은 method에 접근이 가능합니다.
2. 클래스(Class)란?
- 참조형식(Reference Type)
- 상속 가능
- 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가르키는 변수는 스택(Stack)에 저장
(값을 전달하는 것이 아니고, 저장된 메모리 주소를 전달함)
- 힙(Heap)영역에 저장되며, ARC(Auto Reference Counting)시스템을 통해 메모리를 관리함
- 클래스의 인스턴스(instance)를 객체(object)라고 부름

마찬가지로 구조체와 같이 Dog클래스를 생성하였습니다.

마찬가지로 Dog클래스를 이용하여 인스턴스를 생성해주고,
해당 인스턴스를 담은 변수를 통해서 property혹은 method에 접근이 가능합니다.
여기까지 보셨으면 대체 뭐가 다른거지? 라고 생각하실 수 있습니다. (저도 그랬으니까요🥲)
그럼 위에 설명되어 있는 구조체와 클래스의 특징중 값형식과 참조형식이 어떻게 다른지
메모리 동작 방식의 차이점에 대해서 알아보겠습니다.
3. 클래스(Class)와 구조체(Struct)의 메모리 동작 차이

똑같은 방식으로 구조체와 클래스를 생성하고 인스턴스 하나를 생성하였습니다.
그리고 다른 변수에 인스턴스를 생성한 변수를 똑같이 담아주면
여기서부터 차이점이 발생합니다.
클래스의 경우 메모리 주소값을 복사해서 전달하기 때문에 a2.name에서 값을 바꾸게 되면
a1.name도 같은 메모리 주소를 가지고 있기 때문에 같은 값이 나오게 됩니다.
반대로 구조체의 경우 값 자체를 복사해서 전달하기 때문에 a2.name에서 값이 변경되더라도
a1.name은 변화가 없습니다. 때문에 처음 저장해둔 값이 나오므로, 두개가 다른 값이 나오게 되겠죠!
위와같이 메모리 동작 방식이 다르므로, 구조체가 클래스보단 작동이 빠를 수 밖에 없습니다.
꼭 상속이 필요한 경우가 아니라면 애플에서도 구조체 사용을 권장하고 있습니다.
여기까지 구조체와 클래스에 대해 간단한 차이점까지 알아봤습니다.
다음번 포스팅에서는 클래스와 구조체의 생성자를 알아보도록 하겠습니다.!
(엄청 헷갈려요)
요즘 일주일이 어떻게 가는지 모르겠네요 ㅎㅎ 모두들 즐코하세요!💻
'iOS > Swift' 카테고리의 다른 글
| GCD vs Swift Concurrency 동작 원리 비교 (Swift Concurrency를 들어가면서...) (0) | 2025.07.05 |
|---|---|
| 클로저(Closure) 이름없는 무서운녀석. (0) | 2022.08.09 |
| 열거형(Enumeration)에 대해 알아보자! (0) | 2022.08.02 |
| 저장 타입 속성(Stored Type Properties)에 대해 알아보기!! (0) | 2022.07.21 |
| Swift Collection에 대해 알아보자!! (0) | 2022.07.12 |