Study/JAVA
[Java] 접근제어자
걸륜
2020. 6. 18. 20:25
반응형
public: 아무런 제약 없이 모든 접근이 허용된다.
protected: 같은 패키지의 객체와 상속 관계에 있는 객체까지만 접근이 허용된다.
default: 해당 패키지 내에서만 접근이 허용된다.
private: 해당 class 내에서만 접근이 허용된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public class AccessModifier {
public static void main(String[] args) {
Wallet myWallet = new Wallet(10000);
myWallet.myMoney -= 2200;
myWallet.checkMyMoney();
}
}
class Wallet {
int myMoney;
public Wallet(int myMoney) {
this.myMoney = myMoney;
}
public void pay(int payMoney) {
this.myMoney -= (int)(payMoney *1.1);
}
public void checkMyMoney() {
System.out.println("남은 돈: " + this.myMoney);
}
}
|
cs |
8라인을보면 pay메소드를 활용하지 않고 직접 myMoney에 접근해서 시스템에 의한 지불이 아닌 임의의 지불을 처리했다.
처리되는건 맞지만 시스템에 의한 지불처리가 아니기 때문에 myMoney의 정보를 신뢰할 수 없다.
그렇기 때문에 pay메소드를 통해 처리되게 해야한다.
Wallet의 멤버 변수 myMoney는 클래스 내부에서만 접근할 수 있어야한다. 그래서 접근 제어자로 'private'을 사용하여
해당 클래스 내에서만 접근할 수 있게 한다.
생성자나 pay메소드, checkMyMoney메소드는 외부에서 접근할 수 있도록 public 으로 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class AccessModifier {
public static void main(String[] args) {
Wallet myWallet = new Wallet(10000);
//myWallet.myMoney -= 2200;
myWallet.pay(2200);
myWallet.checkMyMoney();
}
}
class Wallet {
private int myMoney;
public Wallet(int myMoney) {
this.myMoney = myMoney;
}
public void pay(int payMoney) {
this.myMoney -= (int)(payMoney *1.1);
}
public void checkMyMoney() {
System.out.println("남은 돈: " + this.myMoney);
}
}
|
cs |
남은 돈: 7580 |