클래스(Class)와 구조체(Struct)의 공통점과 차이점

이창형·2022년 5월 16일
0

공통점

  • 여러 변수(속성)와 함수(메소드)를 담을 수 있는 하나의 집합입니다.
  • 데이터를 용도에 맞게 묶어서 사용할때 편리하고 가독성을 높여줍니다.
  • 초기화를 정의하여 여러 매개변수에 대해 다양한 인스턴스를 생성 가능합니다.
  • 기본적인 구현을 넘어선 기능을 확장시킬 수 있도록 확장이 가능합니다.
  • 점(.)을 사용하여 인스턴스의 속성과 메소드에 접근할 수 있습니다.
  • 인스턴스 생성이 가능하고 생성 방법이 같습니다.
  • 특정 종류의 표준 기능을 제공하는 프로토콜을 사용 가능합니다.
  • 새로운 데이터 타입을 만들어 주는 것 입니다.

차이점

  • 구조체에는 init()메소드 없이 자동으로 초기화 함수를 만들어 줍니다.
  • 클래스에서는 상속이 가능하지만 구조체는 불가능합니다.
  • 구조체는 값 타입이지만 클래스는 참조 타입입니다.
  • 타입캐스팅은 클래스의 인스턴스에만 허용합니다.
  • 디이니셜라이저는 클래스의 인스턴스에만 활용 가능합니다.
  • 참조 횟수 계산(Reference Counting)은 클래스의 인스턴스에만 적용합니다.

가장 큰 차이점

  • 구조체(struct)는 값 타입입니다.(값 복사)
  • 클래스(class)는 값을 참조 타입입니다.
struct A { 
    var a = 10
}

class B { 
    var a = 10
}

// 값을 복사
var str_1: A = A() 
// 값을 참조
var cls_1: B = B() 

var str_2 = str_1
var cls_2 = cls_1

str_1.a = 20
cls_1.a = 20
// 구조체엔 변화x 클래스엔 변화o
// 10 20 출력![](https://velog.velcdn.com/images/changbro/post/060894ed-b484-4814-96f5-74b80d24ec53/image.png)
![](https://velog.velcdn.com/images/changbro/post/24fb2425-73d1-4b34-9d60-fe4a3c667d33/image.png)

print("\(str_2.a) \(cls_2.a)") 
profile
iOS Developer

0개의 댓글