-
[Swift] Classes And Structures🍏Swift 2023. 3. 12. 23:47
안녕하세요!
오늘은 클래스와 구조체의 차이에 대해 한번 알아보겠습니다!
클래스
- 문법
붕어빵을 만들때 쓰는 틀과 같은 느낌으로 속성(property)과 method(메서드) 이렇게 2가지로 이루어짐 ex) 카카오톡 친구목록의 친구 한명씩의 프로필과 같은 것이 클래스를 이용해서 찍어낸 객체들
//클래스(틀)는 어디서도 접근 가능한 데이터의 영역에 저장 class Dog { var name = "강아지" var weight = 0 func sit() { print("앉았습니다.") } func layDown() { print("누웠습니다.") } } //객체(실제 데이터)는 참조타입으로 힙의 영역에 저장 var bori = Dog() bori.name bori.weight bori.sit() bori.layDown() var choco = Dog() choco.name choco.weight choco.sit() choco.layDown()구조체
- 문법
구조체도 클래스와 같이 붕어빵 틀과 같은 느낌
// 붕어빵틀 만들기 struct Bird { var name = "새" var weight = 0.0 func fly() { print("날아갑니다.") } } // 붕어빵 찍어내기 (인스턴스의 생성) var aBird = Bird() aBird.name aBird.weight aBird.fly()차이점
- 구조체
- 값형식(Value Type)
- 인스턴스 데이터를 모두 스택(Stack)에 저장
- (복사시) 값을 전달할때마다 복사본을 생성 (다른 메모리 공간 생성)
- 스택(Stack)의 공간에 저장, 스택 프레임 종료시, 메모리에서 자동 제거
- 상속 불가능하고 소멸자 없음
- 메서드 내에서 속성 변경 원칙적으로 불가능
- 멤버와이즈 이니셜라이저(저장속성 모두가 들어간 생성자)를 제공
- 인스턴스 상수로 선언시 저장 속성이 전부 상수로 선언됨
- 클래스
- 참조형식(Reference Type)
- 인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가르키는 변수는 스택에 저장하고
- 메모리 주소값이 힙(Heap)을 가르킴
- (복사시) 값을 전달하는 것이 아니고, 저장된 주소를 전달
- 힙(Heap)의 공간에 저장, ARC시스템을 통해 메모리 관리(주의해야함)
- 상속 가능하고 소멸자 있음
- 메서드 내에서 속성 변경 가능
- 편의 생성자 존재
- 인스턴스 상수로 선언하면 가르키는 인스턴스 고정
초기화
- 문법
초기화 메서드 / 생성자는 인스턴스를 만들때 사용하는 특별한 메서드로 실제 데이터(속성), 동작(메서드)을 사용하기 위해서는 초기화 과정이 반드시 필요한데 저장속성을 초기화 시켜주는 메서드(init)
class Dog1 { var name: String var weight: Int // 생성자 init(n: String, w: Int) { self.name = n self.weight = w } func sit() { print("\\(self.name)가 앉았습니다.") } func layDown() { print("\\(self.name)가 누웠습니다.") } } //인스턴스를 초기화하면 메모리에 정상적으로 인스턴스가 생섬 var dog1 = Dog1(n: "뭉이", w: 12) var dog2 = Dog1(n: "땡이", w: 10)혹시 잘못된 내용이 있다면 피드백 주시면 정말 감사합니다! 😊
'🍏Swift' 카테고리의 다른 글
[Swift] self vs Self (0) 2023.03.05 [Swift] ARC (0) 2023.02.26 [Swift] Optional (0) 2023.02.19 [Swift] Enumeration (0) 2023.02.09 [Swift] Access Control (0) 2023.02.06