Java 접근 제어자 - 사용하기

이전에 접근제어자의 필요성에서 스피커 소프트웨어 코드를 참고해보도록 한다.

이 스피커의 요구사항은 볼륨 한도가 100 넘으면 안된다.

Speaker.java

package access;

public class Speaker {
    int volume;

    Speaker(int volume) {
        this.volume = volume;
    }

    void speakerUp() {
        if (volume >= 100) {
            System.out.println("볼륨이 최대 음량입니다.");
        } else {
            volume += 10;
            System.out.println("음향이 " + volume + "으로 증가하였습니다.");
        }
    }

    void speakerDown() {
        volume -= 10;
        System.out.println("음향이 " + volume + "으로 감소하였습니다.");
    }

    void showSpeaker() {
        System.out.println("현재 음향은 " + volume + "입니다.");
    }
}

SpeakerMain.java

package access;

public class SpeakerMain {
    public static void main(String[] args) {
        Speaker speaker = new Speaker(80);

        System.out.println("=== New Developer Code ===");
        speaker.volume = 200;
        speaker.showSpeaker();
    }
}

코드에서 보듯이 볼륨 한도를 넘어 200으로 설정된 모습을 볼 수 있다.

Speaker 클래스의 volume 필드를 외부에서 접근하지 못하도록 한다.


volume 접근 제어자 설정하기

volume 필드를 private 접근 제어자를 지정하도록 한다.

package access;

public class Speaker {
    private int volume;

    ...
}

이렇게 한 경우 main 에서는 speaker 객체의 volume 필드를 설정할 수 없다.
private 접근 제어자는 모든 외부 호출을 막게 된다.
privatte 설정된 경우 내부 클래스만 값을 설정할 수 있다.

SpeakerMain.java

System.out.println("=== New Developer Code ===");
// speaker.volume = 200; // Error

다른 클래스에 있는 speaker 객체의 volume 필드를 접근하지 못하는 것을 볼 수 있다.