본문 바로가기
etc/Swift

클래스 vs 구조체 / 열거형

by IT learning 2021. 5. 24.
728x90

값 타입/ 참조 타입

 

class 구조체 열거형

 

class 는 다른것과 차이점이 거의 없지만, 단일상속만 된다. 

(인스턴스/타입) 메서드

(인스턴스/타입) 프로퍼티

참조 타입

Apple 프레임워크 대부분의 큰 뼈대는 모두 클래스로 구성 되어있다.

 

구조체는 

다른 언어들의 구조체보다 다양한 기능을 제공한다.

상속이 불가능

값 타입을 가지고 있다.

Swift의 대부분의 큰 뼈대는 모두 구조체로 구성되어있다.

 

열거형

다른 언어의 열거형과는 많이 다른 존재

상속 불가

값 타입

열거형 자체가 하나의 데이터 타입이고 case 하나하나가 다 유의미한 값으로 취급한다.

 

야곰님 스위프트 강의 중

구조체는 언제 사용하나?

연관된 몇몇의 값들을 모아서 하나의 데이터 타입으로 표현하고 싶을 때

다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때

자신을 상속할 필요가 없거나, 자신이 다른 타입을 상속받을 필요가 없을 때

Apple 프레임워크(MacOS, iOS 등) 에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용

 

값 타입 vs 참조 타입

값(Value) - 데이터를 전달할 때 값을 복사하여 전달

참조(Reference) - 데이터를 전달할 때 값의 메모리 위치를 전달

 

위 문제를 보면, SomeStruct라는 구조체가 선언이 되었고 안에 someProperty 라는 프로퍼티가 하나 생성되어있다.

 

그리고 func 에서 SomeStruct를 함수 인자로 받아서 값을 변경시키는 기능을 하고 있다.

하지만 Struct의 특성상 복사를 하는 것 때문에 SomeFuction의 프로퍼티와 SomeStruct의 프로퍼티는 서로 다른 프로퍼티로 나누어지게 된다. 따라서 print를 할때의 값은 'Property'가 나오게 된다.

 

반대로 클래스의 경우 값을 참조(메모리의 위치를 전달) 하기 때문에 function에서 값을 변경하면 원래의 프로퍼티도 값이 변경이 된다.

 

데이터 타입을 다 구조체로 선언이 되어있다.

 

스위프트는 구조체, 열거형 사용을 선호

애플 프레임워크는 대부분 클래스 사용

애플 프레임워크 사용시 구조체/ 클래스 선택은 우리의 몫이 된다.

728x90

'etc > Swift' 카테고리의 다른 글

클로저 고급  (0) 2021.05.26
클로저  (0) 2021.05.24
열거형(enum)  (0) 2021.05.24
클래스  (0) 2021.05.21
구조체  (0) 2021.05.21

댓글

IT_learning's Commit