본문 바로가기
개발&프로그래밍

[kotlin] 가시성 수정자(Visibility modifiers)

by 재아군 2024. 8. 13.

Kotlin의 가시성 수정자

Kotlin에서 가시성 수정자(visibility modifiers)는 코드의 캡슐화와 접근 제어를 위한 핵심 기능입니다.

이 가이드에서는 Kotlin의 가시성 수정자에 대해 상세히 알아보겠습니다.

 

 

 

가시성 수정자 기본 (Visibility Modifiers Basics)

Kotlin에는 네 가지 가시성 수정자가 있습니다: private, protected, internal, public. 기본 가시성은 public입니다.

이 수정자들은 클래스, 객체, 인터페이스, 생성자, 함수, 프로퍼티 및 그 세터에 적용될 수 있습니다. 게터는 항상 해당 프로퍼티와 동일한 가시성을 가집니다.

 

패키지 레벨 선언 (Package-Level Declarations)

함수, 프로퍼티, 클래스, 객체, 인터페이스는 패키지 내에서 "최상위 레벨"로 직접 선언될 수 있습니다:

// 파일 이름: example.kt
package foo

fun baz() { ... }
class Bar { ... }

패키지 레벨 선언에 대한 가시성 규칙:

  • public (기본): 어디서나 볼 수 있음
  • private: 선언을 포함하는 파일 내에서만 볼 수 있음
  • internal: 같은 모듈 내에서 볼 수 있음
  • protected: 패키지 레벨 선언에는 사용 불가

예시:

// 파일 이름: example.kt
package foo

private fun foo() { ... } // example.kt 내에서만 볼 수 있음

public var bar: Int = 5 // 프로퍼티는 어디서나 볼 수 있음
    private set         // 세터는 example.kt 내에서만 볼 수 있음

internal val baz = 6    // 같은 모듈 내에서 볼 수 있음

 

클래스 멤버 (Class Members)

클래스 내에서 선언된 멤버에 대한 가시성 규칙:

  • private: 해당 클래스 내에서만 볼 수 있음
  • protected: private와 동일하지만 하위 클래스에서도 볼 수 있음
  • internal: 같은 모듈 내에서 선언 클래스를 볼 수 있는 모든 클라이언트가 internal 멤버를 볼 수 있음
  • public: 선언 클래스를 볼 수 있는 모든 클라이언트가 public 멤버를 볼 수 있음

주의할 점은 Kotlin에서 외부 클래스가 내부 클래스의 private 멤버를 볼 수 없다는 것입니다.

 

예시:

open class Outer {
    private val a = 1
    protected open val b = 2
    internal open val c = 3
    val d = 4  // 기본적으로 public

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a는 보이지 않음
    // b, c, d는 보임
    // Nested와 e는 보임

    override val b = 5   // 'b'는 protected
    override val c = 7   // 'c'는 internal
}

class Unrelated(o: Outer) {
    // o.a, o.b는 보이지 않음
    // o.c와 o.d는 보임 (같은 모듈)
    // Outer.Nested는 보이지 않고, Nested::e도 보이지 않음
}

 

생성자 (Constructors)

클래스의 주 생성자 가시성을 지정하려면 다음 구문을 사용합니다:

class C private constructor(a: Int) { ... }

여기서 생성자는 private입니다. 기본적으로 모든 생성자는 public입니다.

 

로컬 선언 (Local Declarations)

로컬 변수, 함수, 클래스는 가시성 수정자를 가질 수 없습니다.

 

모듈 (Modules)

internal 가시성 수정자는 멤버가 같은 모듈 내에서 볼 수 있음을 의미합니다. 모듈은 함께 컴파일되는 Kotlin 파일의 집합입니다. 예를 들어:

  • IntelliJ IDEA 모듈
  • Maven 프로젝트
  • Gradle 소스 셋 (단, test 소스 셋은 main의 internal 선언에 접근 가능)
  • 하나의 <kotlinc> Ant 태스크 호출로 컴파일된 파일 집합

 

 

Kotlin의 가시성 수정자는 코드의 캡슐화와 접근 제어를 세밀하게 관리할 수 있게 해줍니다. 이를 통해 코드의 안정성을 높이고, 불필요한 의존성을 줄일 수 있습니다. 특히 internal 수정자는 모듈 내부 구현을 숨기면서도 필요한 경우 접근할 수 있게 해주어, 대규모 프로젝트에서 매우 유용합니다.

가시성 수정자를 적절히 사용하면 코드의 구조를 더 명확히 하고, 유지보수성을 향상시킬 수 있습니다. 그러나 과도한 제한은 코드의 유연성

 

이 블로그의 다른 글 :

 

2024.08.10 - [개발&프로그래밍] - [Kotlin] 조건문과 반복문

 

[Kotlin] 조건문과 반복문

Kotlin의 조건문과 반복문Kotlin은 다양한 조건문과 반복문을 제공하여 프로그래머가 효율적이고 읽기 쉬운 코드를 작성할 수 있게 합니다. 이 가이드에서는 Kotlin의 주요 제어 흐름 구조를 살펴보

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [kotlin] 타입 체크와 캐스팅

 

[kotlin] 타입 체크와 캐스팅

Kotlin의 타입 체크와 캐스팅Kotlin에서 타입 체크와 캐스팅은 객체 지향 프로그래밍의 핵심 기능입니다. 이 가이드에서는 Kotlin의 타입 체크와 캐스팅 기능을 모든 코드 예제와 함께 상세히 살펴보

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [Kotlin] 숫자 타입과 연산 가이드

 

[Kotlin] 숫자 타입과 연산 가이드

Kotlin의 숫자 타입과 연산 가이드Kotlin에서 숫자를 다루는 방법과 관련된 다양한 개념을 살펴봅니다.  정수 타입 (Integer types)Kotlin은 숫자를 표현하기 위한 내장 타입 세트를 제공합니다. 정수의

observerlife.tistory.com

2024.08.10 - [개발&프로그래밍] - [kotlin] 코딩 컨벤션 - lambdas, Trailing commas

 

[kotlin] 코딩 컨벤션 - lambdas, Trailing commas

Kotlin 코딩 컨벤션 가이드Kotlin을 사용하여 더 깔끔하고 일관된 코드를 작성하기 위한 고급 코딩 컨벤션을 소개합니다.아래글은 공식 홈페이지를 참고하였습니다.https://kotlinlang.org/docs/coding-convent

observerlife.tistory.com

2024.08.09 - [개발&프로그래밍] - [kotlin] 자주 사용되는 관용구(idiom) 모음

 

[kotlin] 자주 사용되는 관용구(idiom) 모음

이 글은 Kotlin 프로그래밍 언어에서 자주 사용되는 관용구(idiom)들의 모음입니다.각 관용구에 대한 설명과 예제 코드를 함께 설명합니다.공식 홈페이지 kotlinlang.org의 내용을 참고합

observerlife.tistory.com

2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 8가지 핵심 문법

 

[kotlin] 입문시 알아야 할 8가지 핵심 문법

Kotlin의 주요 문법 특징들을 간략히 정리한 것입니다.각 항목은 Kotlin의 간결하고 표현력 있는 코드 작성을 지원하는 특징들을 보여줍니다. 아래 문서는 kotlinlang.org 공식 홈페이지를 참조합니다.

observerlife.tistory.com

2024.08.07 - [개발&프로그래밍] - [kotlin] 입문시 알아야 할 7가지 핵심 문법

 

[kotlin] 입문시 알아야 할 7가지 핵심 문법

Kotlin의 기본적인 문법 요소들을 간략하게 설명하고 있습니다.각 항목은 Kotlin 프로그래밍의 기초를 이해하는 데 중요한 개념들을 포함하고 있습니다. 아래 문서는 kotlinlang.org 공식 홈페이지를

observerlife.tistory.com

 

 

 


Kotlin, 가시성수정자, 접근제어, 캡슐화, private, protected, internal, public, 패키지레벨선언, 클래스멤버, 생성자가시성, 모듈, 안드로이드개발, 서버개발, 코드구조화

댓글