클래스를 만들고 멤버 변수, 메서드, 생성자 등을 만들 때 public 예약어를 흔히 사용합니다.
객체 지향 프로그램에서는 접근 제어자를 통해 접근 권한을 부여할 수 있습니다.
접근 제어자 | 설명 |
public | 외부 클래스 어디에서나 접근 가능 |
protected | 같은 패키지 내부 또는 상속 관계의 클래스에서 접근 가능하며, 그 외 클래스는 접근 불가 |
명시하지 않은 경우 | default, 같은 패키지 내부에서만 접근 가능 |
private | 같은 클래스 내부에서만 접근 가능 |
멤버 변수에 private 접근 제어자를 작성해주고, 호출 한다면?
접근할 수 없다는 오류가 발생
멤버 변수에 private 접근 제어자를 주석처리 한다면?
public, protected 등과 같은 접근 제어자로 설정된 변수는 출력 가능합니다.
멤버 변수 말고도,
클래스 내에 정의되어 있는 클래스 메서드 또한 동일한 에러를 발생한다.
private 변수에 접근하려면 아래와 같이 클래스 내에서 메서드를 생성해서 접근하면 가능합니다.
예제를 통해 알아보겠습니다.
본 예제는 생활코딩님의 강의(자유와 규제3 - 사용이유)를 참고했습니다.
위와 같이, 접근 제어자 private로 정의된 메소드를 보면 개발자의 의도를 알 수 있습니다.
이 부분은 내가 접근하지 말아야겠구나.
따라서, 접근 제어자 public으로 정의된 메소드만 사용하면 됩니다.
또한, 아래와 같은 상황을 대비할 수 있습니다.
접근 제어자가 private가 아닌 public으로 정의되어 있다면,
이걸 사용하는 사용자에게는
생성된 인스턴스를 통해 변수에 접근하는 상황이 발생할 수 도 있습니다.
즉, 참조변수를 통해 변수 값을 직접 할당한다거나, 변수값의 정수가 아닌 값들을 할당하는 등
위와 같은 상황으로 인한 오류가 발생할지도 모릅니다.
'Java' 카테고리의 다른 글
[Java] 상위 클래스를 상속받는 하위 클래스에 대해서 / default 생성자 자동 생성 / super() 예약어를 통한 생성자 호출 (0) | 2022.09.29 |
---|---|
[Java] 패키지의 사용 (0) | 2022.09.29 |
[Java] 메서드 재정의 / 오버라이딩 / overriding (0) | 2022.09.29 |
[Java] this에 관해서 (0) | 2022.09.28 |
[Java] 상속에 관해서 / IS-A 관계 / HAS-A 관계 / extends / Annotation(애노테이션)이란? / @Override / @Deprecated (0) | 2022.09.28 |