ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 접근 제한자 알맞게 사용하고 있니?
    카테고리 없음 2025. 6. 24. 11:57

    우리가 보통 개발을 할 때 해당 언어의 접근 제한자의 사용에 대해서 고민해 보는 일이 생기게 될 것이다.
    그렇기 때문에 오늘은 안드로이드 개발에서 접근 제한자를 어떤 상황에 따라서 사용하게 되는지에 대해서 알아보겠다!


    1. 코틀린 접근 제한자

     

    먼저 모두가 알듯.
    코틀린 접근 제한자의 종류는 public, private, protected, internal 이렇게 4가지가 있다.

     

    각각 간단하게 알아보자면...

     

    1.1) public

    모든 모듈 및 패기지에서 사용이 허용된다.

    즉, 가장 넓은 범위의 제한자이다.

     

    1.2) private

    오직 선언된 클래스 안에서만 접근 가능하다.

     

    1.3) protected

    상속받는 인터페이스, 클래스 또는 자식 클래스에서만 접근이 가능하다.

     

    1.4) internal

    같은 패키지, 클래스 안의 상속 관계에 있는 하위 클래스에서 접근이 가능하다.

     

     

    2. 어떤 상황에서 사용하면 좋을까??

     

    2.1) public

     

    먼저 public은...

     

    * Activity, ViewModel, Repository 등 외부에서 직접 사용할 수 있어야 하는 클래스들

    * 공용 API 또는 외부 라이브러리에서 사용할 수 있게 열어두는 컴포넌트

    * 모듈 간 의존 관계에서 다른 모듈이 접근해야 하는 경우

    // 예: 외부 모듈에서 사용할 수 있도록 공개
    class SignInViewModel : ViewModel() {
        ...
    }

     

     

    2.2) private

     

    private은...

     

    * 특정 Composable이 해당 파일 내에서만 쓰일 경우

    * ViewModel 안에서 상태를 변경하는 내부 함수나 변수

    * Preview 용 함수

    // 다른 파일에서는 접근할 수 없음
    private fun SignInHeader() {
        Text(text = "로그인")
    }
    
    // ViewModel 내부에서만 상태를 업데이트
    class SignInViewModel : ViewModel() {
        private val _uiState = MutableStateFlow(...)
    }
    
    // 해당 파일에서만 쓰이는 Preview 코드
    @Preview
    @Composable
    private fun ExamplePreview() {
    
    }

     

     

     

    2.3) internal

     

    internal은....

     

    * 모듈 내부에서만 재사용되는 Composable 또는 클래스

    * 도메인 로직, 유틸 클래스 등 외부에서 접근할 필요가 없는 기능

    * 모듈화 구조에서 내부 구현 숨기기

    // 이 컴포넌트는 같은 모듈 안에서만 사용 가능
    internal fun ErrorSnackbar(message: String) { ... }

     

     

     

    2.4) protected

     

    protected는...

     

    * 주로 상속 기반의 구조에서 사용

    * 커스텀 뷰나 추상 클래스, BaseViewModel 등에서 자식 클래스에게만 열어줄 때

    // BaseViewModel 내부 상태를 자식 ViewModel이 조작 가능
    abstract class BaseViewModel : ViewModel() {
        protected fun handleError(error: Throwable) { ... }
    }
    
    class SignInViewModel : BaseViewModel() {
        fun signIn() {
            // BaseViewModel의 handleError 호출 가능
        }
    }

     

     

    3. 접근 제한자 사용하면 어떤 이득이 있어??

     

    먼저 본인의 생각은....

     

    접근 제한자를 올바르게 사용하면 클래스나 함수의 사용 범위를 명확히 하여 코드의 안정성과 가독성을 높일 수 있다고 생각한다.

    즉, 기능별 역할이 명확히 분리되어, 코드 구조가 더 이해하기 쉬워지고 가독성이 향상된다.


    오늘은 이렇게 접근 제한자가 어떤 상황에서 사용되는지에 대해서 간단하게 알아보아서 좋았다.

Designed by Tistory.