SlideShare a Scribd company logo
1 of 26
swift 0x18
Access Control
문현진(arnold@css99.co.kr)
오늘은 뭘 바를까? 이번 신상은 뭘까? 궁금한 언니들은 구글 플레이에
서 “마메스"를 검색하세요.
접근 제한
클래스, 구조체, 열거형, 속성, 메소드, 초기자, 서브스크립트 모두 개별 접근 제한자를 쓸수
있다.
그리고 접근 제한자를 거의 쓸 필요가 없다! swift가 알아서 다해준다.
소스파일 및 모듈
모듈
하나의 코드 배포 단위
import
소스파일 및 모듈
모듈
빌드 타겟 마다 다른 모듈
소스파일 및 모듈
소스 파일
모듈안에 있는 하나의 소스파일
접근 수준
Public
Internal 모듈 밖에서 접근 불가
Private 소스파일안에서만 접근 가능
entity는 자기 보다 접근 수준이 낮은 entity에
속 할 수 없다.
접근 수준 원칙
Internal 모듈 밖에서 접근 불가
기본 접근 수준
기본으로 internal이고,
원하면 private을 사용 할 수 있다.
싱글 타겟 앱의 접근 수준
프레임워크 제작시에는 public으로 지정해서
import 할 수 있도록 한다.
프레임워크의 접근 수준
프레임워크 제작시에는 public으로 지정해서
import 할 수 있도록 한다.
프레임워크의 접근 수준
public class SomePublicClass {}
internal class SomeInternalClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0
private func somePrivateFunction() {}
접근 제한 문법
가장 낮은 수준의 접근 수준에 따라서 튜플의 접근 수준이 정해진다
커스텀 타입 - 튜플
함수의 입력 파라메터와 반환 값 중 가장 접근 수준이 낮은 접근 수준을
따른다.
커스텀 타입 - 함수
열거형 자체의 접근 수준을 모든 열거형 타입이 받는다.
커스텀 타입 - 열거형
중첩 타입은 private 타입안에서는 자동으로 private을 받고,
public이나 internal은 자동으로 internal을 받는다.
만약, public 타입에서 중첩해서 public으로 쓰려면 반드시 명시적으로
public으로 선언해줘야 한다.
커스텀 타입 - 중첩
서브 클래싱한 클래스는 부모보다 더 높은 접근수준을 가질 수 없다.
그 접근 수준에서 볼 수 있는 모든 클래스 멤버를 오버라이딩 할 수 있다
.
서브 클래싱
public class A {
private func someMethod() {}
}
internal class B: A {
override internal func someMethod() {
super.someMethod()
}
}
서브 클래싱
Getters and Setters
상수, 변수, 속성, 서브스크립트는 자동으로 속해 있는 곳의 접근 수준을 갖는다.
Setters Getters는 각각 다른 접근 수준을 갖도록 할 수 있다.
상수 변수 속성 서브스크립트
기본 초기자는 초기화 하는 타입과 같은 접근 수준을 갖는다.
초기자
memberwise 초기자의 접근 수준은 구조체의 속성에 private이 있으면 private이고, 아니면 internal이
다.
그리고, public 타입의 구조체가 다른 모듈에서 memberwise 초기화하길 바란다면, public memberwise
초기자를 정의해야 한다.
memberwise 초기자
프로토콜 내부에 있는 요구사항들은 모두 같은 접근 수준을 갖는다. 다르게 설정 할 수 없다.
상속 할 때는 가장 낮은 접근 수준을 상속 한다.
프로토콜은 상속 받더라도, 자신의 접근 수준을 유지 한다.
예를 들어서 public class가 internal protocol을 상속하면 internal protocol에 해당하는 요구사항
들은
internal로 유지한다.
프로토콜
클래스, 구조체, 열거형 모두 확장 할 수 있다.
확장에서 추가하는 모든 멤버들은 타입의 기본적인 접근 권한을 따른다. 예를 들어서 public타입을 확장 한
다면, 새로운 멤버들은 internal이다.
그렇지않으면 private extension같은 형태로 추가하는 확장 안에 있는 모든 멤버의 접근 수준을 수정 할
수 있다.
확장
프로토콜의 규칙을 추가 하기 위해서 확장을 사용 한다면 접근 수준을 명시 할 수 없다.
대신 확장 하려는 프로토콜의 기본적인 접근 수준을 가진다.
확장
제네릭 타입 또는 함수는 포함하는 파라메터의 최소 접근 수준을 가진다.
제네릭
타입 alias는 alias하려는 타입보다 더 높은 접근 수준을 가질 수 없다.
private 접근 수준의 alias는 private, internal, public 수준의 type을 alias 할 수 있지만,
public 접근 수준의 alias는 public 수준의 type만 alias 할 수 있다.
타입 alias

More Related Content

Similar to Swift 0x18 access control

Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cliChoonghyun Yang
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4Usys4u
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈용근 권
 
Android DI With Hilt
Android DI With HiltAndroid DI With Hilt
Android DI With HiltSSLEE14
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게Sungju Jin
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4Daniel Lim
 
Dagger 2.0 을 활용한 의존성 주입
Dagger 2.0 을 활용한 의존성 주입Dagger 2.0 을 활용한 의존성 주입
Dagger 2.0 을 활용한 의존성 주입승용 윤
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsEunYoung Kim
 
Java, android 스터티4
Java, android 스터티4Java, android 스터티4
Java, android 스터티4Heejun Kim
 
Java, android 스터티4
Java, android 스터티4Java, android 스터티4
Java, android 스터티4Heejun Kim
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XpressEngine
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineeringYoungSu Son
 
게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장진화 손
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)Devgear
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 

Similar to Swift 0x18 access control (20)

Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cli
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java class
Java classJava class
Java class
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
 
Android DI With Hilt
Android DI With HiltAndroid DI With Hilt
Android DI With Hilt
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
Dagger 2.0 을 활용한 의존성 주입
Dagger 2.0 을 활용한 의존성 주입Dagger 2.0 을 활용한 의존성 주입
Dagger 2.0 을 활용한 의존성 주입
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Java, android 스터티4
Java, android 스터티4Java, android 스터티4
Java, android 스터티4
 
Java, android 스터티4
Java, android 스터티4Java, android 스터티4
Java, android 스터티4
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineering
 
게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장게임 프로그래밍 패턴 12장
게임 프로그래밍 패턴 12장
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 

More from Hyun Jin Moon

Swift 0x19 advanced operators
Swift 0x19 advanced operatorsSwift 0x19 advanced operators
Swift 0x19 advanced operatorsHyun Jin Moon
 
Swift 0x14 nested types
Swift 0x14 nested typesSwift 0x14 nested types
Swift 0x14 nested typesHyun Jin Moon
 
Swift 0x12 optional chaining
Swift 0x12 optional chainingSwift 0x12 optional chaining
Swift 0x12 optional chainingHyun Jin Moon
 
Swift 0x0e 초기화
Swift 0x0e 초기화Swift 0x0e 초기화
Swift 0x0e 초기화Hyun Jin Moon
 
Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Hyun Jin Moon
 
Swift 0x02 기본 연산자
Swift 0x02   기본 연산자Swift 0x02   기본 연산자
Swift 0x02 기본 연산자Hyun Jin Moon
 
Swift 0x01 환경 설정
Swift 0x01   환경 설정Swift 0x01   환경 설정
Swift 0x01 환경 설정Hyun Jin Moon
 
Shell, merge, heap sort
Shell, merge, heap sortShell, merge, heap sort
Shell, merge, heap sortHyun Jin Moon
 
Programming challange crypt_kicker
Programming challange crypt_kickerProgramming challange crypt_kicker
Programming challange crypt_kickerHyun Jin Moon
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service PublishHyun Jin Moon
 

More from Hyun Jin Moon (14)

Swift 0x19 advanced operators
Swift 0x19 advanced operatorsSwift 0x19 advanced operators
Swift 0x19 advanced operators
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
 
Swift 0x14 nested types
Swift 0x14 nested typesSwift 0x14 nested types
Swift 0x14 nested types
 
Swift 0x12 optional chaining
Swift 0x12 optional chainingSwift 0x12 optional chaining
Swift 0x12 optional chaining
 
Swift 0x0e 초기화
Swift 0x0e 초기화Swift 0x0e 초기화
Swift 0x0e 초기화
 
Swift 0x0d 상속
Swift 0x0d 상속Swift 0x0d 상속
Swift 0x0d 상속
 
Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트Swift 0x0c 서브스크립트
Swift 0x0c 서브스크립트
 
Swift 0x02 기본 연산자
Swift 0x02   기본 연산자Swift 0x02   기본 연산자
Swift 0x02 기본 연산자
 
Swift 0x01 환경 설정
Swift 0x01   환경 설정Swift 0x01   환경 설정
Swift 0x01 환경 설정
 
Quick, Tree sort
Quick, Tree sortQuick, Tree sort
Quick, Tree sort
 
Shell, merge, heap sort
Shell, merge, heap sortShell, merge, heap sort
Shell, merge, heap sort
 
Djang Beginning 2
Djang Beginning 2Djang Beginning 2
Djang Beginning 2
 
Programming challange crypt_kicker
Programming challange crypt_kickerProgramming challange crypt_kicker
Programming challange crypt_kicker
 
Node.js Cloud Service Publish
Node.js Cloud Service PublishNode.js Cloud Service Publish
Node.js Cloud Service Publish
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

Swift 0x18 access control

  • 1. swift 0x18 Access Control 문현진(arnold@css99.co.kr) 오늘은 뭘 바를까? 이번 신상은 뭘까? 궁금한 언니들은 구글 플레이에 서 “마메스"를 검색하세요.
  • 2. 접근 제한 클래스, 구조체, 열거형, 속성, 메소드, 초기자, 서브스크립트 모두 개별 접근 제한자를 쓸수 있다. 그리고 접근 제한자를 거의 쓸 필요가 없다! swift가 알아서 다해준다.
  • 3. 소스파일 및 모듈 모듈 하나의 코드 배포 단위 import
  • 4. 소스파일 및 모듈 모듈 빌드 타겟 마다 다른 모듈
  • 5. 소스파일 및 모듈 소스 파일 모듈안에 있는 하나의 소스파일
  • 6. 접근 수준 Public Internal 모듈 밖에서 접근 불가 Private 소스파일안에서만 접근 가능
  • 7. entity는 자기 보다 접근 수준이 낮은 entity에 속 할 수 없다. 접근 수준 원칙
  • 8. Internal 모듈 밖에서 접근 불가 기본 접근 수준
  • 9. 기본으로 internal이고, 원하면 private을 사용 할 수 있다. 싱글 타겟 앱의 접근 수준
  • 10. 프레임워크 제작시에는 public으로 지정해서 import 할 수 있도록 한다. 프레임워크의 접근 수준
  • 11. 프레임워크 제작시에는 public으로 지정해서 import 할 수 있도록 한다. 프레임워크의 접근 수준
  • 12. public class SomePublicClass {} internal class SomeInternalClass {} private class SomePrivateClass {} public var somePublicVariable = 0 internal let someInternalConstant = 0 private func somePrivateFunction() {} 접근 제한 문법
  • 13. 가장 낮은 수준의 접근 수준에 따라서 튜플의 접근 수준이 정해진다 커스텀 타입 - 튜플
  • 14. 함수의 입력 파라메터와 반환 값 중 가장 접근 수준이 낮은 접근 수준을 따른다. 커스텀 타입 - 함수
  • 15. 열거형 자체의 접근 수준을 모든 열거형 타입이 받는다. 커스텀 타입 - 열거형
  • 16. 중첩 타입은 private 타입안에서는 자동으로 private을 받고, public이나 internal은 자동으로 internal을 받는다. 만약, public 타입에서 중첩해서 public으로 쓰려면 반드시 명시적으로 public으로 선언해줘야 한다. 커스텀 타입 - 중첩
  • 17. 서브 클래싱한 클래스는 부모보다 더 높은 접근수준을 가질 수 없다. 그 접근 수준에서 볼 수 있는 모든 클래스 멤버를 오버라이딩 할 수 있다 . 서브 클래싱
  • 18. public class A { private func someMethod() {} } internal class B: A { override internal func someMethod() { super.someMethod() } } 서브 클래싱
  • 19. Getters and Setters 상수, 변수, 속성, 서브스크립트는 자동으로 속해 있는 곳의 접근 수준을 갖는다. Setters Getters는 각각 다른 접근 수준을 갖도록 할 수 있다. 상수 변수 속성 서브스크립트
  • 20. 기본 초기자는 초기화 하는 타입과 같은 접근 수준을 갖는다. 초기자
  • 21. memberwise 초기자의 접근 수준은 구조체의 속성에 private이 있으면 private이고, 아니면 internal이 다. 그리고, public 타입의 구조체가 다른 모듈에서 memberwise 초기화하길 바란다면, public memberwise 초기자를 정의해야 한다. memberwise 초기자
  • 22. 프로토콜 내부에 있는 요구사항들은 모두 같은 접근 수준을 갖는다. 다르게 설정 할 수 없다. 상속 할 때는 가장 낮은 접근 수준을 상속 한다. 프로토콜은 상속 받더라도, 자신의 접근 수준을 유지 한다. 예를 들어서 public class가 internal protocol을 상속하면 internal protocol에 해당하는 요구사항 들은 internal로 유지한다. 프로토콜
  • 23. 클래스, 구조체, 열거형 모두 확장 할 수 있다. 확장에서 추가하는 모든 멤버들은 타입의 기본적인 접근 권한을 따른다. 예를 들어서 public타입을 확장 한 다면, 새로운 멤버들은 internal이다. 그렇지않으면 private extension같은 형태로 추가하는 확장 안에 있는 모든 멤버의 접근 수준을 수정 할 수 있다. 확장
  • 24. 프로토콜의 규칙을 추가 하기 위해서 확장을 사용 한다면 접근 수준을 명시 할 수 없다. 대신 확장 하려는 프로토콜의 기본적인 접근 수준을 가진다. 확장
  • 25. 제네릭 타입 또는 함수는 포함하는 파라메터의 최소 접근 수준을 가진다. 제네릭
  • 26. 타입 alias는 alias하려는 타입보다 더 높은 접근 수준을 가질 수 없다. private 접근 수준의 alias는 private, internal, public 수준의 type을 alias 할 수 있지만, public 접근 수준의 alias는 public 수준의 type만 alias 할 수 있다. 타입 alias