본문 바로가기

웹 기술 쌈싸먹기/Java

[JAVA] 객체지향언어 (4) 접근제어자

객체지향언어 (4) 접근제어자

 

1) 접근 제어자 (access modifier)

  • 접근 제어자는 멤버 변수/함수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 역할을 합니다.
    • private : 같은 클래스 내에서만 접근이 가능합니다
    • default(nothing) : 같은 패키지 내에서만 접근이 가능합니다.
    • protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능합니다.
    • public : 접근 제한이 전혀 없습니다.

 

👉 위의 설명을 토대로 접근 범위에 대해 정리를 하면 다음과 같습니다.
   (좁음)                                    (넓음)
   private → default → protected → public

 

2) 접근제어자 예제

  • ModifierTest.java
package pkg;

public class ModifierTest {
    private void messageInside() {
        System.out.println("This is private modifier");
    }

    public void messageOutside() {
        System.out.println("This is public modifier");
        messageInside();
    }

    protected void messageProtected() {
        System.out.println("This is protected modifier");
    }
}

 

  • Main.java
    import pkg.ModifierTest;
    
    class Child extends ModifierTest {
        void callParentProtectedMember() {
            System.out.println("Call my parent's protected method");
            super.messageProtected();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            ModifierTest modifierTest = new ModifierTest();
    
            modifierTest.messageOutside();
    //        modifierTest.messageInside(); // compile error
    //        modifierTest.messageProtected(); // compile error
    
            Child child = new Child();
            child.callParentProtectedMember();
        }
    }
    • access에 대한 컴파일 오류가 발생할 것입니다. 이처럼 접근 제어자를 통하여 접근할 수 있는 범위가 제한되곤 합니다.
👉 그렇다면 왜 접근 제어자를 사용하지?
- 객체지향 프로그래밍이란 객체들 간의 상호작용을 코드로 표현하는 것입니다.
- 이때 객체들간의 관계에 따라서 접근 할 수 있는 것과 아닌 것, 권한을 구분할 필요가 생깁니다.
- 클래스 내부에 선언된 데이터의 부적절한 사용으로부터 보호하기 위해서!
- 이런 것을 캡슐화(encapsulation)라고 합니다.
- 접근 제어자는 캡슐화가 가능할 수 있도록 돕는 도구입니다.