본문 바로가기

iOS

TIL - [iOS]Class, Struct 차이

728x90
반응형
SMALL

첫 공부는 Class랑 Struct 차이를 공부하려고 구글링했더니 핑구님 글이 나와서 들고왔습니다.

출처: https://icksw.tistory.com/256 핑구님 블로그 글

 "Class는 참조타입이고 ARC로 메모리 관리를 한다. Struct는 값 타입이다."

Class, Struct, 메모리 등 들어봤는 데 솔직히 정확히 뭔지 모르겠... 빡대가리임... 그래서 Class가 뭔지 검색했습니다.

 

감사하게도 wook4506님께서 정리해주신 글이 있다.

출처 : https://velog.io/@wook4506/iOS-Swift-Swift-%EB%AC%B8%EB%B2%95%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-7%ED%8E%B8-%ED%81%B4%EB%9E%98%EC%8A%A4-Class

 

[iOS / Swift] Swift 문법을 알아보자! - 7편 : 클래스 (Class)

오늘은 클래스에 대해서 공부를 해보겠습니다. Swift는 객체 지향 언어이기 때문에 클래스의 사용이 거의 필수적이라고 할 수 있습니다. 또한 클래스의 사용으로 코드는 더 유연해지고 보기 쉽게

velog.io

클래스 (Class)

Swift에서는 클래스를 정의하여 객체를 만들고 사용할 수 있습니다. 클래스를 하나 만든다면 클래스에서 생성된 객체인 인스턴스를 만들어 실제 작업에 쓰일 수 있게 합니다.

하... 이번엔 인스턴스가 뭔지 모르겠다. 이번에 검색했더니 애플사이다님께서 잘 정리해주셨다. 

https://applecider2020.tistory.com/23

 

[Swift] OOP에서 인스턴스란? 타입과 인스턴스, 객체와 인스턴스

안녕하세요. 애플사이다 입니다. Swift는 명령형, 객체지향 프로그래밍 패러다임을 기반으로 함수형 프로그래밍 패러다임 및 프로토콜 지향 프로그래밍 패러다임을 지향하는 언어입니다. OOP (Obje

applecider2020.tistory.com

하지만 Swift에서는 "객체 (Object)"라는 용어 대신 "인스턴스 (Instance)"를 사용한다.

 

다른 언어에서 사용하는 "객체"는 클래스의 인스턴스를 의미한다. 다른 언어는 보통 구조체가 프로퍼티만 가지고 메서드를 가질 수 없다. 또한 클래스는 프로퍼티와 메서드를 가질 수 있다. 따라서 클래스가 매우 유용하고, 이 클래스의 인스턴스에 한정지어 객체라는 용어를 사용한다.

하지만 Swift는 구조체도 메서드를 가질 수 있다. 따라서 Swift의 구조체와 클래스는 매우 유사하다. 다른 언어와 달리 구조체를 매우 유용하게 사용할 수 있다. Apple도 공식문서인 Choosing Between Structures and Classes를 통해 기본적으로 구조체를 사용할 것을 권하고 있다. 클래스는 상속 때문에 구조나 메모리 사용 측면에서 복잡해질 수 있기 때문이다. (클래스의 상속 기능도 구조체에서 프로토콜 상속을 활용하여 대체할 수 있다.)

 

Apple Developer Documentation

 

developer.apple.com

아... 이번에는 프로퍼티가 무슨 말인지 모르겠다. 구조체가 프로퍼티만 가지고 메서드를 가질 수 없다니 무슨 말이지.

주성님? 의  깃북을 찾았다.

https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties

 

프로퍼티 (Properties) - The Swift Language Guide (한국어)

프로퍼티는 클래스, 구조체, 열거형과 관련한 값입니다. 프로퍼티의 종류에는 저장 프로퍼티(Stored Properties)와 계산된 프로퍼티(Computed Properties)가 있습니다. 저장 프로퍼티는 말 그대로 값을 저

jusung.gitbook.io

프로퍼티는 클래스, 구조체, 열거형과 관련한 값입니다. 프로퍼티의 종류에는 저장 프로퍼티(Stored Properties)와 계산된 프로퍼티(Computed Properties)가 있습니다. 저장 프로퍼티는 말 그대로 값을 저장하고 있는 프로퍼티이고, 계산된 프로퍼티는 값을 저장하고 있지 않고 특정하게 계산한 값을 반환해 주는 프로퍼티입니다. 계산된 프로퍼티는 클래스, 구조체, 열거형 모두에서 사용가능하지만, 저장 프로퍼티는 클래스와 구조체에서만 사용 가능합니다. 추가로 프로퍼티 옵저버를 정의해서 값이 변할 때마다 모니터링할 수 있습니다.

 

하...클래스, 구조체, 열거형이 모르지만 일단 값이란다.

 

계산된 프로퍼티 - 클래스, 구조체, 열거형 모두 사용 가능

저장 프로퍼티 - 클래스, 구조체에서만 사용 가능

*추가로 프로퍼티 옵저버를 정의해서 값이 변할 때마다 모니터링 할 수 있음

아.. var, let 으로 만들어 준 애들.. 설명이 엄청 잘 되어있다. 감사합니다.

 

다시돌아와서.

 

그럼 다른 언어에서 구조체는가 변수만 가지고 메서드는 가질 수 없는 데 스위프트는 가질 수 있어서 엄청 유용하고 애플에서도 구조체 사용을 권장한다는 말이었음.

 

 

728x90
반응형
LIST

'iOS' 카테고리의 다른 글

레이아웃 부서지면 쓰는 사이트  (0) 2022.11.18
rename 꼬일 때  (0) 2022.11.17
collectionView 오른쪽 정렬  (0) 2022.11.16
collectionView 가 여러개일때  (0) 2022.11.15
앱 실행되는 전체 과정  (0) 2022.10.14