티스토리 뷰
구조체 와 클래스
공통점
- 프로퍼티 정의 : 속성 정의
- 메서드 정의 : 기능을 정의
- 초기화 정의
- extension 가능
- 프로토콜 준수
차이점
- 구조체 = 값 타입 (복사) vs 클래스 = 참조 타입 (메모리 주소 전달)
- 구조체 = 상속 불가 vs 클래스 = 단일 상속 가능 (다중 상속 불가)
- 구조체 = init 자동 생성 vs 클래스 = init 사용자 정의 필요
값 타입 예시
struct Coffee {
let name: String
var shot: Int
}
var coffeeInfo: Coffee = Coffee(name: "americano", shot: 2)
var coffeeInfo2 = coffeeInfo
coffeeInfo2.shot = 4
// 출력 : 주문 1은 2 샷
print("주문1 은 \(coffeeInfo.shot) 샷")
// 출력 : 주문 2는 4 샷
print("주문2 는 \(coffeeInfo2.shot) 샷")
// coffeeInfo 와 coffeeInfo2 각각 다른 인스턴스
// coffeeInfo2는 샷의 값을 4로 변경했기 때문에
// 두 개는 다르게 출력 된다
참조 타입 예시
class Pizza {
let name: String
var price: Int
init(name: String, price: Int){
self.name = name
self.price = price
}
}
var pizzaInfo: Pizza = Pizza(name: "pepeloni", price: 21000)
var pizzaInfo2 = pizzaInfo
pizzaInfo2.price = 55000
// 출력 피자 주문1 55000
print("피자 주문1 \(pizzaInfo.price)")
// 출력 피자 주문1 55000
print("피자 주문2 \(pizzaInfo2.price)")
// 주문2만 변경했어도 같은 메모리의 값을 참조하고 있고
// 따라서 주문2의 값만 변경해도 둘 다 55000 출력
언제 구조체를 사용하면 좋을까?
스위프트 대부분은 구조체로 작성되어 있는데, 그렇기 때문에 기본적인 부분은 변경되지 않는다
새롭게 만들어지는 인스턴스의 값만 복사되어 변경이 가능하다 -> 개별적으로 관리해야 할 때 사용하면 좋다.
'TIL' 카테고리의 다른 글
7월 20일: 객체지향 5원칙 (SOLID) (0) | 2023.07.20 |
---|---|
7월 19일: 객체지향 프로그래밍의 4가지 특징 (0) | 2023.07.19 |
7월 17일: 스택stack / 큐queue (0) | 2023.07.17 |
7월 14일: fatal: pathspec '파일 이름' did not match any files (0) | 2023.07.17 |
07월 13일: git reset / revert (1) | 2023.07.17 |
최근에 올라온 글