26
swift 0x18 Access Control 문현진([email protected]) 오늘은 뭘 바를까? 이번 신상은 뭘까? 궁금한 언니들은 구글 플레이에 마메스"를 검색하세요.

Swift 0x18 access control

Embed Size (px)

Citation preview

Page 1: Swift 0x18 access control

swift 0x18

Access Control

문현진([email protected])

오늘은뭘바를까? 이번신상은뭘까? 궁금한언니들은구글플레이에서 “마메스"를검색하세요.

Page 2: Swift 0x18 access control

접근 제한

클래스, 구조체, 열거형, 속성, 메소드, 초기자, 서브스크립트 모두 개별 접근 제한자를 쓸수있다.

그리고 접근 제한자를 거의 쓸 필요가 없다! swift가 알아서 다해준다.

Page 3: Swift 0x18 access control

소스파일 및모듈

모듈하나의코드배포단위

import

Page 4: Swift 0x18 access control

소스파일 및모듈

모듈빌드타겟마다다른모듈

Page 5: Swift 0x18 access control

소스파일 및모듈

소스파일모듈안에있는하나의소스파일

Page 6: Swift 0x18 access control

접근 수준

Public

Internal 모듈밖에서접근불가Private 소스파일안에서만 접근 가능

Page 7: Swift 0x18 access control

entity는 자기보다 접근수준이 낮은 entity에속할수없다.

접근 수준원칙

Page 8: Swift 0x18 access control

Internal 모듈밖에서접근불가

기본 접근수준

Page 9: Swift 0x18 access control

기본으로 internal이고,

원하면 private을 사용할수있다.

싱글 타겟앱의 접근 수준

Page 10: Swift 0x18 access control

프레임워크 제작시에는 public으로 지정해서import 할수있도록한다.

프레임워크의 접근수준

Page 11: Swift 0x18 access control

프레임워크 제작시에는 public으로 지정해서import 할수있도록한다.

프레임워크의 접근수준

Page 12: Swift 0x18 access control

public class SomePublicClass {}

internal class SomeInternalClass {}

private class SomePrivateClass {}

public var somePublicVariable = 0

internal let someInternalConstant = 0

private func somePrivateFunction() {}

접근 제한문법

Page 13: Swift 0x18 access control

가장 낮은 수준의 접근 수준에 따라서 튜플의 접근 수준이 정해진다

커스텀 타입 - 튜플

Page 14: Swift 0x18 access control

함수의 입력 파라메터와 반환 값 중 가장 접근 수준이 낮은 접근 수준을따른다.

커스텀 타입 - 함수

Page 15: Swift 0x18 access control

열거형 자체의 접근 수준을 모든 열거형 타입이 받는다.

커스텀 타입 - 열거형

Page 16: Swift 0x18 access control

중첩 타입은 private 타입안에서는 자동으로 private을 받고,

public이나 internal은 자동으로 internal을 받는다.

만약, public 타입에서 중첩해서 public으로 쓰려면 반드시 명시적으로public으로 선언해줘야 한다.

커스텀 타입 - 중첩

Page 17: Swift 0x18 access control

서브 클래싱한 클래스는 부모보다 더 높은 접근수준을 가질 수 없다.

그 접근 수준에서 볼 수 있는 모든 클래스 멤버를 오버라이딩 할 수 있다.

서브 클래싱

Page 18: Swift 0x18 access control

public class A {

private func someMethod() {}

}

internal class B: A {

override internal func someMethod() {

super.someMethod()

}

}

서브 클래싱

Page 19: Swift 0x18 access control

Getters and Setters

상수, 변수, 속성, 서브스크립트는 자동으로 속해 있는 곳의 접근 수준을 갖는다.

Setters Getters는 각각 다른 접근 수준을 갖도록 할 수 있다.

상수 변수속성 서브스크립트

Page 20: Swift 0x18 access control

기본 초기자는 초기화 하는 타입과 같은 접근 수준을 갖는다.

초기자

Page 21: Swift 0x18 access control

memberwise 초기자의 접근 수준은 구조체의 속성에 private이 있으면 private이고, 아니면 internal이다.

그리고, public 타입의 구조체가 다른 모듈에서 memberwise 초기화하길 바란다면, public memberwise

초기자를 정의해야 한다.

memberwise 초기자

Page 22: Swift 0x18 access control

프로토콜 내부에 있는 요구사항들은 모두 같은 접근 수준을 갖는다. 다르게 설정 할 수 없다.

상속 할 때는 가장 낮은 접근 수준을 상속 한다.

프로토콜은 상속 받더라도, 자신의 접근 수준을 유지 한다.

예를 들어서 public class가 internal protocol을 상속하면 internal protocol에 해당하는 요구사항들은internal로 유지한다.

프로토콜

Page 23: Swift 0x18 access control

클래스, 구조체, 열거형 모두 확장 할 수 있다.

확장에서 추가하는 모든 멤버들은 타입의 기본적인 접근 권한을 따른다. 예를 들어서 public타입을 확장 한다면, 새로운 멤버들은 internal이다.

그렇지않으면 private extension같은 형태로 추가하는 확장 안에 있는 모든 멤버의 접근 수준을 수정 할수 있다.

확장

Page 24: Swift 0x18 access control

프로토콜의 규칙을 추가 하기 위해서 확장을 사용 한다면 접근 수준을 명시 할 수 없다.

대신 확장 하려는 프로토콜의 기본적인 접근 수준을 가진다.

확장

Page 25: Swift 0x18 access control

제네릭 타입 또는 함수는 포함하는 파라메터의 최소 접근 수준을 가진다.

제네릭

Page 26: Swift 0x18 access control

타입 alias는 alias하려는 타입보다 더 높은 접근 수준을 가질 수 없다.

private 접근 수준의 alias는 private, internal, public 수준의 type을 alias 할 수 있지만,

public 접근 수준의 alias는 public 수준의 type만 alias 할 수 있다.

타입 alias