250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Swift 기초 문법 - 클래스 vs 스트럭트(구조체) 본문

Swift 이론

Swift 기초 문법 - 클래스 vs 스트럭트(구조체)

스윞남 2024. 1. 23. 00:44
728x90
반응형
SMALL

클래스와 구조체 비교를 해보겠습니다!

 

 

클래스와 구조체는 Swift에서 사용되는 두 가지 데이터 타입입니다. 둘 다 멤버 변수와 멤버 함수를 포함하는 자체적인 타입을 정의할 수 있습니다. 

 

< 구조체 - 하나의 동작을 하는 객체 만들기 >

구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체 프로퍼티 이름으로 자동 지정됩니다. 

인스턴스가 생성되고 초기화된 후 프로퍼티 값에 접근하고 싶다면 마침표(.)를 사용하면 됩니다.


let 선언 시 인스턴스 내부 프로퍼티 값 변경 X 
var 선언 시 인스턴스 내부 프로퍼티 값 변경 O

 

struct 구조체 이름 {
	프로퍼티, 메소드 }
    
var 이름 = 구조체이름()

 

 

< 클래스 >

스위프트의 클래스는 부모클래스가 없더라도 상속 없이 단독으로 정의가 가능합니다. 

class 클래스 이름 {
	프로퍼티, 메소드 }

class 클래스 이름 : 부모클래스 이름 {
	프로퍼티, 메소드 }

 

구조체와 다르게 참조 타입이므로 let으로 선언을 해도 내부 프로퍼티 값을 변경할 수 있습니다. 

 

< 차이점 >

1. 상속성 :  클래스는 다른 클래스로부터 상속을 받을 수 있지만, 구조체는 상속을 지원하지 않습니다. 클래스는 기존 클래스의 특성을 상속받아 새로운 특성을 추가하거나 수정할 수 있상속 계층 구조를 형성할 수 있습니다.


2. 참조 타입 vs 값 타임 : 클래스는 참조 타입이며, 구조체는 값 타입입니다.
클래스 인스턴스는 힙(heap)에 저장되고, 인스턴스를 참조하는 변수나 상수는 해당 인스턴스의 메모리 주소를 가리킵니다. 
구조체 인스턴스는 스택에 직접 저장되고, 인스턴스를 할당하는 변수나 상수에는 값 자체가 저장됩니다. 
클래스는 참조에 의해 전달되고 복사되지 않지만, 구조체는 갑이 복사되어 전달됩니다.


3. 클래스의 생명 주기 관리 :  클래스는 참조 카운팅을 통해 메모리를 관리합니다. 여러 개의 참조가 동일한 인스턴스를 가리킬 수 있으며, 참조 카운트가 0이 되면 자동으로 메모리에서 해제됩니다. 
구조체는 값 타입이므로 참조 카운팅이 필요하지 않습니다. 구조체 인스턴스는 스코프를 벗어나면 자동으로 해제됩니다.


4. 멤버 초기화 : 클래스는 지정 이니셜라이저와 편의 이니셜라이저를 사용하여 멤버 변수를 초기화할 수 있습니다. 구조체는 자동으로 멤버 변수를 초기화하는 멤버와 이니셜라이저를 제공합니다.

 

일반적으로 클래스는 상속이 필요하거나 참조 타입의 특성이 필요한 경우에 사용됩니다. 구조체는 간단한 데이터 구조를 표현하거나 값 복사가 필요한 경우에 사용됩니다. 또한, 구조체는 값 타입이므로 스레드 안정성이나 코드 예측 가능성을 높이는 데 도움이 될 수 있습니다. 

728x90
반응형
LIST