public class P2_privateAccountEx {
public static void main(String[] args) {
Test2 t2 = new Test2();
t2.a = 10;
// t2.b = 20; --> 컴파일 오류가 생김.
t2.c = 30;
// t2.process1(); --> 컴파일 오류가 생김.
t2.process2();
// =================== 계좌관리 ===========================
// Account a1 = new Account(); // 한조의 계좌 생성
// a1.name = "한조";
//
// Account a2 = new Account(); // 트레의 계좌 생성
// a2.name = "트레";
// a1.balance += 10000; // 한조가 만원 입금함
// a1.balance -= 5000; // 한조가 오천원 출금함
// System.out.println("한조 계좌의 남은 돈 : " + a1.balance);
//
//
// if(a1.balance > 1000000) {
//
// a1.balance -= 1000000; // 출금은 잔액보다 많을 경우에만 할 수 있겠지...
// }
// System.out.println("한조 계좌의 남은 돈 : " + a1.balance);
// =================== 계좌관리2 ===========================
Account a1 = new Account("한조", 30000);
Account a2 = new Account("트레", 10000);
// a1.balance ----> private로 걸려있는 속성이기 때문에 만드는것 조차 안된다.
}
}
class Test2{
// 1. 인스턴스 생성
// 문법 제어자
public int a;
private int b;
int c;
// public : 어떤 클래스의 인스턴스나 다른 클래스에서도 해당 멤버에 접근할 수 있음
// private : 다른 클래스나 외부에서는 직접 접근할 수 없으며,
// 해당 멤버에 접근하려면 해당 클래스의 메소드를 통해 간접적으로 접근해야 함
// 정답 : 모든 필드는 private여야한다. 그냥 답정너 ★★★★
private int A;
private int B;
private int C;
// ★ 캡슐화와 정보 은닉: 내가 쓸 코드와, 남이 사용할 코드를 구분할 수 있게 하는 것이 중요하다....★★★
// 클래스의 내부 구현 세부사항을 외부로부터 숨기는 것이 중요
// private 접근 제어자를 사용하면 클래스의 내부 동작과 구조를 외부에서 직접 접근할 수 없게 되므로,
// 내부 구현 변경 시 외부 코드에 영향을 덜 주고 유연한 변경이 가능해짐!!!!
// 이는 클래스의 내부 동작을 수정하더라도 외부 코드에 영향을 최소화하여 유지보수를 용이하게 함
private void process1(){
}
public void process2() {
}
}
class Account {
private String name; // 예금주명 ---> 내가 컨트롤 해야하는 속성.
// 무조건 999999% private로 사용하기
private int balance; // 잔액
public Account(String name, int balance) { // ---> 생성자는 무조건 public
this.name = name;
this.balance = balance;
}
// 입금
public void deposit(int value) { // 외부에서 날아온 값을 value로 받아서
balance += value; // 잔액에 더할게
}
// 출금 가능한지 확인 --> 출금할때 불러서 쓸 수 있겠지
private boolean isWithdrawImpossible(int value) {
// 출금 불가능 여부는 굳이 외부에서 알 필요는 없지.
// @ 기교
//
// 1)
// String aaa = null;
//
// if(value > 10) {
// aaa = "안녕";
// }else {
// aaa = "반가웡";
// }
// 2)
// aaa = value > 10 ? "안녕" : "반갑";
// value > 10이 true면 안녕, false면 반갑 --> 1), 2)가 같긴한데, 안해도된다!!~!!
return balance < value ? true : false;
// 출금 불가능한지를 구하는 boolean 메소드니까, 잔액이 부족하면 참이겠지.
// if(balance > value) {
// return true
// }else {
// return false
// }
}
// 출금
public void withdraw(int value) {
if(isWithdrawImpossible(value)) { // 출금 불가능한지 확인하는 메소드 호출
System.out.println("경고] 잔액이 부족합니다.");
return; // 돌려보내! 돈못뽑는다고!!!
}
balance -= value;
}
// 정보확인
public void printInfo() {
// 남이 사용하는 API니까 public -> 만약 나만 확인하는 정보였으면 private겠지
System.out.println(name + "님의 계좌의 잔액 : " + balance + "원 입니다.");
}
}
'JAVA > DAY 12 _ 23.09.01' 카테고리의 다른 글
move memory (0) | 2023.09.10 |
---|