티스토리 뷰

TIL

7월 18일: swift)클래스와 구조체의 차이

알롱도담쓰 2023. 7. 18. 10:03

구조체 와 클래스

공통점

  • 프로퍼티 정의 : 속성 정의
  • 메서드 정의 : 기능을 정의
  • 초기화 정의
  • 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 출력

언제 구조체를 사용하면 좋을까?

스위프트 대부분은 구조체로 작성되어 있는데, 그렇기 때문에 기본적인 부분은 변경되지 않는다
새롭게 만들어지는 인스턴스의 값만 복사되어 변경이 가능하다 -> 개별적으로 관리해야 할 때 사용하면 좋다.

최근에 올라온 글