[Java] 접근 제어자 이해1

코드 속의 "진돌"·2024년 2월 11일
1
post-thumbnail

✅ 접근 제어자


자바는 public, private 같은 접근 제어자(access modifier)를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다.




✅ 접근 제어자 필요한 이유


스피커에 들어가는 소프트웨어를 개발한다고 하자.
스피커의 음량은 절대로 100을 넘으면 안된다는 요구사항이 있다.



✏️ Speaker

  • 스피커는 음량을 높이고, 내리고, 현재 음량을 확인할 수 있는 단순한 기능을 제공한다.
  • 요구사항 대로 스피커의 음량은 100까지만 증가할 수 있다. 절대 100을 넘기면 안된다.
package access;

public class Speaker {
  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("volumeDown 호출");
  }

  void showVolume() {
    System.out.println("현재 음량: " + volume);
  }
}

생성자를 통해 초기 음량 값을 지정할 수 있다.

volumeUp() 메서드를 보자. 음량을 한번에 10씩 증가한다. 단 음량이 100을 넘게되면 더는 음량을 증가하지 않는다.



✏️ SpeakerMain

package access;

public class SpeakerMain {

  public static void main(String[] args) {
    Speaker speaker = new Speaker(90);
    speaker.showVolume();

    speaker.volumeUp();
    speaker.showVolume();

    speaker.volumeUp();
    speaker.showVolume();
  }
}



🖥️ 실행 결과

초기 음량 값을 90으로 지정했다. 그리고 음량을 높이는 메서드를 여러 번 호출했다.



✏️ SpeakerMain - 필드 직접 접근 코드 추가

Speaker 클래스를 보니 volume 필드를 직접 사용할 수 있었다. volume 필드의 값을 200으로 설정하고 이 코드를 실행한 순간 스피커가 고장났다.

package access;

public class SpeakerMain {

  public static void main(String[] args) {
    Speaker speaker = new Speaker(90);
    speaker.showVolume();

    speaker.volumeUp();
    speaker.showVolume();

    speaker.volumeUp();
    speaker.showVolume();

    // 필드에 직접 접근
    System.out.println("volume 필드 직접 접근 수정");
    speaker.volume = 200;
    speaker.showVolume();
  }
}



🖥️ 실행 결과

Speaker 객체를 사용하는 사용자는 Speakervolume 필드와 메서드에 모두 접근할 수 있다.
앞서 volumeUp()과 같은 메서드를 만들어서 음량이 100을 넘지 못하도록 기능을 개발했지만 소용이 없다. 왜냐하면 Speaker를 사용하는 입장에서는 volume 필드에 직접 접근해서 원하는 값을 설정할 수 있기 때문이다.

profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글