기어가더라도 제대로
[Swift - 기초] 100 Days of SwiftUI - Day 11, 접근 제어자, Static 키워드 본문
Swift - 기초
[Swift - 기초] 100 Days of SwiftUI - Day 11, 접근 제어자, Static 키워드
Damagucci-juice 2022. 9. 29. 13:10Struct 외부에서 접근을 막아야하는 이유
이런 구조체가 있다고 할 때, 우리가 일반적으로는 다음과 같이 사용하길 원함
하지만 직접 fund 속성으로 접근하는 경우에 시스템이 생각한 로직대로 흘러가지 않을 수 있음
무엇을 원하느냐면
- struct 내부에서만 property 에 접근을 하게 하여
- struct 에 정의된 메서드를 통해서 원하는 값을 얻어야
- 개발자가 의도한 처리를 진행한 올바른 값을 얻게됨
- 직접 property 로 접근하는 것은 개발자가 고려하지 못한 로직을 발생시킬 수 있음
- property 를 struct 외부에서 접근하지 못하도록 막아야함
- 이렇게 property 앞에 private 키워드를 붙여주면 준다. 이것을 접근 제어자 라고 한다
- private 키워드를 설정해도 내부에서 설정한 메서드(withdraw(), deposit()) 에서는 접근 가능
- 외부에서 fund 속성에 접근해 읽기, 쓰기 작업은 불가능
접근 제어자의 종류
- 접근 제어자라고 불리는 이유
- struct 외부에서 property 나 method 에 접근할 수 있는 방법을 control 하기 때문
- 자주 쓰는 것 위주로 학습해보자.
- private
- struct 바깥에선 어느것도 이 속성에 접근할 수 없음
- private(set)
- 읽기 작업은 외부에서도 가능하지만 쓰기 작업은 struct 내부에서 method를 이용해 가능
- 위의 예제에서 account.funds 에 읽기 작업은 접근 할 수 있지만 쓰기는 withdraw(), deposit() 을 이용해 접근 가능
- 위 예제에선 최선의 방법
- fileprivate
- 현재 file 바깥에선 이 속성에 접근할 수 없음
- public
- 언제 어디서나 속성에 접근 가능
Static 키워드
- struct 의 인스턴스 생성할 때마다 property 가 각각 생성될 것임
- 개별 인스턴스가 아닌 struct 그 자체의 property 에 접근하기 위해 static 이 나옴
static 키워드를 사용할 때 주의점
- static 코드가 비 static 코드를 호출하기 - 하면 안됨
- School 의 어떤 인스턴스를 호출 할 것인지 특정이 안되어있음
- 초기화된 속성이 없는데, 어떻게 non-static 코드를 호출할 수 있을까?
- non-static 코드에서 static 코드 접근하기
- 할 수 있음
- School.studentCount 혹은 Self.studentCount 로 접근
self 와 Self 의 차이점
- self
- 현재 struct 의 value 를 참조
- Self
- 현재 struct 의 type 을 참조
- Int, String, Bool, 등 첫글자가 대문자로 모든 데이터 타입이 시작을 함
- Self 도 데이터 타입을 뜻함!
Static 의 필요성
- 공유 자원을 저장할 때 사용
- 어디서나 원하는 정보를 인스턴스 만들지 않고 접근 가능
- Struct 의 예제를 만들 때 사용
- shared 라는 것을 본적이 있을 것임
- SwiftUI 에서는 preview 라는 것을 사용하는데 만든 코드의 샘플 UI 를 보여준다.
- 데이터 타입을 만들고 디자인 preview 를 만들때 data가 필요하면 Boom! example 을 사용한다.
- 가장 위의 AppData 는 enum 으로 만들어도 유용하다
- struct 는 누군가가 생성할 가능성이 있지만 enum 은 생성 가능성 마저 없고 값만 있다.
'Swift - 기초' 카테고리의 다른 글
[Swift - 기초] Protocol, Opaque return type(some) (0) | 2022.10.01 |
---|---|
[Swift-기초] class - 100 days of swiftUI (2) | 2022.09.30 |
[10일차] struct (0) | 2022.09.28 |
[8일차] 클로저 (0) | 2022.09.28 |
[6일차] Loops (0) | 2022.09.28 |
Comments