Java를 배워보자/3. 객체 지향 프로그래밍 (OOP)

자바 OOP 접근 제한자

_Blue_Sky_ 2024. 9. 26. 17:05
728x90
728x90

자바 OOP 접근 제한자: 상세 설명과 예시

**객체지향 프로그래밍(OOP)**에서 접근 제한자는 클래스 멤버(변수, 메소드)에 대한 접근 권한을 설정하는 데 사용됩니다. 즉, 외부에서 어떤 멤버에 접근할 수 있고, 어떤 멤버에 접근할 수 없는지를 결정합니다. 이는 코드의 캡슐화를 강화하고, 데이터 보호를 위한 중요한 메커니즘입니다.

접근 제한자의 종류

자바에서는 크게 네 가지 종류의 접근 제한자를 제공합니다.

  • public: 어디서든 접근 가능합니다. 가장 넓은 범위의 접근 권한을 가지며, 보통 클래스의 공개 인터페이스를 구성하는 멤버에 사용됩니다.
  • protected: 같은 패키지 내 또는 상속 관계에 있는 클래스에서 접근 가능합니다. 주로 상속을 통해 재사용되는 멤버에 사용됩니다.
  • default (패키지 private): 같은 패키지 내에서만 접근 가능합니다. 명시적인 접근 제한자가 지정되지 않으면 기본적으로 default 접근 권한을 가집니다.
  • private: 선언된 클래스 내에서만 접근 가능합니다. 가장 좁은 범위의 접근 권한을 가지며, 클래스 내부의 구현 상세를 숨기는 데 사용됩니다.

각 접근 제한자별 설명

  • public:
    • 어떤 클래스에서든지 접근 가능합니다.
    • 클래스의 외부 인터페이스를 구성하는 메소드나 변수에 주로 사용됩니다.
    • 예: public class MyClass { ... }, public void myMethod() { ... }
  • protected:
    • 같은 패키지 내 또는 상속 관계에 있는 클래스에서 접근 가능합니다.
    • 부모 클래스의 멤버를 자식 클래스에서 재정의하거나 확장할 때 사용됩니다.
    • 예: protected int myVariable;, protected void myProtectedMethod() { ... }
  • default:
    • 명시적인 접근 제한자가 지정되지 않으면 자동으로 default 접근 권한을 가집니다.
    • 같은 패키지 내에서만 접근 가능합니다.
    • 예: int myDefaultVariable;, void myDefaultMethod() { ... }
  • private:
    • 선언된 클래스 내에서만 접근 가능합니다.
    • 클래스의 내부 구현 상세를 숨기고, 외부에서의 직접적인 접근을 차단합니다.
    • 예: private String myPrivateField;, private void myPrivateMethod() { ... }

접근 제한자 사용 예시

package mypackage;

public class MyClass {
    public int publicVariable;  // 어디서든 접근 가능
    protected int protectedVariable;  // 같은 패키지 또는 상속 클래스에서 접근 가능
    int defaultVariable;  // 같은 패키지에서만 접근 가능
    private int privateVariable;  // MyClass 내에서만 접근 가능

    public void publicMethod() {
        // ...
    }

    protected void protectedMethod() {
        // ...
    }

    void defaultMethod() {
        // ...
    }

    private void privateMethod() {
        // ...
    }
}
 
 

접근 제한자의 중요성

  • 캡슐화: 클래스 내부의 구현 상세를 숨기고, 외부에서 필요한 기능만 제공하여 코드의 복잡성을 줄이고 유지보수성을 높입니다.
  • 데이터 보호: 민감한 데이터를 private으로 선언하여 외부에서의 무단 접근을 방지합니다.
  • 코드 재사용성: protected 접근 제한자를 사용하여 상속을 통해 코드를 재사용할 수 있습니다.
  • 유연성: 다양한 접근 제한자를 조합하여 클래스 설계의 유연성을 높일 수 있습니다.

결론

접근 제한자는 객체지향 프로그래밍에서 필수적인 개념입니다. 적절한 접근 제한자를 사용하여 클래스를 설계하면 코드의 가독성과 유지보수성을 향상시키고, 안전한 소프트웨어를 개발할 수 있습니다.

 

728x90
728x90