728x90
반응형
안녕하세요 욱승입니다.
오늘은 구조체와 클래스차이에 대해 알아보겠습니다.
요약
struct
- 복사 개념
- 참조하는 값이 바꿔도 기존 값에는 영향이 없음
class
- 공유 개념
- 참조하는 값이 바뀌면 기존 값도 영향을 받아 바뀜
class와 struct의 공통점
- 값을 저장하기 위한 프로퍼티를 정의할 수 있음
- 기능을 제공하기 위해 메소드를 정의할 수 있음
- subscript 문법을 이용해 특정 값에 접근할 수 있음
- 생성자를 사용해 초기 상태를 설정할 수 있음
- 기본 구현에서 기능을 확장할 수 있음
- Protocol을 채택하여 기능을 설정할 수있음
class(클래스)
- 참조 타입
- ARC로 메모리 관리
- 같은 클래스 인스턴스를 여러 개 변수에 할당한 뒤 값을 변경시키면 할당한 모든 변수에 영향을 줌
- 상속 가능
- 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인 가능
- deinit을 이용해 클래스 인스턴스의 메모리 할당을 해제할 수 있음
struct(구조체)
- 값 타입
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당
- 값을 변경시키더라도 다른 변수에 영향을 주지 않음
글로는 이해가 잘 안되실탠데요 예시보시겠슴다.
struct myInfo {
var name : String
var age : Int
var graduate : Bool
}
var ukseung = myInfo(name: "승욱", age: 27, graduate: false)
var ukseungClone = ukseung
print("이름 : \(ukseung.name)") // 이름 : 승욱
print("나이 : \(ukseung.age)") // 나이 : 27
print("졸업유무 : \(ukseung.graduate)") // 졸업유무 : false
ukseungClone.age = 20
print("이름 : \(ukseung.name)") // 이름 : 승욱
print("나이 : \(ukseung.age)") // 나이 : 27
print("졸업유무 : \(ukseung.graduate)") // 졸업유무 : false
Struct
ukseung인스턴스의 age값은 그대로 인것을 확인할수 있다.
근데.. 나이는 왜이렇게 빨리먹을까요(마음만은 20살)
반면 클래스는
class myInfo {
var name : String
var age : Int
var graduate : Bool
init(_ name: String, _ age: Int, _ graduate: Bool){
self.name = name
self.age = age
self.graduate = graduate
}
}
var ukseung = myInfo("승욱", 27, false)
var ukseungClone = ukseung
print("이름 : \(ukseung.name)") // 이름 : 승욱
print("나이 : \(ukseung.age)") // 나이 : 27
print("졸업유무 : \(ukseung.graduate)") // 졸업유무 : false
ukseungClone.age = 20
print("이름 : \(ukseung.name)") // 이름 : 승욱
print("나이 : \(ukseung.age)") // 나이 : 20
print("졸업유무 : \(ukseung.graduate)") // 졸업유무 : false
차이점이 보이시나요
Class는 공유개념, Struct는 복사개념!!
클..라..쓰는 공유개념..
스트..럭쓰는 복사개념..
메모...
Reference
728x90
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] Left side of mutating operator isn't mutable: 'count' is a 'let' constant, In-out 파라미터 사용 방법 (1) | 2022.09.23 |
---|---|
[Swift] Set 집합 기본 집합 연산 정리 (0) | 2022.09.08 |
[Swift] 싱글톤 패턴(Singleton Pattern) (0) | 2022.09.07 |
[Swift] 난수 생성 (0) | 2022.08.28 |
[Swift] 3항 연산자, 삼항 연산자 (0) | 2022.08.28 |