반응형
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 |
'Study > JAVA' 카테고리의 다른 글
[JAVA] 오버로딩, 오버라이딩 (0) | 2022.11.05 |
---|---|
[JAVA] 문제해결: OkHttpClient Response객체에서 필요 정보 가져오기(getJSONArray()) 함수사용 (0) | 2021.11.16 |
[JAVA] 재귀함수 (0) | 2020.06.15 |
[Java] 조건문 문제풀기-2 (0) | 2020.06.15 |
[JAVA] 조건문 문제풀기 (0) | 2020.06.15 |