인프런 커뮤니티 질문&답변

Rene02님의 프로필 이미지
Rene02

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

접근 제어자 (전반전)

접근 제어자(전반전) 질문입니다!

작성

·

246

0

 안녕하세요? 늘 강의 잘 보고 있습니다!

가격이 더 이상 -5000원으로 나오지 못하도록 접근 제어자인 private을 사용했는데요!

이후 BlackBoxrefurbish 클래스에서 private int price라고 바꿔줌으로써 해당 클래스 내에서만 접근이 가능하도록 하도록 하였고, AccessModifier에서 get, set으로 price를 설정해주었습니다.

그리고 출력값으로 10만원이 출력되었는데 이러한 출력 과정이 구체적으로 궁금합니다!

1. b1.setPrice(200000)이고, b2.setPrice(-5000) 인데 BlackBoxrefurbish 클래스에서 접근 제어자 private를 설정했으니 BlackBoxrefurbish 클래스에서 가정한 if 문(아래 사진)에 따라 10만원이 출력된 걸까요?

  1. 접근을 제한한다는 뜻이 -5000원을 제한한다는 의미로 받아들여도 되는지 궁금합니다!

답변 1

0

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

접근 제어자는 이름에서 알려주는 것처럼 '접근'을 '제어'하는 것입니다. 누구는 접근할 수 있도록 하고, 누구는 접근하지 못하도록 막는 것인데요. 마치 어떤 건물에 커다란 문의 있고 '관계자외 출입금지' 라는 푯말이 붙어 있는 것과 같다고 보시면 됩니다. 그 곳에는 어떤 공간이 펼쳐져 있는지 일반인들은 알 수도 없고 들어갈 수도 없지만 관계자분들은 자유롭게 드나들 수 있지요.

예제에서 int price 변수 앞에 public 대신 private 을 넣음으로써 해당 클래스 내에서만 접근이 가능하도록 하고, 값을 얻어오거나 바꾸려면 getter, setter 를 사용할 수 있게 하였습니다.

먼저 아래 문장을 실행하면 어떻게 될까요?

b1.setPrice(-5000);

b1 객체의 setPrice() 메소드를 호출하면서 -5000 이라는 값을 전달합니다.

그리고 setPrice 메소드는 다음과 같의 정의되어 있으며 price 라는 파라미터에 -5000 이 들어오게 되겠네요.

public void setPrice(int price) {
	if (price < 100000) {
		this.price = 100000;
	}
	else {
		this.price = price;
	}
}

이때 조건문에 의해서 price 가 100000 보다 작으니

this.price = 100000;

위 문장이 실행되어서 결국 가격은 10만원으로 저장될 것입니다.

여기까지는 b1 객체의 price 인스턴스 변수에 10 만원이라는 값을 넣은 것, 그것으로 끝이구요.

메인 메소드에서

System.out.println("가격 : " + b1.getPrice() + "원");

위 문장을 통해

가격 : 100000원

이라는 결과가 출력되는 것입니다 😊

그리고 접근을 제한한다는 것은 아무데서나 어떤 변수의 값을 사용하고, 바꾸는 것을 막는 것입니다. 또한 메소드의 사용도 막는 거에요. 어떤 무기를 발사하는 버튼이 있다고 하겠습니다. 그 버튼을 아무나 눌러도 될까요? 그러면 아마 큰 사고가 나게 될 것입니다. 분명히 버튼을 누르면 무기가 발사되는 기능이 동작하겠지만 누구나 어디에서나 그 버튼을 누를 수 있으면 안되겠지요. 이를 막는 것처럼 자바에서도 아무나 아무렇게나 값을 바꾸거나 기능(메소드)을 사용하지 못하도록 하는 의미라고 이해하시면 되겠습니다.

감사합니다.

Rene02님의 프로필 이미지
Rene02

작성한 질문수

질문하기