티스토리 뷰

CS/Swift

[Swift]Value vs. Reference

Napster 2017. 11. 7. 15:09

Value vs. Reference

객체하면 생각나는 그것 Struct와 Class (enum, String, Int …. etc.)이다. 하지만 두가지값이냐 참조이냐 그것이 다르다! 객체를 만들때는 인스턴스를 만들기 위함이니까 인스턴스를만들어야한다.

let origin = CGPoint(x:0, y:0)
var other = origin
other.x += 10

코드1. 값타입

코드1인 값타입이 복사되는 전형적인 예이다. value semantics라 한다. 자세히보면 CGPoint를호출할때 쓰는 x값인 0도 복사된다.

var myMilk = ChocoMilk()
myMilk.amount = 300
var yourMilk = myMilk
your.amount = 100
print(myMilk.amount) // 100

코드2. 참조타입

클래스는 항상 참조를 한다. (간접참조) swift는 Class를 제외한 모든 타입은 값타입이다. 하지만inout 키워드를 사용하면 값을 참조로 바꾸어서 내부메소드에서 직접 값을 다룰 수 있다. 사용할수있지만 권장하는 방법은 아니다. 그럼 언제 값을 써야하고 참조를 써야할까? 우선은 값타입을사용을 한다. 우선은!

운영체제는 한프로그램에 한프로세스를 할당한다. (Process) 프로세스는 어떠한 메모리모델로움직일까? 가상메모리를 만들어서 운영체제가 필요한 프로세스를 실제 메모리로 불러와서 사용한다.

함수호출, 내부변수(상수), Value타입의 인스턴스를 사용할땐 메모리의 Stack을 사용한다. 그렇다면클래스는 어디에 생길까? 클래스는 Heap에 생겨 Stack에 있는 변수들이 Heap메모리에 있는 값을참조한다. 클로저 == 객체

메모리관리!

완전한 메모리 관리를 하고 싶다면 Objective-C를 써야한다. Swift보다!iOS는 항상 사용하고있는 앱들이 있다. (전화, 메일, 등등등) 500MB이하를 사용하는 앱을 만드는게더욱 좋다. 최근의 기종들은 2GB를 사용하지만 과거의 기종들(7이하는) 1GB중 절반을 시스템앱이메모리를 사용하고 있다.

Comments