외부에서, private으로 선언된 속성/메서드에 접근불가하므로 코드 내부의 세부 구현 내용을 숨기는 것이 가능 (은닉화)

<aside> 💡 접근제어는 특정 코드의 접근을 다른 소스파일이나 모듈에서 제한하는 것입니다. 이렇게 접근제어를 함으로써 특정 코드의 세부적인 구현을 감추고 딱 필요한 만큼 공개해 다른 곳에서 사용할 수 있도록 합니다. 접근제어는 클래스, 구조체, 열거형 등 개별 타입에도 적용할 수 있고 그 타입에 속한 프로퍼티, 메소드, 초기자, 서브스크립트에도 적용할 수 있습니다. 프로토콜은 그래서 전역상수, 변수, 함수같이 특정 문맥에 종속됩니다. Swift에서는 기본 접근레벨을 제공해 접근레벨의 처리를 쉽게할 수 있도록 돕습니다. 그래서 사실 단일타겟의 앱에서는 특별히 접근레벨을 전혀 명시하지 않아도 됩니다.

</aside>

class SomeClass {
    private var name = "이름"
		//private을 붙이면 외부에서(name에) 더이상 접근할 수 없음 => 은닉화,**name 속성**은 외부에서 볼 수 없음(접근 불가)  
		//메서드를 통해서 접근 가능 (nameChange)
    func nameChange(name: String) {
        self.name = name
    }
}

var s = SomeClass()
s.name = "홍길동"
s.nameChange(name: "홍길동")   //private을 붙이면 객체 외부에서 보이지않도록(자동검색에 안뜸)

접근 제어(Access Control)가 필요한 이유

Access Levels(접근레벨)

https://www.notion.so/56c56902fa2841429ed71a85e5c87b81#54dfc41145b64f52a23efb5e31a1e4ff

<aside> 💡 [접근 수준(Access Levels)]

따로 명시하지 않으면 internal 설정임(디폴트)

모듈(프레임워크나 라이브러리)을 만들어서 배포하려면, public이상으로 선언해야함

접근 제어를 가질 수 있는 요소는 (스위프트 문서 - 엔터티 / 독립된 개체)

  1. 모든 타입(클래스/구조체/열거형/스위프트 기본타입 등)

  2. 변수/속성

  3. 함수/메서드(생성자, 서브스크립트 포함)

  4. 프로토콜도 특정영역으로 제한될 수 있음

</aside>