안녕하세요!
저번에 이어서 클래스와 구조체를 좀 더 다루고자 합니다 :)
오늘은 프로퍼티에 대해서 다루고자 합니다
저번시간에 단순히 프로퍼티는 변수를 부르며
속성이라고도 부른다라고 배운적이 있죠?
만약 저번 글을 읽지 않았다면
class(클래스)와 struct(구조체)에 관하여 - 1
을 읽는걸 추천드립니다 :)
우선 프로퍼티를 다루기전
객체 지향에 대해서 다루고자 합니다
객체지향
OOP
(Ojbect- Oriented Programming)
4대 특징
프로퍼티란?
클래스나 구조체뿐만 아니라 열거형에서도 사용이 됩니다
프로퍼티는 값에 대한 역할을 기준으로
저장 프로퍼티
연산 프로퍼티
2가지가 있습니다
저장 프로퍼티는
값이 저장된다라고 알고 있으면됩니다
그리고 연산 프로퍼티는
연산을 통해서 값을 만들어 내는 역할입니다
간단하게 살펴본 후
순서대로 알아보고자 합니다
위의 이미지처럼
저장속성과 계산속성에 대한 특징을 알아볼 수 있었는데요
이번엔 좀 더 알아보고자 합니다
저장속성
위에서 좀 어렵게 설명되어있으니
쉽게 설명하자면
인스턴스의 일부로서 값이 저장되는 변수 또는 상수입니다
저장 프로퍼티는
var keyword
let keyword
둘 다 사용이 가능합니다
위에서 구조체에 대한 저장 프로퍼티에 알아보았으면
클래스에 저장 프로퍼티의 특징이 있습니다
클래스 프로퍼티는 인스턴스를 let으로 선언한다고 해도
내부 프로퍼티 값을 얼마든지 값을 수정할 수 있습니다
반면 구조체는 불가능하다는 점입니다 :)
그리고 클래스 인스턴스가 처음 생성될 때 함께 초기화 되지만
저장프로퍼티 정의 앞에 lazy가 붙으면 호출되기 전까지 초기화 되지 않습니다
(클래스 / 구조체 동일)
굳이 사용해야하는 이유는?
첫 번째
만약 호출을 자주하지는 않고 많은 메모리공간을 소모할 때
두 번째
다른 속성(변수)를 이요해야할 때 초기화 시점에 모든 속성들이 메모리 공간에 저장되기 때문에
한가지 속성이 다른 속성에 접근할 수가 없습니다
하지만 지연 저장 속성을 이용하는 경우에 먼저 초기화된 속성에 접근이 가능
실제 프로젝트에서 많이 이용을 하고 있답니다 :)
다음으로 계산속성
연산 프로퍼티에 대해서 알아보겠습니다
계산속성
get set 으로 이루어져 있으며
기본적으로 get은 반드시 구현을 해야합니다
만약
get만 구현을 한다고할 때
get을 생략해도 괜찮습니다
하지만 set을 구현한다고 했을 때
반드시
get / set을 나눠서 작성해야 합니다
마지막으로 set파라미터를 사용하지 않고 newValue(기본 인자명)를 대체하여 사용할 수 있습니다
클래스 인스턴스의 참조를 비교할 때 사용합니다
클래스는 참조타입으로 두 객체가 동일한 메모리 공간을 가리키는지 확인할 때 식별 연산자를 사용합니다
결과는?
즉 두 개는 다른 인스턴스(메모리 주소가 다르기)기 때문에 같지 않습니다
오늘은 프로퍼티에 대해서 다루어 보았는데요
혹시나 잘못된 점이 있다면 댓글로 알려주시면 감사하겠습니다
참고
앨런스위프트 문법 자료(강의)
꼼꼼한 재은씨의 스위프트 프로그래밍
'Swift' 카테고리의 다른 글
Swift | class(클래스)와 struct(구조체)에 관하여 - 3 property ( 프로퍼티 옵저버 willSet, didSet / 타입프로퍼티) (0) | 2024.05.16 |
---|---|
Swift | AnyObject / Any란? (0) | 2024.05.14 |
Swift | class(클래스)와 struct(구조체)에 관하여 - 1 (0) | 2024.05.14 |
Swift | 함수 (Function)에 관하여 - 1 (0) | 2024.05.13 |
Swift | Optional에 관하여 (0) | 2024.05.13 |