<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>차이 on letmecompile</title><link>https://www.letmecompile.com/tag/%EC%B0%A8%EC%9D%B4/</link><description>Recent content in 차이 on letmecompile</description><image><title>letmecompile</title><url>https://www.letmecompile.com/images/default-og-image.png</url><link>https://www.letmecompile.com/images/default-og-image.png</link></image><generator>Hugo -- 0.148.1</generator><language>ko-kr</language><lastBuildDate>Tue, 30 Jan 2018 04:06:39 +0000</lastBuildDate><atom:link href="https://www.letmecompile.com/tag/%EC%B0%A8%EC%9D%B4/index.xml" rel="self" type="application/rss+xml"/><item><title>Swift struct vs. class 차이점 비교 분석</title><link>https://www.letmecompile.com/swift-struct-vs-class-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B9%84%EA%B5%90-%EB%B6%84%EC%84%9D/</link><pubDate>Tue, 30 Jan 2018 04:06:39 +0000</pubDate><guid>https://www.letmecompile.com/swift-struct-vs-class-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B9%84%EA%B5%90-%EB%B6%84%EC%84%9D/</guid><description>&lt;p>Swift에는 &lt;code>struct&lt;/code>와 &lt;code>class&lt;/code>타입이 공존하고있기 때문에 아래의 차이점을 잘 숙지하고 상황에 맞게 사용하는것이 매우 중요하다.&lt;/p>
&lt;ul>
&lt;li>&lt;code>struct&lt;/code>
&lt;ul>
&lt;li>call by value (할당 또는 파라메터 전달시 value copy가 일어남)&lt;/li>
&lt;li>stack memory 영역에 할당 (속도가 빠름)
&lt;ul>
&lt;li>scope based lifetime: 컴파일타임에 compiler가 언제 메모리를 할당/해제할지 정확히 알고있음&lt;/li>
&lt;li>data locality: CPU 캐시 히트율이 높음&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>상속 불가능 (protocol은 사용 가능)&lt;/li>
&lt;li>&lt;code>NSData&lt;/code>로 serialize 불가능&lt;/li>
&lt;li>&lt;code>Codable&lt;/code> 프로토콜을 이용하여 손쉬운 &lt;code>JSON&lt;/code> &amp;lt;-&amp;gt; &lt;code>struct&lt;/code> 변환 가능 (Swift 4 이상)&lt;/li>
&lt;li>항상 새로운 변수로 copy가 일어나기때문에 multi-thread 환경에서 공유변수로 인해 문제를 일으킬 확률이 적음 &lt;sup id="fnref-706-thread_safe">&lt;a href="#fn-706-thread_safe" class="jetpack-footnote">1&lt;/a>&lt;/sup>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>class&lt;/code>
&lt;ul>
&lt;li>call by reference (할당 또는 파라메터 전달시 객체를 가리키고있는 메모리 주소값만 복사됨)&lt;/li>
&lt;li>heap memory 영역에 할당 (속도가 느림)
&lt;ul>
&lt;li>런타임에 직접 alloc하며 reference counting을 통해 dealloc이 필요&lt;/li>
&lt;li>memory fragmentation 등의 overhead가 존재&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>상속 가능&lt;/li>
&lt;li>&lt;code>NSData&lt;/code> serialize 가능&lt;/li>
&lt;li>&lt;code>Codable&lt;/code> 사용 불가능&lt;/li>
&lt;li>런타임에 타입 캐스팅을 통해서 클래스 인스턴스에 따라 여러 동작이 가능&lt;/li>
&lt;li>deinitializer 존재&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>참고: class안에 struct 변수를 property로 정의하는것 가능하며, 반대로 struct의 property중 하나로 class 인스턴스 변수를 갖고있는 것도 가능하다. 이 경우 해당 struct 변수의 copy가 일어날때 class 인스턴스의 주소값만 복사된다.&lt;/p></description></item></channel></rss>