개발 알다가도 모르겠네요

클래스와 구조체의 차이를 간단하게 알아보자. 본문

모바일/Swift

클래스와 구조체의 차이를 간단하게 알아보자.

이재빵 2021. 1. 30. 21:52
728x90

클래스

Class를 쓰는 경우

  • 두 object의 인스턴스 자체가 같음을 확인해야 할 때.
  • 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우.

 

call by reference.

클래스의 인스턴스는 힙 영역에 저장.

따라서 타입이 let일 경우에도 값의 변경이 가능.

 

ex)

let me = Person(health: 100)이라고 가정했을 때, me 자체의 타입은 let이지만 그 안의 내용은 Person클래스 타입의 

새로 만들어진 인스턴스의 주소 값을 가지고 있는 상태입니다. (즉 힙 영역에 생성된 실제 person의 주소를 가리키고 있음)

따라서 체력을 깎는 me.damage(10)라는 메서드를 실행하면 let형태의 me의 값을 바꾸는 것이 아니라 me가 가리키는 실제 주소의 값을 바꾸는 것입니다.  

 

 

구조체

Struct를 쓰는 경우

  • 두 object를 "같다, 다르다"로 비교해야 하는 경우
  • copy 된 각 객체들이 독립적인 상태를 가져야 하는 경우
  • 코드에서 object의 데이터를 여러 스레드에 걸쳐 사용할 경우 

 

call by value.

클래스의 인스턴스는 스택 영역에 저장.

타입이 let일 경우에 값의 변경이 불가능.

 

ex)

똑같이 let me = Peson(health: 100)이라고이라고 가정했을 구조체의 경우 자체가 값을 가지는 형태이므로 me에는 실제 값이들어가 있고현재 let형태이기 때문에 변경이 불가합니다.

 

 

스택 영역과 힙 영역

스택 영역의 경우 사용할 수 있는 메모리 크기가 작고 한정적.

힙 영역은 많은 메모리 크기를 가질 수 있음.

 

but, 스택의 경우 가비지 컬렉션에 의해 관리되지 않기 때문에 성능상 많은 장점이 있음.