AR삽질러

이것이 자바다 - 6장 확인문제(클래스)-2 본문

JAVA

이것이 자바다 - 6장 확인문제(클래스)-2

아랑팡팡 2023. 2. 23. 23:32
728x90

12. 다음 클래스에서 해당 멤버가 필드, 생성자, 메소드 중 어떤 것인지 빈칸을 채우세요.

private String name;     필드

public Member(String name){  }  생성자

public void setName(String name){  }   메소드

 

13. 현실 세계의 회원을 Member클래스로 모델링하려고 합니다. 회원의 데이터로는 이름, 아이디, 패스워드, 나이가 있습니다. 이 데이터들을 가지는 Member클래스를 선언해보세요.

데이터 이름 필드 이름 타입
이름 name 문자열
아이디 id 문자열
패스워드 password 문자열
나이 age 정수
public class MemberServiceExample {
	public static void main(String[] args) {
		
		public class Member{
			// 작성위치
			String name;
			String id;
			String password;
			int age;
		}		
	}
}

 

14. 위에서 작성한 Member클래스에 생성자를 추가하려고 합니다. 다음과 같이 Member객체를 생성할때 name필드와 id필드를 외부에서 받은 값으로 초기화하려면 생성자를 어떻게 선언해야합니까?

public class MemberServiceExample {

	public class Member{
		// 작성위치
		String name;
		String id;
		String password;
		int age;
		
		Member(String name, String id){
			this.name = name;
			this.id = id;
		}
	}
}

 

15. MemberService클래스에 login()메소드와 logout()메소드를 선언하려고 합니다. login()메소드를 호출할때에는 매개값으로 id와 password를 제공하고, logout()메소드는 id만 매개값으로 제공합니다. MemberService클래스와 login(), logout() 메소드를 선언해보세요.

 1) login()메소드는 매개값 id가 "hong", 매개값 password가 "12345"일 경우에만 true로 리턴하고 그 이외의 값일 경우에는 false를 리턴하도록 하세요.

 2) logout() 메소드의 내용은 "로그아웃 되었습니다."가 출력되도록 하세요.

리턴 타입 메소드 이름 매개 변수(타입)
boolean login id(String), password(String)
void logout id(String)
public class MemberServiceExample {
	public static void main(String[] args) {
		MemberService memberService = new MemberService();
		boolean result = memberService.login("hong", "12345");
		if(result) {
			System.out.println("로그인되었습니다.");
			memberService.logout("hong");
		}else {
			System.out.println("id또는password가 올바르지 않습니다.");
		}
	}
}

정답 : 

public class MemberService {
	// 작성위치
	boolean login(String id, String password) {
		if("hong".equals(id) && "12345".equals(password)) {
			
			return true;
		}else {
			return false;
		}
	}
	
	void logout(String id) {
		System.out.println("로그아웃 되엇습니다.");
	}
}

 

16. PrinterExample클래스에서 Printer객체를 생성하고 println()메소드를 호출해서 매개값을 콘솔에 출력하려고 합니다. println()메소드의 매개값으로는 int, boolean, double, String값을 줄수 있습니다. Printer클래스에서 println()메소드를 선언해보세요.

public class PrinterExample {
	public static void main(String[] args) {
		Printer printer = new Printer();
		printer.println(10);
		printer.println(true);
		printer.println(5.7);
		printer.println("홍길동");
	}
}

정답 : 

public class Printer {
	// 작성위치
	void println(int n) {
		System.out.println(n);
	}
	
	void println(boolean n) {
		System.out.println(n);
	}
	
	void println(double n) {
		System.out.println(n);
	}
	
	void println(String n) {
		System.out.println(n);
	}
}

 

17. 16번 문제에서는 printer객체를 생성하고 println()메서드를 생성했습니다. Printer객체를 생성하지 않고 PrinterExample클래스에서 다음과 같이 호출하려면 Printer클래스를 어떻게 수정하면 될까요?

public class PrinterExample {
	public static void main(String[] args) {
		Printer.println(10);
		Printer.println(true);
		Printer.println(5.7);
		Printer.println("홍길동");
	}
}

정답 : 

public class Printer {
	// 작성위치
	static void println(int n) {
		System.out.println(n);
	}
	
	static void println(boolean n) {
		System.out.println(n);
	}
	
	static void println(double n) {
		System.out.println(n);
	}
	
	static void println(String n) {
		System.out.println(n);
	}
}

 

18. ShopService 객체를 싱글톤으로 만들고 싶습니다. ShopServiceExample클래스에서 ShopService의 getInstance()메소드로 싱글톤을 얻을 수 있도록 ShopService클래스를 작성해보세요.

public class ShopServiceExample {
	public static void main(String[] args) {
		ShopService obj1 = ShopService.getInstance();
		ShopService obj2 = ShopService.getInstance();
		
		if(obj1 == obj2) {
			System.out.println("같은 ShopService객체입니다.");
		}else {
			System.out.println("다른 ShopService객체입니다.");
		}
	}
}

정답 : 

public class ShopService {
	// 작성위치
	private static ShopService shopService = new ShopService();
	
	// 생성자
	private ShopService() {}
	
	// 정적 메소드
	static ShopService getInstance() {
		return shopService;
	}
	
}

 

19. 은행계좌객체인 Account객체는 잔고(balance) 필드를 가지고 있습니다. balance필드는 음수값이 될 수 없고, 최대 백만원까지만 저장할 수 있습니다. 외부에서 balance필드를 마음대로 변경하지 못하도록 하고, 0 <= balance <= 1,000,000범위의 값만 가질 수 있도록 Account클래스를 작성해보세요.

 1) Setter와 Getter를 이용하세요.

 2) 0과 1,000,000은 MIN_BALANCE와 MAX_BALANCE상수를 선언해서 이용하세요.

 3) Setter의 매개값이 음수이거나 백만원을 초과하면 현재 balance값을 유지하세요.

public class AccountExample {
	public static void main(String[] args) {
		Account account = new Account();
		
		account.setBalance(10000);
		System.out.println("현재 잔고 : " + account.getBalance());
		
		account.setBalance(-100);
		System.out.println("현재 잔고 : " + account.getBalance());
		
		account.setBalance(2000000);
		System.out.println("현재 잔고 : " + account.getBalance());
		
		account.setBalance(300000);
		System.out.println("현재 잔고 : " + account.getBalance());
	}
}

정답 : 

public class Account {
	// 작성위치
	public static final int MIN_BALANCE = 0;
	public static final int MAX_BALANCE = 1000000;
	
	private int balance;

	public int getBalance() {
		return balance;
	}

	public void setBalance(int balance) {
		if(balance < Account.MIN_BALANCE || balance > Account.MAX_BALANCE){
			return;
		}
		this.balance = balance;
	}
}

 

20 .다음은 키보드로부터 계좌 정보를 입력받아서 계좌를 관리하는 프로그램 입니다. 실행결과를 보고 알맞게 BankApplication클래스의 메소드를 작성해보세요.

public class Account {
	private String ano;
	private String owner;
	private int balance;
	
	public Account(String ano, String owner, int balance) {
		this.ano = ano;
		this.owner = owner;
		this.balance = balance;
	}
	
	public String getAno() {return ano;}
	public void setAno(String ano) {this.ano = ano;}
	public String getOwner() {return owner;}
	public void setOwner(String owner) {this.owner = owner;}
	public int getBalance() {return balance;}
	public void setBalance(int balance) {this.balance = balance;}
}
public class BankApplication {
	
	private static Account[] accountArray = new Account[100];
	private static Scanner scanner = new Scanner(System.in);
	
	public static void main(String[] args) {
		boolean run = true;
		while(run) {
			System.out.println("-----------------------------------------");
			System.out.println("1.계좌생성 | 2.계좌목록 | 3.예금 | 4.출금 | 5.종료");
			System.out.println("-----------------------------------------");
			System.out.print("선택> ");
			
			int selectNo = scanner.nextInt();
			
			if(selectNo == 1) {
				createAccount();
			}else if(selectNo == 2) {
				accountList();
			}else if(selectNo == 3) {
				deposit();
			}else if(selectNo == 4) {
				withdraw();
			}else if(selectNo == 5) {
				run = false;
			}
		}
		System.out.println("프로그램 종료");
	}
	
	// 계좌 생성하기
	private static void createAccount() {
		// 작성위치
		
	}
	
	// 계좌목록보기
	private static void accountList() {
		// 작성위치
	}
	
	// 예금하기
	private static void deposit() {
		// 작성위치
	}
	
	// 출금하기
	private static void withdraw() {
		// 작성위치
	}
	
	// Account 배열에서 ano와 동일한 Account객체 찾기
	private static Account findAccount(String ano) {
		// 작성위치
	}
}

정답 : 

public class BankApplication {
	
	private static Account[] accountArray = new Account[100];
	private static Scanner scanner = new Scanner(System.in);
	
	public static void main(String[] args) {
		boolean run = true;
		while(run) {
			System.out.println("-----------------------------------------");
			System.out.println("1.계좌생성 | 2.계좌목록 | 3.예금 | 4.출금 | 5.종료");
			System.out.println("-----------------------------------------");
			System.out.print("선택> ");
			
			int selectNo = scanner.nextInt();
			
			if(selectNo == 1) {
				createAccount();
			}else if(selectNo == 2) {
				accountList();
			}else if(selectNo == 3) {
				deposit();
			}else if(selectNo == 4) {
				withdraw();
			}else if(selectNo == 5) {
				run = false;
			}
		}
		System.out.println("프로그램종료");
	}
	
	// 계좌 생성하기
	private static void createAccount() {
		// 작성위치
		System.out.println("---------");
		System.out.println("계좌생성");
		System.out.println("---------");
		
		System.out.print("계좌번호 : ");
		String ano = scanner.next();
		
		System.out.print("계좌주 : ");
		String owner = scanner.next();
		
		System.out.print("초기입금액 : ");
		int balance = scanner.nextInt();
		
		Account newAccount = new Account(ano, owner, balance);
		for(int i = 0; i < accountArray.length; i++) {
			if(accountArray[i] == null) {
				accountArray[i] = newAccount;
				System.out.println("결과 : 계좌가 생성되었습니다.");
				break;
			}
		}
	}
	
	// 계좌목록보기
	private static void accountList() {
		// 작성위치
		System.out.println("---------");
		System.out.println("계좌목록");
		System.out.println("---------");
		
		for(int i = 0; i < accountArray.length; i++) {
			Account account = accountArray[i];
			if(account != null) {
				System.out.print(account.getAno());
				System.out.print("  ");
				System.out.print(account.getOwner());
				System.out.print("  ");
				System.out.print(account.getBalance());
				System.out.println();
			}
		}

	}
	
	// 예금하기
	private static void deposit() {
		// 작성위치
		System.out.println("---------");
		System.out.println("예금");
		System.out.println("---------");
		
		System.out.print("계좌번호 : ");
		String ano = scanner.next();
		
		System.out.print("예금액 : ");
		int money = scanner.nextInt();
		
		Account account = findAccount(ano);
		if(account == null) {
			System.out.println("결과 : 계좌가 없습니다.");
			return;
		}
		account.setBalance(account.getBalance() + money);
		System.out.println("결과 : 예금이 성공되었습니다.");
	}
	
	private static Account findAccount(String ano) {
		Account account = null;
		for(int i = 0; i < accountArray.length; i++) {
			if(accountArray[i] != null) {
				String dbAno = accountArray[i].getAno();
				if(dbAno.equals(ano)) {
					account = accountArray[i];
					break;
				}
			}
		}
		return account;
	}

	// 출금하기
	private static void withdraw() {
		// 작성위치
		System.out.println("---------");
		System.out.println("계좌출금");
		System.out.println("---------");
		
		System.out.print("계좌번호 : ");
		String ano = scanner.next();
		
		System.out.print("출금액 : ");
		int money = scanner.nextInt();
		
		Account account = findAccount(ano);
		if(account == null) {
			System.out.println("결과 : 계좌가 없습니다.");
			return;
		}
		account.setBalance(account.getBalance() - money);
		System.out.println("결과 : 출금이 성공되었습니다.");
	}
}
728x90
반응형
LIST