티스토리 뷰
프로젝트 구조 내에서 변수, 함수, 클래스의 '공용 범위'를 제어하는 단위인 스코프와 스코프 외부에서 내부로의 접근을 제어하는 접근 제한자가 무엇인지 알아보자.
😶🌫️ 코틀린에서의 스코프
scope: 범위
- 하나의 패키지에서 변수, 함수, 클래스가 존재하면 같은 스코프이지만, 함수, 클래스 내에 또 변수가 존재한다면, 이는 패키지의 스코프와는 다르다.
스코프의 규칙
- 스코프 외부에서는 스코프 내부의 맴버를 참조 연산자로만 참조가 가능하다.
- 이는 .으로 우리가 클래스의 속성과 함수에 접근했던 것과 같은 의미이다.
- 서로 다른 이름의 패키지를 참조하려고 할 때 import를 사용하는 것 또한 같은 의미이다.
- 동일 스코프 내에서는 맴버를 공유할 수 있다.
- 예를 들어서 패키지 명을 명시하지 않으면 kotlin에서는 default 패키지로 지정하는데, 이때 같은 패키지 스코프 내에 포함된다. 아래의 예제를 보자.
var a: String = "스코프" class Scope{ fun print() { println(a) } } fun main(args: Array<String>) { println(a) val s = Scope() s.print() }
- 출력 값은 모두 "스코프"가 나온다.
- 변수 a는 실제로 클래스 B나 main함수에 속해있지 않으나 동일한 스코프 내에서 변수를 공유하여 사용할 수 있는 것을 볼 수 있다.
- 하위 스코프에서는 상위 스코프의 멤버를 재정의 할 수 있다.
- 원래 스코프의 같은 레벨에서는 같은 이름의 맴버를 만들어서는 안 된다.
- 하지만 하위 스코프 내에서는 같은 이름을 만들어 사용할 수 있다.
var a: String = "패키지 스코프" class Scope{ val a = "클래스 스코프" fun print() { println(a) } } fun main(args: Array<String>) { val a = "함수 스코프" println(a) val s = Scope() s.print() }
- 출력 값은 "함수 스코프" 와 "클래스 스코프"로 패키지 스코프를 참조하지 않고 각각의 스코프 내에 있는 변수를 참조한 것을 확인할 수 있다.
- 만약에 Scope class안의 print()라는 함수 안에 var a = "함수 스코프"를 작성하면 "함수 스코프가"가 출력된다. 즉 변수 출력에 있어 패키지 스코프 < 클래스 스코프 < 함수 스코프를 확인할 수 있다.
😶🌫️ 참조 연산자
스코프 외부에서 스코프 내부에 접근할 때 사용
📦 패키지 스코프에서
public : 기본값, 어떤 패키지에서도 접근이 가능함
internal : 같은 모듈 내에서만 접근이 가능함
private : 같은 파일 내에서만 접근이 가능
protected : 패키지 스코프에서는 사용하지 않음
📿 클래스 스코프에서
public : 기본값, class 외부에서 항상 접근 가능
private : class 내에서만 접근 가능
protected : class 자신과 상속받은 sub class에서만 접근 가능
internal은 class scope에서는사용하지 않음
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Generic (0) | 2021.12.07 |
---|---|
[Kotlin] 클래스의 다형성 (0) | 2021.12.07 |
[Kotlin] Kotlin의 기본 프로젝트 구조 (0) | 2021.12.06 |
[Kotlin] 오버라이딩과 추상화 (0) | 2021.12.06 |
[Kotlin] 상속 (0) | 2021.12.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 비전공개발자
- 추가합격후기
- 생성자
- Java #객체지향 #상속 #생성자 #개념 #비전공개발자 #FullStack을 #향해
- 중첩클래스와 내부클래스
- 백준
- 카카오
- 보조생성자
- Kotlin
- 알고리즘
- 일반파라미터
- 백준 #숨박꼭질3 #다익스트라 #알고리즘 #비전공개발자 #풀스택 #웹개발 #앱개발 #안드로이드 #python
- 기본생성자
- Java
- 비전공싸피합격
- DP
- kotlin문법
- Class
- 백준알고리즘 #BFS #델타이동 #알고리즘풀이 #개발 #안전영역 #풀스택개발자가되고싶습니다. #노력할래요 # 꾸준히 # 화이팅! #비전공개발자
- 앱개발
- 코틀린
- Programmers #알고리즘 #Python #KAKAOINTERNSHIP #비전공개발자 #불량사용자
- 구간 합 구하기 4
- 안드로이드 #안드로이드스튜디오 #Kotlin #앱개발 #안드로이드기초 #비전공개발자 #풀스택개발자 #앱개발자
- 싸피5기
- 프로젝트구조
- Python
- 프로그래머스
- 안드로이드
- 참조연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함