기어가더라도 제대로

[Swift - 기초] 100 Days of SwiftUI - Day 11, 접근 제어자, Static 키워드 본문

Swift - 기초

[Swift - 기초] 100 Days of SwiftUI - Day 11, 접근 제어자, Static 키워드

Damagucci-juice 2022. 9. 29. 13:10

Struct 외부에서 접근을 막아야하는 이유

은행 계좌 struct

이런 구조체가 있다고 할 때, 우리가 일반적으로는 다음과 같이 사용하길 원함

일반적인 사용법

하지만 직접 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