안녕하세요, 새내기 개발자입니다~!
오늘은 swift언어 class와 struct의 차이에 대해서 알아볼게요~!
Swift 언어에서 class와 struct는 모두 데이터와 기능을 하나의 몸체로 묶어버리는?그러한 두 가지 다른 타입의 방법입니다. 그러나 다음과 같은 몇 가지 주요한 차이점이 있습니다.
상속 가능 여부
Class: 클래스는 상속이 가능합니다. 다른 클래스로부터 상속받아 새로운 클래스를 정의할 수 있습니다.
Struct: 구조체는 상속이 불가능합니다. 즉, 다른 구조체로부터 상속받을 수 없습니다.
값 전달 방식
Class: 클래스 인스턴스는 참조로 전달됩니다. 즉, 같은 인스턴스를 여러 변수나 상수가 공유할 수 있습니다.
Struct: 구조체 인스턴스는 값으로 전달됩니다. 이는 인스턴스의 복사본이 만들어지며, 각 변수나 상수가 독립적인 값을 가집니다.
메모리 관리
Class: ARC(Automatic Reference Counting)에 의해 메모리 관리가 이루어집니다. 각 인스턴스에 대한 참조 카운트가 관리되어 해당 인스턴스를 더 이상 사용하지 않을 때 자동으로 메모리에서 해제됩니다.
Struct: 값 전달 방식 때문에 ARC를 사용하지 않습니다. 인스턴스가 생성되거나 사라질 때 별도의 메모리 관리 작업이 필요하지 않습니다.
속성 감시자(Property Observers)
Class: 클래스의 저장 프로퍼티에는 willSet과 didSet 속성 감시자를 사용할 수 있습니다.
Struct: 구조체의 저장 프로퍼티에는 속성 감시자를 사용할 수 없습니다.
뮤테이빌리티(Mutability)
Class: 클래스 인스턴스는 var로 선언되어도 내부의 값을 변경할 수 있습니다.
Struct: 구조체 인스턴스가 var로 선언되면 전체 구조체가 변경 가능합니다. 그러나 let으로 선언하면 내부의 값을 변경할 수 없습니다.
Initializer(초기화자)
Class: 클래스는 별도의 Designated(지정) 이니셜라이저와 Convenience(간편) 이니셜라이저를 가질 수 있습니다.
Struct: 구조체는 멤버 와이즈 초기화며, 별도의 이니셜라이저를 구현하지 않아도 됩니다.
몸체?중괄호안의 기능이나 값에 대한 접근
Class: 클래스의 멤버들은 기본적으로 private 접근 제어 지시자가 아니라면 모든 곳에서 접근할 수 있습니다.
Struct: 구조체의 멤버들은 기본적으로 내부적으로 private이며, 외부에서 접근하려면 public 등의 접근 제어 지시자를 명시해야 합니다.
이러한 차이점들은 클래스와 구조체를 사용할 때 고려해야 할 중요한 사항입니다. 클래스는 주로 상속, 공유 데이터 모델, 참조 전달이 필요한 경우에 사용되며, 구조체는 값 전달, 불변성 유지, 간단한 데이터 타입에 적합합니다.