Web/TIL

자바 접근 제어자

wjdwwidz 2024. 9. 1. 18:54

자바에서 접근 제어자는 클래스, 메서드, 변수의 접근 범위를 설정하는 데 사용된다. 접근 제어자는 주로 캡슐화를 통해 데이터 보호와 코드의 구조화된 관리를 돕는다. 자바에는 네 가지 주요 접근 제어자가 있다: public, protected, default(package-private), private이다.

1. Public

public 접근 제어자는 해당 요소가 모든 클래스에서 접근 가능하다는 것을 의미한다. 다른 패키지에 있는 클래스에서도 접근할 수 있으므로, 공용 API나 라이브러리를 만들 때 유용하다.

public class Example {
    public int value;

    public void display() {
        System.out.println("Value: " + value);
    }
}

위 예제에서 Example 클래스와 value 필드는 모두 public으로 선언되어 있어, 다른 패키지에서도 자유롭게 접근할 수 있다.

2. Protected

protected 접근 제어자는 해당 요소가 같은 패키지 내의 클래스와 상속 관계에 있는 클래스에서 접근 가능하다는 것을 의미한다. 이는 서브클래스가 부모 클래스의 필드와 메서드에 접근할 수 있도록 허용한다.

public class Parent {
    protected int value;

    protected void display() {
        System.out.println("Value: " + value);
    }
}

class Child extends Parent {
    void show() {
        value = 10;
        display();
    }
}

여기서 Child 클래스는 Parent 클래스의 protected 멤버에 접근할 수 있다.

3. Default (Package-Private)

default 접근 제어자는 아무런 접근 제어자를 명시하지 않은 경우로, 같은 패키지 내의 클래스에서만 접근할 수 있다. 다른 패키지의 클래스는 접근할 수 없다.

class DefaultExample {
    int value;

    void display() {
        System.out.println("Value: " + value);
    }
}

위의 DefaultExample 클래스는 같은 패키지 내에서만 접근 가능하며, 다른 패키지에서는 접근할 수 없다.

4. Private

private 접근 제어자는 해당 요소가 정의된 클래스 내에서만 접근 가능하다는 것을 의미한다. 이는 데이터 보호를 극대화하는 방법으로, 클래스 외부에서 해당 멤버에 접근할 수 없도록 한다.

public class PrivateExample {
    private int value;

    private void display() {
        System.out.println("Value: " + value);
    }

    public void setValue(int value) {
        this.value = value;
    }

    public void show() {
        display();
    }
}

이 예제에서 value 필드와 display 메서드는 private로 선언되어 외부에서 직접 접근할 수 없지만, setValueshow 메서드를 통해 간접적으로 접근할 수 있다.

결론

자바의 접근 제어자는 코드의 안전성과 유지보수성을 높이는 중요한 요소이다. 적절한 접근 제어자를 사용하여 데이터의 무결성을 유지하고, 클래스 간의 관계를 명확하게 할 수 있다. 각 접근 제어자의 특성을 이해하고 상황에 맞게 활용하는 것이 중요하다.