클래스 VS 구조체

썹스·2022년 10월 8일
0

Swift 문법

목록 보기
14/68

커스텀 타입(Custom Type)

Swift에서 사용자가 정의하여 사용할 수 있는 커스텀 타입(Custom Type)은 크게 클래스(class), 구조체(struct), 열거형(enum) 이 있습니다.

그중에서 클래스와 구조체는 사용하는 방법, 코드 작성법, 정의하는 방법 등이 비슷합니다.
(이번 글은 클래스와 구조체를 중심으로 작성되었습니다.)

🤔그렇다면 클래스와 구조체의 차이점이 뭘까??


📌 클래스(class) VS 구조체(struct)

클래스와 구조체의 가장 큰 차이점은 데이터(속성)를 메모리에 할당하는 방식상속의 여부가 있습니다.

클래스와 구조체로부터 만들어진 객체의 속성 데이터는 힙(Heap) 또는 스택(Stack)에 저장됩니다.

메소드의 경우에는 코드(code)영역에만 저장되어 있으며, 메소드가 저장된 코드의 주솟값을 참조하여 사용됩니다.

✅ 클래스의 메모리 할당

  • 클래스로부터 만들어진 객체의 속성 데이터는 힙(Heap)에 저장되며, 객체의 속성 데이터를 사용할 때는 클래스의 데이터가 담겨있는 힙(Heap)의 주소를 스택(Stack)에 전달하여 사용합니다.

  • 즉, 객체의 속성 데이터를 사용하려면 스택에 저장된 힙의 주소를 참조(reference)하여 데이터를 사용해야 합니다.

  • 힙(Heap)에 할당된 데이터는 프로그래머가 관리해야 합니다. (Swift에서 메모리를 관리하는 모델을 ARC 모델입니다.)

  • 힙(Heap)에 데이터를 저장하고, 스택에서 힙의 주소를 할당받아 사용하는 방식을 "call by reference(참조에 의한 호출)"라 부릅니다.

✅ 구조체의 메모리 할당

  • 구조체로부터 만들어진 인스턴스(객체)의 속성 데이터는 힙(Heap)을 거치지 않고, 처음부터 스택(Stack)에 저장되어 주솟값이 아닌 순수 데이터를 사용합니다.

  • 스택에 할당된 데이터는 운영체제에서 자동으로 메모리를 관리해주기 때문에 개발자는 관리를 크게 할 필요가 없습니다.

  • 스택에 데이터를 저장하고, 스택에서 데이터를 바로 사용하는 방식을 "call by value(데이터에 의한 호출)"라 부릅니다.

✅ 상속(Inheritance)

  • 객체지향의 대표 특징 중에는 상속성(Inheritance)이 존재합니다. 객체지향 언어인 Swift에서는 클래스(class)만이 유일하게 상속 가능합니다.(프로토콜은 상속이 아닌 채택)

  • 클래스는 상속이 가능하기 때문에 코드의 재사용/확장을 할 수 있어 코드의 생산성을 높여줄 수 있다는 장점을 가지고 있습니다.

🤔그렇다면 클래스랑 구조체는 언제 사용할까??


📌 클래스/구조체의 사용

클래스와 구조체는 기본적으로 공통적인 특징과 기능을 하나로 모아 정의하여 사용합니다. 이때 모여지는 특징과 기능이 비교적 간단하고, 상속의 기능이 필요 없다면 구조체를 사용하는 것이 좋습니다.

반대로 모여지는 특징과 기능이 복잡하고 간단하지 않으며, 상속의 기능이 필요한 경우에는 클래스를 사용하는 것이 좋습니다.



Reference

참고자료: 앨런 Swift문법 마스터 스쿨

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글