Swift

Swift | class(클래스)와 struct(구조체)에 관하여 - 1

ziziDev 2024. 5. 14. 17:00
반응형

안녕하세요

오늘은 드디어!! 

드디어!!

클래스와 구조체에 대해서 알아보고자 합니다

 

처음 마주치기 때문에 음.. 무슨말이지

할 수도 있을것 같기두해요

 

저역시 그랬으니까요!

 

속성(Property)와 메서드(method)를 포함하는 코드 블록을 구성할 수 있는

유연한 객체라고 할 수 있습니다

 

class는 Objective-C에서도 제공된 개념이지만

Objective-C에서 사용하기 어려움이  있었던 구조체나 열거형도 자유롭게

사용할 수 있습니다

 

이 둘의 공통점은 모두 속성과 메서드를 가질 수 있다는 공통점이 있습니다

 그리고 객체 지향 언어인 스위프트는 구조체와 클래스 여러가지 면에서 유사점이 많은 객체랍니다

 

우선 공통점에 대해서 논하고자 합니다

 

꼼꼼한 재은씨의 스위프트 프로그래밍

 

우선 클래스와 구조체 간단히

표로 정리한걸 보고 설명하고자 합니다

 

 

 

클래스와 구조체 사용법

 

사용할 때 앞 부분에 class / struct 을 붙이고 대문자로 명명합니다

 

 

우선 클래스를 하나 만들어 봅시다

 

 

이렇게 클래스 하나를 만들고 객체를 생성해 보고자합니다

객체를 다른말로 하자면 instance라고 부릅니다

 

 

변수의 이름은 스택에 저장되지만 저장된 값은 힙의 메모리 주소값을 가리키고 있습니다

:)

 

복사할 때 값을 전달하는게 아닌 저장된 주소를 전달하고 있답니다

 

 

이렇게 속성에 접근하여 메모리 주소에 접근하여 값을 변경할 수 있습니다

 

다음으로 구조체 하나를 만들어 봅시다

 

 

 

 

구조체는 스택에서 저장하는걸 볼 수 있습니다

이걸 봐서 구조체와 클래스의 저장하는 법이 다른걸 볼 수 있습니다

 

그리고 여기서 인스턴스라고 제가 자꾸 이야기하는데요

여기서 인스턴스란

실질적인 값을 저장하고 사용하려면 메모리 공간을 할당받은 객체가 필요하게 되는데

클래스나 구조체의 값을 담을 수 있는 실질적인 공간을 만들어 내기 위한 일종의 공간확보로 생각하면

될것 같습니다

즉 위에서 Restaurant 구조체와 클래스에 대한 인스턴스(공간확보)를 생성하고 변수에 할당하는걸 볼 수 있습니다

 

 

다음으로 클래스와 구조체 인스턴스를 할 때

let

으로 선언하게 되면 어떻게 될까?

위 그림에서 알 수 있듯이

class는 주소값이 고정 / 속성값은 변경이 가능하고

struct는 인스턴스화된 순간부터 값이 고정되어 변경할 수 없게 되는걸 확인할 수 있다

 

그리고 속성을 접근할 때 .을 이용하여 프로퍼티에 접근하면 됩니다

 

 

다음으로 클래스와 구조체의

생성자

에 대해서 알아보고자 합니다

 

 

생성자는 구조체와 클래스 둘 다 사용을 하고 있으며

인스턴스를 만들 때 아규먼트만 넣으면 기본적으로 값이 세팅되기 때문에

프로그래밍 하는 사람이 편리하게 사용할 수  있습니다

 

인스턴스를 만들 때 GiftStore(name:number:)를 확인할 수 있습니다

 

 

이런식으로 코드를 짤 수 있습니다

구조체 또한 동일합니다

반드시 생성자를 작성할 때 init키워드를 사용하여야 합니다

 

근데 여기서 self?는 뭐야..

 

self는

클래스/구조체 내에서 사용하는것임을 명확하게 하기 위해 self 키워드를

사용하고 있습니다

 

마지막으로

언제 클래스 / 구조체를 사용해야 하는지 선택해야하는데

그걸 잘 모르겠어 ㅠㅠ

라는 사람들이 많을 텐데요

 

이건 코드를 짜는 사람이 선택하는 것에 따라서 달라집니다

 

일반적으로

 

상속의 구조가 필요하다면 반드시 클래스를 사용해야하며

해당모델을 직렬화하여 파일로 저장하거나 전달할 때는 클래스를 사용해야합니다

 

반대로 구조체를 사용해야하는 경우는

구조체에서 저장된 속성들이 값타입이며 참조하는것보다 복사해서 사용하거나

캡슐화한 데이터를 복사해어 사용하고

마지막으로 그냥 단순히 데이터들을 캡슐화하는거라면 

구조체를 사용하여야 합니다

 

 

 

 

읽어주셔서 감사합니다

혹시나 잘못된 부분이 있으면 댓글 달아주세요!

 

 

 

참고

👉🏻꼼꼼한 재은씨의 스위프트 프로그래밍

👉🏻앨런 문법 코드를 보고 참조하여 정리하였습니다

반응형