본문 바로가기

Language/Kotlin

[Kotlin] 스코프와 접근제한자

728x90
반응형

스코프

: 변수나 함수, 클래스 같은 멤버들을 서로 공유하여 사용할 수 있는 범위를 지정해 둔 단위

스코프가 지정되는 범위 - 패키지 내부, 클래스 내부, 함수 내부 등

 

하나의 패키지 안에 변수, 함수, 클래스가 있는데 함수, 클래스에 또 다른 변수, 함수가 있다면 패키지 스코프 안의 또 다른 하위 스코프로 동작하게 된다.

스코프의 세 가지 규칙

1. 스코프 외부에서는 스코프 내부의 멤버를 참조연산자로만 참조 가능하다.

com.google.dimo.A → com.google.dimo 안에 있는 A라는 이름의 멤버 참조

 

2. 동일 스코프 내에서는 멤버들을 공유할 수도 있다.

val a = "패키지 스코프"

class B{
	fun print(){
		println(a)
	}
}

fun main(){
	println(a)  // 패키지 스코프
	B().print()  // 패키지 스코프
}

 

3. 하위 스코프에서는 상위 스코프의 멤버를 재정의 할 수 있다.

val a = "패키지 스코프"

class B{
	fun print(){
		println(a)
	}
}

fun main(){
	val a = "함수 스코프"
	println(a)  // 함수 스코프
	B().print()  // 패키지 스코프
}

 

접근제한자

: 스코프 외부에서 스코프 내부에 접근할 때 그 권한을 개발자가 제어할 수 있는 기능

종류 - public / internal / private / protected

변수, 함수, 클래스 선언 시 맨 앞에 붙여 사용

private var a = “…”

public fun b{ … }

internal class C { … }

기능

패키지 스코프에서

  • public(기본값) : 어떤 패키지에서도 접근 가능
  • internal : 같은 모듈 내에서만 접근 가능
  • private : 같은 파일 내에서만 접근 가능

* protected는 패키지 스코프에서 사용하지 않음

 

클래스 스코프에서

  • public(기본값) : 클래스 외부에서 늘 접근 가능
  • private : 클래스 내부에서만 접근 가능
  • protected : 클래스 자신과 상속받은 클래스에서 접근 가능

* internal은 클래스 스코프에서 사용하지 않음

728x90
반응형

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 스코프 함수  (0) 2023.09.07
[Kotlin] 고차함수와 람다함수  (0) 2023.09.07
[Kotlin] 기본 프로젝트 구조  (0) 2023.09.05
[Kotlin] 오버라이딩, 추상화, 인터페이스  (0) 2023.09.05
[Kotlin] 클래스의 상속  (0) 2023.09.05