본문 바로가기
Back-End

접근제한자 종류

by hoya7788 2024. 8. 20.

자바에는 네 가지 주요 접근 제어자(Access Modifiers)가 있습니다. 이들은 클래스, 메서드, 변수 등의 접근 범위를 지정하는 데 사용됩니다. 각 접근 제어자가 어떻게 동작하는지, 그리고 어떤 상황에서 사용되는지에 대해 설명드리겠습니다.

1. public

  • 설명: public으로 선언된 멤버(클래스, 메서드, 변수 등)는 모든 클래스에서 접근 가능합니다. 즉, 동일한 패키지 내에 있든, 다른 패키지에 있든 관계없이 접근할 수 있습니다.
  • 사용 예시: 보통 API나 라이브러리에서 외부에 공개해야 하는 메서드나 클래스를 public으로 선언합니다.
  • 예시 코드:
public class MyClass {
    public void myMethod() {
        System.out.println("This is a public method.");
    }
}

2. protected

  • 설명: protected로 선언된 멤버는 동일한 패키지 내의 클래스나, 다른 패키지에 있는 하위 클래스(상속받은 클래스)에서 접근할 수 있습니다. 상속 관계에 있는 클래스에서만 접근 가능하므로, 외부에서 무분별하게 접근하는 것을 방지하면서도 상속을 통해 기능을 확장할 수 있습니다.
  • 사용 예시: 클래스의 필드나 메서드를 자식 클래스에서만 접근할 수 있게 하고 싶을 때 사용합니다.
  • 예시 코드:
public class MyClass {
    protected void myMethod() {
        System.out.println("This is a protected method.");
    }
}

public class SubClass extends MyClass {
    public void anotherMethod() {
        myMethod(); // 부모 클래스의 protected 메서드 접근 가능
    }
}

3. default (패키지-프라이빗 또는 패키지-접근)

  • 설명: 접근 제어자를 명시하지 않으면 default 접근 제어자가 적용됩니다. 이 경우, 동일한 패키지 내에서만 접근할 수 있고, 다른 패키지에서는 접근할 수 없습니다.
  • 사용 예시: 동일 패키지 내의 클래스들 간에만 사용하는 메서드나 변수를 선언할 때 사용합니다.
  • 예시 코드:
class MyClass {
    void myMethod() {
        System.out.println("This is a default method.");
    }
}
  • 설명: 위 코드에서 myMethod()는 default 접근 제어자로, 동일 패키지 내에서만 접근 가능합니다.

4. private

  • 설명: private으로 선언된 멤버는 해당 클래스 내에서만 접근할 수 있습니다. 같은 클래스 내의 다른 메서드에서만 사용할 수 있으며, 다른 클래스(심지어는 동일한 패키지 내의 다른 클래스)에서는 접근할 수 없습니다.
  • 사용 예시: 클래스의 내부 구현을 외부에 감추고 싶을 때, 즉 캡슐화를 강화하기 위해 사용됩니다.
  • 예시 코드:
public class MyClass {
    private void myMethod() {
        System.out.println("This is a private method.");
    }

    public void anotherMethod() {
        myMethod(); // 동일 클래스 내에서 private 메서드 호출 가능
    }
}

요약

  • public: 모든 클래스에서 접근 가능.
  • protected: 동일 패키지 내에서 접근 가능, 다른 패키지에서는 상속받은 하위 클래스만 접근 가능.
  • default (아무 것도 명시하지 않을 경우): 동일 패키지 내에서만 접근 가능.
  • private: 해당 클래스 내에서만 접근 가능.

이 접근 제어자들을 적절히 사용함으로써 클래스의 멤버에 대한 접근을 제어하고, 클래스의 데이터와 메서드를 보호할 수 있습니다. 이를 통해 객체 지향 프로그래밍에서 중요한 캡슐화와 정보 은닉을 실현할 수 있습니다.

'Back-End' 카테고리의 다른 글

TDD  (0) 2024.09.02
Getter와 Setter  (0) 2024.08.21
자바에서 전역변수와 멤버변수의 차이점  (0) 2024.07.29
자바 환경변수를 설정하는 이유  (0) 2024.07.15