본문 바로가기
면접 스터디

면접 스터디 : Class vs Struct vs Enum

by iOS 개린이 2022. 12. 20.

Class(클래스)

-청사진으로 어떤 집단의 속성(Property)과 행위(Method)를 정의해 놓은 것이다. 

-Reference Type(참조 타입). ex) 다른 이에게 사진을 전달할 때 사진의 원본을 참고하도록 한다. 참조한 사진을 변경하면 원본도 같이 변경된다.

-메모리 영역 중 heap(힙) 영역에 저장된다.

-ARC를 통해서 메모리를 관리한다.

-단일 상속이 가능하다. 

-Class는 참조타입이기 때문에 참조할 필요가 없을 때 메모리에서 해제되는데, 해제되기 직전에 deInit 메소드가 호출된다.

보통 메모리에서 클래스의 인스턴스가 해제되기 직전에 처리해야 할 작업을 deInit 메소드에 넣어준다.

deInit 메소드는 class 당 하나만 만들 수 있고, 매개변수와 return 값을 가질 수 없다.

deInit 메소드를 직접 호출할 수 없다.

 

Struct(구조체)

-Property를 저장하거나 Method를 제공하고 이를 결합해서 하나의 타입으로 사용할 수 있도록 하는 타입이다.

-Class와 동일하게 instance를 만들어 사용할 수 있다. (인스턴스는 특정 타입이 메모리에 적재된 시점의 타입.)

-Struct는 Value Type(값 타입). ex) 다른 이에게 사진을 전달할 때 사본을 만들어서 전달한다. 사본을 만들어서 전달하면 사본을 건드려도 원본에는 문제가 생기지 않는다. 이런 면에서 class 보다 안전함.

우리가 주로 사용하는 Int, String 등과 같은 Data Type이 모두 Value Type이다. (Data Type이 모두 Struct로 구현되어 있음.)

-Struct는 메모리 영역 중 Stack(스택) 영역에 저장된다.

-상속이 불 가능하다.

-Struct의 주 목적은 비교적 간단한 데이터 값을 캡슐화 하는 것이다. 

 

Enumeration(열거형)

 

-"같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형" 이라 한다.

-값들을 미리 열거해놓고 사용하기 때문에 가독성과 안전성이 좋다.

-원시값을 주지않아도 이름 자체로 값을 가질 수 있다.

-Enum도 Struct와 동일하게 Value Type이다.

-상속이 불 가능하다.

-메모리 영역 중 Stack 영역에 저장된다.

 

 

  Class Struct Enum
Type Reference Value Value
상속 단일 상속 가능 불가능 불가능
메모리 영역 Heap Stack Stack
deInit 가능 불 가능 불 가능

 

 

Class와 Struct의 공통점

-서로 다른 타입들을 하나로 묶어 새로운 타입으로 사용이 가능하다.

-내부에 Property나 Method 정의가 가능하다.

-extension이 가능하다.

 

 

TMI : 값 타입은 메모리 영역 중 Stack 영역에 저장되는데 String과 Collection Type(Dictionary, Array, Set)은 heap 영역에 저장된다.. 

 

 

 

 

 

Reference:

Swift ) Swift 기초문법1 ( CLASS / STRUCT / ENUM ) (tistory.com)