JAVA

[Java] Class 연습

sagesse2021 2021. 10. 28. 17:17
반응형
public class Test {

	public static void main(String[] args) {
		// Person 클래스의 인스턴스(p) 생성
		// 이름 : 홍길동, 나이 : 20, 배고픔 : false 값 저장
		Person p = new Person();
		// 외부의 다른 클래스에서 Person 클래스의 인스턴스에 접근하기 위해서는 
		// 참조변수 p를 통해 접근 필수!
		p.name = "홍길동";
		p.age = 20;
		p.isHungry = false;
//		System.out.println("이름 : " + p.name);
//		System.out.println("나이 : " + p.age);
//		System.out.println("배고픔 : " + p.isHungry);
		
		// 참조변수 p를 통해 멤버변수는 물론 메서드까지 접근 가능
		p.showPersonInfo();
		
		p.talk();
		p.eat("짬뽕");
	}

} // Test 클래스 끝

/*
 * Person 클래스 정의
 * [ 멤버변수(인스턴스변수) 선언 ]
 * - 이름(name, String)
 *   나이(age, int)
 *   배고픔(isHungry, boolean)
 *   
 * [ 메서드 정의 ]
 * - 이름, 나이, 배고픔을 출력하는 showPersonInfo() 메서드
 *   (매개변수 없음, 리턴값 없음)
 *   
 * - 밥먹는 기능을 수행하는 eat() 메서드
 *   (매개변수 : 음식이름(foodName, 문자열), 리턴값 없음)
 *   => "XXX 먹기!" 출력
 *   => 멤버변수 isHungry 의 값을 false 로 변경
 *   
 * - 말하는 기능을 수행하는 talk() 메서드
 *   (매개변수 없음, 리턴값 없음)
 *   => "말하기!" 출력
 *   => 멤버변수 isHungry 의 값을 true 로 변경
 */
class Person {
	// 멤버변수(인스턴스변수) 선언
	String name;
	int age;
	boolean isHungry; // true : 배고픔, false : 배고프지 않음
	
	public void showPersonInfo() {	
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("배고픔 : " + isHungry);
	}
	
	// 밥먹기 기능
	public void eat(String foodName) {
		System.out.println(foodName + " 먹기!");
		// isHungry 변수의 값을 false 로 변경(배고프지 않음)
		isHungry = false;
		System.out.println("식사 후 배고픔 : " + isHungry);
	}
	
	// 말하기 기능
	public void talk() {
		System.out.println("말하기!");
		// isHungry 변수의 값을 true 로 변경(배고픔)
		isHungry = true;
		System.out.println("말한 후 배고픔 : " + isHungry);
	}
	
}
public class Test2 {

	public static void main(String[] args) {
		// 은행계좌(Account) 클래스의 인스턴스(acc) 생성
		Account acc = new Account();
		acc.accountNo = "111-1111-111";
		acc.ownerName = "홍길동";
		acc.balance = 10000;
		acc.showAccountInfo();
		System.out.println("----------");
		acc.deposit(999999);
		acc.deposit(500);
		System.out.println("----------");
		// 현재잔고보다 적거나 같은 금액을 출금하는 경우(출금 가능)
		int money = acc.withdraw(50000);
		System.out.println("출금된 금액 : " + money + "원");
		
		// 현재잔고보다 많은 금액을 출금하는 경우(출금 불가)
		money = acc.withdraw(50000000);
		System.out.println("출금된 금액 : " + money + "원");
		
	}

}

/*
 * 은행계좌(Account) 클래스 정의
 * [ 멤버변수 선언 ]
 * - 계좌번호(accountNo, 문자열)
 * - 예금주명(ownerName, 문자열)
 * - 현재잔고(balance, 정수)
 * 
 * [ 메서드 정의 ]
 * - 계좌번호, 예금주명, 현재잔고를 출력하는 showAccountInfo() 메서드
 *   ex) 계좌번호 : 111-1111-111
 *       예금주명 : 홍길동
 *       현재잔고 : 10000원
 *       
 * - 입금 기능을 수행하는 deposit() 메서드
 *   => 입금할 금액(amount, 정수)을 전달받아 현재잔고(balance)에 누적한 후
 *      입금된 금액과 입금 후 현재잔고를 출력
 *      ex) "입금하신 금액    : XXXXX원"
 *          "입금 후 현재잔고 : XXXXX원"
 *   => 단, 리턴값은 없음
 * 
 * - 출금 기능을 수행하는 withdraw() 메서드
 *   => 출금할 금액(amount, 정수)를 전달받아 현재잔고(balance)에서 차감한 후
 *      출금될 금액과 출금 후 현재잔고를 출력
 *      ex) "출금할 금액      : XXXXX원"
 *          "출금 후 현재잔고 : XXXXX원"
 *   => 단, 출금 기능을 수행하기 전 현재잔고와 출금할 금액을 비교하여
 *      현재잔고가 출금할 금액보다 적을 경우 출금을 수행하지 않고 다음과 같이 출력
 *      ex) "잔고가 부족하여 출금이 불가능합니다."
 *          "출금할 금액 : XXXXX원, 현재잔고 : XXXXX원"
 *   => 리턴값 있음(출금할 금액에 해당하는 금액 리턴)       
 */
class Account {
	String accountNo;
	String ownerName;
	int balance;
	
	public void showAccountInfo() {
		System.out.println("계좌번호 : " + accountNo);
		System.out.println("예금주명 : " + ownerName);
		System.out.println("현재잔고 : " + balance + "원");
	}
	
	// 입금기능
	public void deposit(int amount) {
		// 전달받은 입금금액(amount)를 현재잔고(balance)에 누적 후 출력
		balance += amount;
		System.out.println("입금하신 금액    : " + amount + "원");
//		System.out.println("입금 후 현재잔고 : " + balance + "원");
		showAccountInfo();
	}
	
	// 출금기능
	public int withdraw(int amount) {
		// 입력받은 출금금액(amount)을 현재잔고(balance)에서 차감 후
		// 출금되는 금액(amount)을 리턴
		// 단, 현재잔고가 출금금액보다 적을 경우 출금 불가
		if(balance < amount) { // 현재잔고가 출금금액보다 적은지 판별(출금불가)
			System.out.println("잔고가 부족하여 출금이 불가능합니다.");
			System.out.println(
					"출금할 금액 : " + amount + "원, 현재잔고 : " + balance + "원");
			// return 타입이 int 이므로 반드시 리턴값 필수! => 0원 리턴
//			return 0;
			
			amount = 0;
		} else { // 출금이 가능할 경우(현재잔고 >= 출금금액)
			balance -= amount;
			System.out.println("출금할 금액 : " + amount + "원");
			System.out.println("출금 후 현재잔고 : " + balance + "원");
			
//			return amount; // 출금금액 리턴
		}
		
		return amount;
		
		
		// if 문 내에서 출금 실패 시 return 문에 의해 메서드를 종료하므로
		// 출금이 가능한 경우의 코드는 else 문이 없어도 상관없다!
//		if(balance < amount) { // 현재잔고가 출금금액보다 적은지 판별(출금불가)
//			System.out.println("잔고가 부족하여 출금이 불가능합니다.");
//			System.out.println(
//					"출금할 금액 : " + amount + "원, 현재잔고 : " + balance + "원");
//			// return 타입이 int 이므로 반드시 리턴값 필수! => 0원 리턴
//			return 0;
//		} 
//		
//		balance -= amount;
//		System.out.println("출금할 금액 : " + amount + "원");
//		System.out.println("출금 후 현재잔고 : " + balance + "원");
//		
//		return amount; // 출금금액 리턴
		
	}
	
	
}
반응형

'JAVA' 카테고리의 다른 글

[Java] Getter / Setter 메서드  (0) 2021.10.28
[Java] 접근제한자  (0) 2021.10.28
[Java] Class  (0) 2021.10.28
[Java] 객체지향(Method)  (0) 2021.10.28
[Java] 배열 테스트 문제  (0) 2021.10.28