Swift3(스위프트3)

swift3 스위프트3 값 타입과 참조 타입 - Value Type VS Reference Type

알통몬_ 2017. 7. 5. 11:14
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


이번 포스팅에서는 값 타입과 참조 타입에 대해 공부합니다.


값 타입 

 - struct 구조체

 - enum 열거형


참조 타입

 - class 클래스


Class

 : OOP(객체 지향 프로그래밍) 관점에서의 클래스입니다.

 : 단일상속만 가능합니다. (다중 상속 불가)

 : 인스턴스 메소드와 타입(스태틱) 메소드를 가집니다.

 : 인스턴스 프로퍼티와 타입(스태틱) 프로퍼티를 가집니다.

 : Apple Framework 의 대부분의 큰 뼈대는 모두 클래스로 구성되어 있다고 하네요.


Struct

 : 값 타입입니다.

 : 상속을 지원하지 않습니다.

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


Enum 

 : 값 타입입니다.

 : 다른 언어의 열거형과는 많이 다른 존재입니다.

 : 상속을 지원하지 않습니다.

 : 인스턴스 메소드와 타입(스태틱) 메소드를 가집니다.

 : 인스턴스 연산 프로퍼티와 타입(스태틱) 연산 프로퍼티를 가집니다.

 : 비슷한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의합니다.

   예) 계절, 성별, 월

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



* 구조체는 언제? 사용을 할까요?

1. 참조가 아니라 복사를 필요로 할 때 사용합니다.

2. 상속을 받을 필요가 없을 때 사용합니다.

- Apple Framework 에서 프로그래밍을 할 때에는 대부분 클래스를 사용합니다.


데이터 전달 시

 값 타입 : 값을 복사해서 전달합니다.

 참조 타입 : 값의 메모리 위치를 전달합니다.


예제)

struct StructIsValueType {

      var property = 1

}


class ClassIsReferenceType {

      var property = 1

}


let valueType1 : StructIsValueType = StructIsValueType()

var valueType2 = valueType1

valueType2.property = 2

print(\(valueType1.property) // 1

print(\(valueType2.property) // 2


let referenceType1 : ClassIsReferenceType = ClassIsReferenceType()

var referenceType2 = referenceType1

referenceType2.property = 2

print(\(referenceType1.property) // 2

print(\(referenceType2.property) // 2


위 예제를 통해 값 타입과 참조 타입의 차이점에 대해 알아보았습니다.


이상입니다.


다음 포스팅에서는 클로저에 대해 공부하겠습니다.

반응형