접근제어지시자 Access Modifier
1. public 어디서나
2. default 패키지 내부
3. private 클래스 내부
-----------------------------------
pretected... 상속개념이해필요
접근 제어 지시자
그래서 왜 사용하는가?
만약 후임개발자가
실수로 메서드를 통해 코드를 작성하지 않고
바로 멤버변수에 접근해서 수정하는 코드를 작성했다면?
실수할 수 있는 가능성이 있다.
만약 balance 변수에 대한 외부접근을 차단한다면?
외부에서는 오직 deposit, withdraw 메서드로만 접근 가능
이같은 처리를 캡슐화 라고도 한다.
-----------------------------------
추가로private 접근제어지시자로 접근이 제한된 멤버변수에 접근하라면
getter, setter메서드를 쓸 수 있어야 한다.
package com.accesss;
public class Account {
//속성
private String name;
private int balance; // 2단계
//생성자
//메서드 - 입금하다, 출금하다, 잔액출력
public void deposit(int dmoney) { // 입금하다
balance += dmoney;
System.out.println(dmoney +"원 입금했습니다. 현재 잔액은 " + balance + "원 입니다.");
}
public void withdraw(int wmoney) { // 출금하다
// TODO 방어적 코드 작성한다
if (wmoney > balance) {
System.out.println("잔액이 부족합니다. 현재 잔액은" + balance + "입니다.");
} else {
balance -= wmoney;
System.out.println(wmoney +"원 출금했습니다. 현재 잔액은 " + balance + "입니다.");
}
}
public void showInfo() { // 잔액출력
System.out.println("현재 잔액은 " + balance + "입니다.");
}
/*
외부에서 balance 값을 받을 수 있는 메서드가 필요하다.
getter, setter 메서드
getter
변수 앞에 get이라는 단어를 붙인다.
매개변수는 선언하지 않아도 된다.
*/
public int getBalance() {
return balance;
}
public String getName() {
return name;
}
/*
setter 메서드 만들기
방어적 코드를 작성할 수 있다.
setter 메서드를 만들지 않는다면 접근 자체를 할 수 없다.
*/
public void setBalance(int setBal) {
if (setBal < 0) {
System.out.println("0 이하 값은 넣을 수 없습니다");
} else {
System.out.println("잔액을 " +setBal+ "원으로 조정했습니다.");
balance = setBal;
}
}
public void setName(String setNam) {
name = setNam;
}
}//end of class
package com.accesss;
public class AccessMainTest1 {
//main
public static void main(String[] args) {
Account acc1 = new Account();
acc1.deposit(10000);
acc1.withdraw(6000);
acc1.showInfo();
/*
접근 제어 지시자 Access Modifier
왜 사용하는가?
만약 후임개발자가
실수로 메서드를 통해 코드를 작성하지 않고
바로 멤버변수에 접근해서 수정하는 코드를 작성했다면?
실수할 수 있는 가능성이 있다.
만약 balance 변수에 대한 외부접근을 차단한다면?
외부에서는 오직 deposit, withdraw 메서드로만 접근 가능
이를 캡슐화 라고 한다.
*/
// acc1.balance = 10000; // 입금을 했다고 착각
// acc1.showInfo();
//getter 메서드 사용
int outerBalancer = acc1.getBalance();
System.out.println("현재 잔액은 " + outerBalancer + "입니다.");
System.out.println(acc1.getName());
// 멤버 변수 값을 초기화하지 않으면 String null로 초기화된다.
//setter 메서드 사용
acc1.setBalance(10);
acc1.showInfo();
}//end of main
}//end of class

'Java' 카테고리의 다른 글
| 메서드를 활용한 아기 밥주기 게임 (0) | 2025.04.16 |
|---|---|
| getter, setter메서드와 this 키워드 (0) | 2025.04.16 |
| 생성자를 호출해 클래스 상호작용 (0) | 2025.04.16 |
| 메서드를 개념을 활용한 커피머신 프로그램 (1) | 2025.04.16 |
| 생성자와 메서드를 활용해 class 사이 상호작용을 해본다 (0) | 2025.04.15 |