객체지향 개념_접근제어자의 필요성

2023. 12. 30. 22:08개발공부/Java

728x90
반응형

자바에서 접근제어자는 총 네 가지다.

1) private -> 클래스 내부에서만 사용 가능

2) default(package-private) -> 같은 패키지 내에서만 사용 가능

3) protected -> 같은 패키지 내에서 사용 가능 + 상속된 클래스에서도 사용 가능

4) public -> 전체 전체 사용 가능

 

접근제어가 필요한 이유는?

예를 들어, 스피커 사용을 위한 소프트웨어를 만든다. 

이때 음량이 100을 넘어가면 제품에 고장이 생길 수 있으므로, 음량 100을 넘기지 않도록 아래와 같이 작업했다. 

 

public class Speaker {
    private int volume;


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

    void volumeUp() {
        if(volume >= 100) {
            System.out.println("음량을 증가할 수 없습니다. 최대 볼륨입니다.");
        } else {
            volume += 10;
            System.out.println("음량을 10 증가합니다.");
        }
    }
    void volumeDown() {
            volume -= 10;
            System.out.println("더 이상 음량을 줄일 수 없습니다.");
        }
    void showVolume(){
        System.out.println("현재 음량은 " + volume + "입니다.");
    }
}

 

void volumUp() 메서드에서 volume을 100 이상 넘기지 못하도록 제한했다. 

하지만 사용자는 메서드를 사용하지 않고 아래와 같이 변수에 직접 값을 대입함으로써 100을 넘는 음량을 맞출 수 있다. 

 

Speaker speaker = new Speaker(90);

speaker.volume = 200;  //Speaker 클래스 volume에 private으로 접근을 제한함.
speaker.showVolume();

 

이렇게 음량 100이라는 제한을 넘겨 프로그램을 작동시킬 수 있다면 소통 과정 중 실수로 문제가 발생할 수 있다. 

이를 해결하기 위해 접근제어자가 필요하다. 

위 예시에서, Speaker 클래스에서 변수 int volume에 private 으로 접근을 제어한다면 실행클래스를 작성하는 개발자는 변수에 값을 직접 대입하는 오류를 발생시키지 않게 된다.   

 

※일반적으로 클래스의 멤버 변수(필드)는 private으로 접근제한. 메서드는 필수 기능을 제외하고는 private으로 접근제한을 걸어둔다. 

728x90
반응형