iOS/Swift(스위프트)

[Swift] Class Struct 차이점 iOS 면접 질문 간단 정리!

기록하는 동구 2023. 1. 25. 13:55
반응형

 

iOS 면접질문을 공부하다보면 가장 자주 접하게 되는 질문이여서 iOS 개발자로 취업하는 사람이라면 무조건 알아야 하는 기본 지식입니다.

 

 

 

먼저 공통점에 대해서 알아보겠습니다.

달달 외워서는 금방까먹으니 최대한 이해해보려고 노력해보면 좋을것같아요.  (공통점은 우리가 클래스와 구조체를 헷갈려하는 이유이기때문에  알아두시면 좋습니다! 차이점도 중요하지만 어떤 부분이 공통점인지 알면 좋겠죠?) 

 

▶️ Class / Struct  공통점  - 헷갈리는 이유

class 클래스이름 {
    // 클래스 내용
}
struct 구조체이름 {
    // 구조체 내용 
}
cs

class 와 struct 는 위와같이 선언하며,

  • 여러 변수(속성) 과 함수(메소드)를 담을수 있는 하나의 집합 입니다.
  • 데이터를 용도에 맞게 묶어서 사용하고 편리하게 쓸수 있습니다.  (캡슐화)
  • 초기화를 정의하여 여러 매개변수에 대해 다양한 인스턴스가 생성 가능합니다. 
  • Protocol 채택 가능
  • 확장 (Extension) 가능
  • 서브스크립트(subscript) 사용 가능 (서브스크립트를 모른다면 여기 참조 https://medium.com/@jgj455/%EC%98%A4%EB%8A%98%EC%9D%98-swift-%EC%83%81%EC%8B%9D-subscript-2288551588f9)한마디로 .을 통해서 내부 값에 접근 가능 

 

▶️ Class / Struct  차이점 - 외우기보단 이해를 해보자

Class Struct
참조타입 값 타입
인스턴스 데이터는 힙(Heap)에 저장, 해당 힙을 가르키는 변수는 스택에 저장 인스턴스 데이터를 모두 스택(Stack)에 저장
(복사시) 값을 전달하는 것이 아니고, 저장된 주소를 전달 (복사시) 값을 전달할때마다 복사본을 생성 (다른 메모리 공간 생성)
(Heap)의 공간에 저장, ARC시스템을 통해 메모리 관리(주의해야함) 스택(Stack)의 공간에 저장, 스택 프레임 종료시, 메모리에서 자동 제거

 

 이걸 꼭 기억하셔야합니다. Class 와 Struct 가장 큰 차이점은 메모리 저장 방식의 차이 입니다.  코드를 통해서 한번 알아보시죠.

 

struct Str {
    var a = 10
}
class Cls {
    var a = 10
}
// 클래스와 구조체 모두 a라는 프로퍼티를 가지고 있습니다.
 
 
// ⭐️ 구조체는 값만 복사합니다. (복사기에 넣어서 새로운 복사물이 나오는거랑 같습니다.)
var str_1: Str = Str()
var str_2: Str = str_1 // str_2 에 미리 선언한 구조체 str_1를 할당했습니다. - 값만 복사하고 새로운 인스턴스가 생깁니다.
 
// ⭐️ 클래스는 값을 참조합니다. (클래스는 힙영역에서 데이터가 공유되고있습니다)
var cls_1: Cls = Cls()
var cls_2: Cls = cls_1 // cls_2 에 미리 선언한 클래스 cls_1를 할당했습니다. - 값을 참조하도록 했습니다.
 
 
// 자 이제, 각각 프로퍼티 값을 변경해보겠습니다.
str_1.a = 20
cls_1.a = 20
 
 
print("str_2.a 의 값은 \(str_2.a)"// str_2.a 의 값은 10
print("cls_2.a 의 값은 \(cls_2.a)"// cls_2.a 의 값은 20
 
 
// 구조체엔 변화x 클래스엔 변화o (메모리 저장방식에 차이가 나는 이유 입니다)
cs

 

▶️ 자 그럼 차이점은 알겠는데, 언제 Class , Struct 를 사용해야하는건가?

(애플이 권장하는 방법 다음중 하나이상에 해당한다면 구조체를 사용하는것을 권장한다고 하네요.)

 

1. 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때

2. 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때

3. 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때

4. 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때

 

 

 

이상 클래스와 구조체의 차이를 알아보는 시간이였습니다. 모두 홧팅!

 

반응형