학습 목표
1. 접근 제어 지시자란?
2. 접근 제어 지시자에 종류를 알아 보자.
접근 제어자 - 정보 은닉, 캡슐화
객체의 각각의 상태값은 직접 변수를 통해서 변경하는 것이 아닌 기능(행위, 메서드)을 통해서 변경하게 설계 해야 한다.
접근 제어 지시자란?
클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
접근 제어 지시자에 종류를 알아 보자.
public —> 어디에서든 접근 가능 함.
default —> 같은 패키지 내에서 접근 가능
protected ← 상속 배운 이후
private —> 해당 .java 안에서만 접근이 가능하다.
시나리오 코드 1
package basic.ch10;
// 은행
public class Bank {
// 속성
// 아무것도 지정하지 않으면 default "제어 지시자"이다.
String name; // 기본값 : null
int balance;
// 입금하다.
public void deposit(int money) {
balance = balance + money;
showInfo();
} // end of deposit()
// 출금하다.
public int withdraw(int money) {
// 방어적 코드를 작성한다.
if(balance < money) {
System.out.println("잘못된 요청입니다.");
return 0;
}
balance = balance - money;
showInfo();
return money;
} // end of withdraw()
// 현재 은행 잔액을 출력 하다.
public void showInfo() {
System.out.println("현재 잔액은 : " + this.balance + " 입니다.");
} // end of showInfo()
} // end of class
package basic.ch10;
public class BankTest {
// 코드의 시작점
public static void main(String[] args) {
Bank bank1 = new Bank(); // 인스턴스 생성
bank1.name = "우리은행";
bank1.deposit(10_000);
int getMoney = bank1.withdraw(10_000); // return 타입 값이 money 이다.
System.out.println(">>>>>> 출금 >>>>>>>>"+getMoney);
System.out.println("금액 : " +getMoney);
} // end of main
} // end of class
private 사용, Getter 사용 , Setter 사용
package basic.ch10;
// 은행
public class Bank {
// 속성
// 아무것도 지정하지 않으면 default "제어 지시자"이다.
private String name; // 기본값 : null
// 정보 은닉 : 외부에서는 확인 안되어야 하는 중요한 변수를 감춘다.
private int balance; // 정보 은닉(private)
// 입금하다.
public void deposit(int money) {
balance = balance + money;
showInfo();
} // end of deposit()
// 출금하다.
public int withdraw(int money) {
// 방어적 코드를 작성한다.
if(balance < money) {
System.out.println("잘못된 요청입니다.");
return 0;
}
balance = balance - money;
showInfo();
return money;
} // end of withdraw()
// 현재 은행 잔액을 출력 하다.
public void showInfo() {
System.out.println("현재 잔액은 : " + this.balance + " 입니다.");
} // end of showInfo()
// 정보 은닉(private) 후에 getter, setter 메서드를 설계해 둘 수 있다.
// get 메서드란 단순히 객체의 상태 변수를 리턴(return)하는 메서드 이다.
// get 메서드를 사용 하려면 함수 이름에는 get+변수이름() 으로 시작한다.
// get 메서드에서는 private로 정보은닉 되어있는 값을 사용할 수 있다.
public int getBalance() {
return this.balance;
} // end of getBalance()
public String getName() {
return this.name;
} // end of getName()
// 멤버 변수에 접근해서 객체의 상태 값을 변경하게 하는 메서드 입니다.
// 상태 값만 변경하면 되기 때문에 (리턴 타입 없음)
public void setName(String inputName) {
this.name = inputName;
}
public void setBalance(int money) {
// 방어적 코드 작성하기
if(money < 0) {
System.out.println("잘못된 입력입니다.");
} else {
this.balance = money;
}
}
} // end of class
package basic.ch10;
public class BankTest {
// 코드의 시작점
public static void main(String[] args) {
Bank bank1 = new Bank(); // 인스턴스 생성
// bank1.name = "우리은행";
bank1.deposit(10_000);
int getMoney = bank1.withdraw(5_000); // return 타입 값이 money 이다.
System.out.println(">>>>>> 출금 >>>>>>>>"+getMoney);
System.out.println("금액 : " +getMoney);
// 신입 개발자가 실수로 멤버 변수에 접근해서 수정...
// Bank에 돈을 넣어야 --> deposit() 기능으로 만들어져 있다.
// bank1.balance = 100_000; <-- private 변경 후에 정보 은닉 되었다.
// 10만 5천원이 있어야 정상
// 의도 하지 않는 실수를 발생 시킬 수 있다.
bank1.deposit(100_000);
//bank1.showInfo();
// 실행의 흐름을 만들 예정
// 현재 은행에 전체 잔고가 200_000 이하라면 본점에 금액을 요청사항...
System.out.println(bank1.getBalance());
int money = bank1.getBalance();
if(money <= 200_000) {
System.out.println("본점에 금액을 요청해~");
}
// 은행 이름 바꾸기
bank1.setName("그린은행");
System.out.println(bank1.getName());
// 은행
bank1.setBalance(-1000000);
System.out.println(bank1.getBalance());
} // end of main
} // end of class
Getter Setter 를 사용하는 이유?
Setter 메서드
외부에서 메서드에 접근하여 조건에 맞을 경우 데이터 값을 변경할 수 있도록 한다.
멤버 변수에 접근해서 객체의 상태 값을 변경하게 하는 메서드 이다.
상태 값만 변경하면 되기 때문에 (리턴 타입 없음) --> void 사용

Getter 메서드
설정한 변수 값을 읽어오는 데 사용한다.
get 메서드란 단순히 객체의 상태 변수를 리턴(return) 하는 메서드 이다.
get 메서드에서는 private로 정보은닉 되어있는 값을 사용한다.

'Java' 카테고리의 다른 글
| 2024.04.18 ver 0.0.1 Starcraft (0) | 2024.04.18 |
|---|---|
| 2024.04.18 this 3가지 사용 방법 (0) | 2024.04.18 |
| 2024.04.16 객체지향 패러다임이란 (0) | 2024.04.16 |
| 클래스, 인스턴스, 함수, 생성자, 오버로딩 정의 (0) | 2024.04.16 |
| 2024.04.16 생성자(constructor) (0) | 2024.04.16 |