접근 제어자

조용근·2024년 2월 5일

자바 정리

목록 보기
1/21

접근 제어자는 클래스, 메서드, 변수 등의 접근 범위를 제한하기 위해 사용된다. 이들은 객체 지향 프로그래밍의 캡슐화 원칙을 지원하는 기능 중 하나이다.
**//캡슐화란, 클래스의 내부 데이터를 외부에서 직접 접근하지 못하게 하여 인터페이스만을 통해 데이터를 접근할 수 있게 하는 것을 의미한다.

public

public으로 선언된 멤버(클래스, 메서드, 변수 등)는 어떤 클래스에서든지 접근할 수 있다.

public class PublicExample {
    public int publicNumber; // 어디서든 접근 가능한 변수
    
    public void showNumber() {
        System.out.println("Public Number: " + publicNumber);
    }
}

class TestPublic {
    public static void main(String[] args) {
        PublicExample example = new PublicExample();
        example.publicNumber = 10; // 다른 클래스에서 접근 가능
        example.showNumber(); // 다른 클래스에서 접근 가능
    }
}

private

private으로 선언된 멤버는 해당 멤버가 선언된 클래스 내부에서만 접근할 수 있다.
주로 클래스 내부에서만 사용되는 보조 메서드나 변수에 사용된다.

public class PrivateExample {
    private int privateNumber; // 같은 클래스 내에서만 접근 가능한 변수
    
    public void setPrivateNumber(int number) {
        this.privateNumber = number;
    }
    
    public void showNumber() {
        System.out.println("Private Number: " + privateNumber);
    }
}

class TestPrivate {
    public static void main(String[] args) {
        PrivateExample example = new PrivateExample();
        example.setPrivateNumber(20); // 외부에서 private 멤버에 접근하기 위한 public 메서드 사용
        example.showNumber();
    }
}

default(package-private)

접근 제어자를 명시적으로 지정하지 않으면, default 접근 수준을 가진다.
이는 같은 패키지 내의 클래스만 접근할 수 있다. 즉, 다른 패키지에서는 접근할 수 없다.

class DefaultExample { // 접근 제어자를 명시하지 않음, package-private 클래스
    int defaultNumber; // 같은 패키지 내에서만 접근 가능
    
    void showNumber() {
        System.out.println("Default Number: " + defaultNumber);
    }
}

class TestDefault {
    public static void main(String[] args) {
        DefaultExample example = new DefaultExample();
        example.defaultNumber = 30; // 같은 패키지 내에서 접근 가능
        example.showNumber();
    }
}

protected

protected 접근 제어자는 같은 패키지 내의 클래스 또는 다른 패키지의 자식 클래스에서 접근할 수 있다.

public class ProtectedExample {
    protected int protectedNumber; // 같은 패키지 또는 다른 패키지의 자식 클래스에서 접근 가능
    
    protected void showNumber() {
        System.out.println("Protected Number: " + protectedNumber);
    }
}

class TestProtected extends ProtectedExample {
    public static void main(String[] args) {
        TestProtected example = new TestProtected();
        example.protectedNumber = 40; // 상속받은 클래스에서 접근 가능
        example.showNumber(); // 상속받은 클래스에서 접근 가능
    }
}

요약

public: 어디서든 접근 가능.
private: 같은 클래스 내에서만 접근 가능.
default (package-private): 같은 패키지 내에서만 접근 가능.
protected: 같은 패키지 내 또는 다른 패키지의 자식 클래스에서 접근 가능.

profile
Today I Learn

0개의 댓글