개발/Java

Java 접근 제어자 이해하기: public, private, protected, default

ju_ni_ 2023. 7. 18. 16:04
반응형

객체 지향 프로그래밍 언어인 자바에서, 접근 제어자(access modifier)는 중요한 역할을 합니다. 그것들은 클래스, 메소드, 변수 등의 접근 범위를 정의하며, 이것은 프로그램의 보안과 메모리 관리에 큰 영향을 미칩니다. 이 포스트에서는 네 가지 종류의 접근 제어자 - public, private, protected, 그리고 아무것도 지정하지 않는 경우인 default에 대해 더 깊이 들어가 보겠습니다.

 

접근 제어자란?

접근 제어자는 이름에서 알 수 있듯이, 클래스, 변수, 메소드 등의 멤버에 대한 접근을 제어하는 역할을 합니다. 이는 데이터를 보호하고 캡슐화를 통해 코드를 더욱 견고하게 만들어주는 객체 지향 프로그래밍의 중요한 요소입니다.

 

코드의 다른 부분에서 적절하지 않은 방식으로 데이터에 접근하거나 변경하는 것을 방지하기 위해, 접근 제어자를 통해 해당 데이터에 대한 접근 수준을 제한할 수 있습니다.

 

네 가지 접근 제어자 이해하기

  • public: 이 접근 제어자가 붙은 클래스, 메소드, 변수는 프로그램 어디서든 접근 가능합니다. 즉, 클래스 외부에서도 자유롭게 접근하거나 변경할 수 있습니다. 이는 모든 곳에서 접근이 가능하다는 것을 의미하며, 이는 다른 패키지에서도 마찬가지입니다.
public class MyClass {
    public int publicVar;
    ...
}

 

  • private: 이 접근 제어자가 붙은 클래스, 메소드, 변수는 오직 해당 클래스 내에서만 접근 가능합니다. 즉, 클래스 외부에서는 접근할 수 없으며 클래스 내부의 메소드를 통해서만 접근 가능하게 됩니다. 이 접근 제어자는 클래스의 내부 동작을 외부로부터 완전히 숨기고 싶을 때 유용하게 사용됩니다.
public class MyClass {
    private int privateVar;
    ...
}

 

  • protected: 이 접근 제어자가 붙은 클래스, 메소드, 변수는 같은 패키지 내의 클래스나 해당 클래스를 상속받은 외부 패키지의 클래스에서 접근 가능합니다. 즉, 같은 패키지나 상속 관계에 있는 클래스에서만 접근할 수 있습니다.
public class MyClass {
    protected int protectedVar;
    ...
}

 

  • default: 접근 제어자를 명시하지 않으면 default 접근 제어자가 적용됩니다. default로 선언된 클래스, 메소드, 변수는 같은 패키지 내에서만 접근 가능합니다. 즉, 다른 패키지에서는 접근할 수 없으며, 같은 패키지 내에서만 접근 가능합니다.
public class MyClass {
    int defaultVar; // 접근 제어자를 명시하지 않음
    ...
}

 

위에서 설명한 접근 제어자를 이용하여 작성한 코드를 살펴봅시다.

public class AccessModifiers {
    public int publicVar = 1;
    private int privateVar = 2;
    protected int protectedVar = 3;
    int defaultVar = 4; // 접근 제어자를 명시하지 않음

    public static void main(String[] args) {
        AccessModifiers am = new AccessModifiers();

        System.out.println(am.publicVar); // 1
        System.out.println(am.privateVar); // 2
        System.out.println(am.protectedVar); // 3
        System.out.println(am.defaultVar); // 4
    }
}

이 예제에서는 같은 클래스 내에서 모든 접근 제어자가 선언된 변수에 접근이 가능하다는 것을 확인할 수 있습니다. 하지만 다른 클래스 혹은 패키지에서 접근하려고 하면, 각 접근 제어자에 따라 접근 가능한 범위가 다르므로, 각각의 제어자가 제공하는 접근 범위를 이해하는 것이 중요합니다.

 

자바에서 제공하는 네 가지 접근 제어자에 대해 이해하면, 데이터의 보안 및 캡슐화를 향상시키는 데 큰 도움이 될 것입니다. 각각의 접근 제어자가 언제, 어떻게 사용되어야 하는지 정확히 이해하는 것은 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 또한, 코드의 가독성을 높이고 유지보수를 용이하게 하며, 다른 개발자들이 코드를 이해하고 사용하는 데 도움이 됩니다.

반응형