일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- add view
- 코틀린 중첩클래스
- class
- lateinit
- kotlin listview
- isNullOrBlank
- kakao blind
- kotlin collection
- Kotlin Generic
- 코틀린 내부 클래스
- 컬렉션함수
- kotlin recyclerview
- 코틀린 제너릭
- collection function
- 내용의동일성
- 코틀린 람다함수
- 코틀린 lateinit
- 코틀린 컬렉션함수
- 코틀린
- 객체의 동일성
- 해시
- programmers # 프로그래머스 #큰수비교 #cmp_to_key()
- 코틀린 문자열
- 프로그래머스
- 프로그래머스 #탐욕법 #큰수만들기 #join #python
- 카카오 순위검색
- kotlin addview
- Kotlin
- 컬렉션 함수
- 코틀린 data class
- Today
- Total
엔지니어 규의 IT 프로그래밍 다이어리
[Kotlin]12. 변수,함수, 클래스의 접근범위와 접근 제한자 본문
Scope
스코프는 언어 차원에서 변수나 함수, 클래스 같은 '멤버'들을 서로 공유하여 사용할 수 있는 범위를 지정해둔 단위이다.
스코프가 지정되는 범위는 패키지, 클래수, 함수 내부 등이 있다.
예를 들어 하나의 패키지안에 변수, 함수, 클래스가 있다면, 그것들은 모두 하나의 scope 안에 있는 멤버들이지만,
다시 그 안에 있는 함수나 클래스 안에 또다른 변수나 함수가 존재한다면, 패키지 스코프안에 또다른 하위 스코프로 동작한다.
스코프에는 세가지 규칙이 존재한다. 지금부터 이 규칙을 알아보도록 하자.
첫번째
스코프 외부에서는 스코프 내부의 멤버를 '참조연산자' 로만 참조 가능하다.
이러한 개념은 그동안 자주 사용해 왔었다.
예를들면 클래스의 멤버를 참조할때 클래스 외부에서 인스턴스명에 참조연산자를 사용해 접근했다. (ex : a.eat() , 도트 (.) 가 참조연산자)
패키지에서도 하나의 패키지에서 다른 패키지 내의 멤버를 참조 할 때도 import 를 사용하거나, 직접 참조 연산자를 사용해야 했다.
(ex : import com.google.engineer-gyu , import com.google.engineer-gyu.A -> com.google.enginner-gyu의 A 를 참조)
두번째
동일 스코프 내에서는 멤버들을 '공유' 할 수 있다.
지난 포스팅에서 파일에 package를 명시하지 않으면 default package 라고 했다.
이상태에서 만드는 모든 멤버들은 같은 패키지 스코프에 포함된다고 생각하면 된다.
아래의 소스코드를 보자.
val a = "패키지 스코프"
class B {
fun print(){
println(a)
}
}
fun main(){
println(a)
B().print()
}
패키지 스코프 패키지 스코프 |
cs |
실행해보면 변수 a는 클래스 B나 main 함수에 속해 있지 않지만, 동일 스코프내에서 변수를 공유하고 있다.
세번째
하위 스코프에서는 상위스코프의 멤버를 재정의 할 수 있다.
원래 스코프의 같은 레벨에서는 같은 이름의 멤버를 만들어서는 안된다.
val a = "햄버거"
val a = "피자"
Kotlin: Conflicting declarations |
cs |
위의 소스 코드처럼 a라는 변수를 두번 선언하면 Conflicting declarations error가 나온다.
하지만 하위 스코프에서는 같은 이름의 멤버를 만들어 사용 할 수 있다.
val a = "패키지 스코프"
class B {
val a = "클래스 스코프"
fun print(){
println(a)
}
}
fun main(){
val b = "함수 스코프"
println(a)
B().print()
}
패키지 스코프 클래스 스코프 |
cs |
실행해 보면 상위 스코프에 있는 변수 a를 참조하지 않고, 각각의 스코프를 참조하는것을 알 수 있다.
접근제한자(Access Modifier)
접근제한자란 스코프 외부에서 스코프 내부에 접근 할 때 그 권한을 '개발자'가 제한할때 쓰는 키워드이다.
접근제한자에는 public, internal, private, protected 가 있다.
이 접근제한자들은 변수, 함수, 클래스 선언시 맨 앞에 붙여서 사용하게 된다.
이러한 접근제한자는 상황에 따라 두가지로 기능이 나뉘게된다.

스코프는 멤버들의 가용 범위를 지정해 둔 단위로 개발자는 의도에 따라 스코프안에 변수나 함수, 클래스를 배치할 수 있다.
또한 접근제한자는 이러한 스코프의 외부와 내부에서 사용할 멤버를 분리하여,
스코프 외부에서 건드리지 말아야 할 기능이나 값들을 안전하게 제한하는 용도를 가지고 있습니다.
'프로그래밍 언어 > 코틀린' 카테고리의 다른 글
[Kotlin] 14. 스코프 함수(scope function) (0) | 2022.05.19 |
---|---|
[Kotlin]13. 고차 함수와 람다 함수 (0) | 2022.05.18 |
[Kotlin]11. 프로젝트의 구조 (0) | 2022.05.13 |
[Kotlin]10. 오버라이딩, 추상화, 인터페이스 (0) | 2022.05.11 |
[Kotlin]9. 클래스의 상속 (0) | 2022.05.10 |