본문 바로가기

JAVA/DAY 12 _ 23.09.01

class study - Private Account

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