2024. 1. 17. 16:12ㆍJAVA
접근제어자란?
클래스의 멤버변수와 메서드에 접근하는 권한을 지정하는 예약어 이다.
public, default, protected, private 등이 있다.
-----
역시나 이렇게 사전적인 정의만 봐 봤자 잘 모르겠다.
접근 제어자는 왜 필요할까? 목적이 뭘까?
예시를 작성 해보자.
public class Japangea {
int inputMoney;
Japangea(int inputMoney) {
this.inputMoney = inputMoney;
}
public void sellProduct(int productPrice) {
if (productPrice > inputMoney) {
System.out.println("금액이 부족합니다.");
} else {
inputmoney -= productPrice;
System.out.println("물품이 구매 되었습니다.");
}
}
현실의 이치에 맞게,
상품의 가격 > 투입한 금액 이면, 판매할 수 없어야 한다.
그러나, 우리는 아래 예시와 같이 외부에서 인스턴스의 값을 직접 입력하며 학습 해왔다.
public class JapangeaMain {
public static void main(String[] args) {
Japangea japangea = new Japangea(0);
japangea.inputMoney = 10000;
}
}
0원을 투입했는데, 10,000원 넣은 것 같은 효과!!
이런식으로 외부에서 값을 입력 가능할 경우..
해당 예시에서 자판기는 돈도 안 받았는데 물건을 줄 것이고,
물건을 싹 다 털린 자판기 소유주는 울 것이고,
자판기 소유주의 토끼같은 자식들은 저녁을 계속 굶게되며, 끝내 영양실조까지 걸릴 것이다.
이렇게 어마어마한 파장을 낳을 수 있는 '불필요한 외부에서의 입력' 막아야 하지 않겠나?'
그래서! 필요한 것이 바로 '접근제어자' 이다.
접근 제어자는 외부에서의 접근 권한, 범위 등을 제어할 수 있게 해준다.
public class Japangea {
private int inputMoney;
Japangea(int inputMoney) {
this.inputMoney = inputMoney;
}
처음 예시 코드에서 딱 한 군데, 변화를 주었다.
멤버변수에 private 접근제어자를 작성한 것이 보이는가?
이 private를 하나 더 붙였을 뿐인데 글쎄...?
public class JapangeaMain {
public static void main(String[] args) {
Japangea japangea = new Japangea(0);
// japangea.inputMoney = 10000;
}
}
외부에서 값을 직접적으로 입력하는 게 막혀 버렸다.
..대..애..박.
자판기 주인과 가족들은 울지도, 굶지도, 병에 걸리지도 않게 됐다.
접근제어자의 핵심
속성과 기능을 외부로부터 숨기는 것.
private - 외부로부터의 접근에서 속성과 기능을 숨길 때 사용
defalut - 동일 패키지의 접근 허용. 외부 패키지로의 속성과 기능을 숨길 때 사용
protected - 상속 관계로 속성과 기능을 숨길 때 사용. 상속 관계가 아닌 곳에서 해당 기능 호출 못 함.
public - 어디서든 사용 가능
'JAVA' 카테고리의 다른 글
| 접근제어자_default (0) | 2024.01.17 |
|---|---|
| 접근제어자_private (0) | 2024.01.17 |
| 생성자_this() (0) | 2024.01.15 |
| 생성자 (0) | 2024.01.15 |
| 참조_NullPointerException (0) | 2024.01.13 |