JAVA

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

Adev 2022. 9. 16. 22:56

1. 객체와 클래스 - 객체란 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말하고, 클래스란 객체를 만들기 위한 설계도를 의미한다.

답 : 3

하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있다.

//클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.



2. 클래스의 구성 멤버 - 필드, 생성자 그리고 메소드가 있다.

답 : 4

 


3. 필드, 생성자, 메소드 - 필드는 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳이고, 생성자는 객체 생성 시 초기화를 담당한다. 메소드는 필드를 읽고 수정하는 역할도 하지만, 다른 객체를 생성해서 다양한 기능을 수행한다.

답 : 4

클래스의 구성 멤버들은 생략되거나 복수 개가 작성될 수 있다.



4. 필드 - 객체의 현재 상태 데이터를 저장하는 곳이다.

답 : 3

필드는 클래스 중괄호 {} 블록 어디서든 선언될 수 있다.



5. 생성자 - new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 떄 호출되어 객체의 초기화를 담당한다.

답 : 1

객체를 생성하려면 생성자의 호출이 반드시 필요하다.



6. 메소드 - 객체의 동작에 해당하는 중괄호 {} 블록을 말한다. 

답 : 4

메소드의 이름은 중복해서 선언할 수 있다.

//클래스 내에 메소드의 이름을 중복해서 선언하는 것을 메소드 오버로딩이라고 한다.



7. 메소드 오버로딩 - 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것이다.

답 : 2

오버로딩된 메소드를 호출할 경우 JVM은 매개값의 타입을 보고 메소드를 선택한다. 리턴 타입은 아무런 도움을 주지 못한다.



8. 인스턴스 멤버와 정적 멤버 - 인스턴스 멤버는 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드(인스턴스 필드, 인스턴스 메소드)를 말한다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드(정적 필드, 정적 메소드)를 말한다.

답 : 2

인스턴스 필드는 생성자에서는 초기화될 수 있지만 정적 블록에서는 초기화될 수 없다.

//인스턴스 필드와 메소드는 객체에 소속된 멤버이기 때문에 객체없이는 사용할 수 없다.



9. final 필드와 상수(static final) - final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다. 상수는 불변의 값을 저장하는 필드이다.

답 : 2

final 필드는 생성자에서 초기화 될 수 있지만 상수는 생성자에서 초기화 될 수 없다.

//final 필드의 초기값을 줄 수 있는 방법은 필드 선언 시에 주는 방법과 생성자에서 주는 방법이 있다.

//상수는 객체가 생성되기 이전에 완성된다. 초기값이 단순 값이라면 선언 시에 주는 것이 일반적이지만, 복잡한 초기화일 경우 정적 블록에서도 할 수 있다.



10. 패키지 - 클래스를 체계적으로 관리하기 위해 사용되는 것으로 물리적인 형태는 파일 시스템의 폴더이다.

답 : 4

클래스만 따로 복사해서 다른 곳으로 이동하면 클래스는 사용할 수 없다.

//클래스만 따로 복사해서 다른 곳으로 이동하면 클래스는 사용할 수 없다. 클래스를 이동할 경우에는 패키지 전체를 이동시켜야 한다.

//같은 패키지에 속하는 클래스들은 아무런 조건 없이 다른 클래스를 사용할 수 있지만 다른 패키지에 속하는 클래스를 사용하려면 패키지와 클래스를 모두 기술하거나 import문을 사용해야 한다.

 


11. 접근 제한자 - public, protected, default, private와 같이 네가지 종류가 있다.

답 : 3

default 접근 제한은 같은 패키지 내부에서만 사용을 허가한다.



12.

답 : 필드 -> 생성자 -> 메소드

 


13. 

package verify.exam13;

public class Member2 {
	String name;
	String id;
	String password;
	int age;
}

 


14. 

package verify.exam14;

public class Member2 {
	String name;
	String id;
	String password;
	int age;
	
	Member2(String name, String id) {
		this.name = name;
		this.id = id;
	}
}



15. 

package verify.exam15;

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



16. 

package verify.exam16;

public class Printer2 {
	void println(int value) {
	System.out.println(value);
	}
	void println(boolean value) {
		System.out.println(value);
	}
	
	void println(double value) {
		System.out.println(value);
	}
	
	void println(String value) {
		System.out.println(value);
	}
}



17. 

package verify.exam17;

public class Printer2 {
	static void println(int value) {
		System.out.println(value);
	}
	
	static void println(boolean value) {
		System.out.println(value);
	}
	
	static void println(double value) {
		System.out.println(value);
	}
	
	static void println(String value) {
		System.out.println(value);
	}
}



18. 싱글톤 - 전체 프로그램에서 단 하나만 생성되는 객체이다.

package verify.exam18;

public class ShopService2 {
	private static ShopService2 singleton = new ShopService2();
	
	private ShopService2() {}
	
	static ShopService2 getInstance() {
		return singleton;
	}
}



19. Getter와 Setter 메소드 - 객체 외부에서 객체 데이터에 직접 접근하는 것을 막는 역할을 한다. Getter 메소드는 필드값을 가공한 후 외부로 전달하고, Setter 메소드는 데이터는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도한다.

package verify.exam19;

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. 

package verify.exam20;

import java.util.Scanner;

public class BankApplication2 {
	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.println("계좌번호: ");
		String ano = scanner.next();
		System.out.println("계좌주: ");
		String owner = scanner.next();
		System.out.println("초기입금액: ");
		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.println("계좌번호: ");
		String ano = scanner.next();
		System.out.println("예금액: ");
		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 void withdraw() {
		System.out.println("------------------");
		System.out.println("출금");
		System.out.println("------------------");
		System.out.println("계좌번호: ");
		String ano = scanner.next();
		String owner = scanner.next();
		System.out.println("출금액: ");
		int money = scanner.nextInt();
		Account account = findAccount(ano);
		if(account == null) {
			System.out.println("결과: 계좌가 없습니다.");
			return;
		}
		account.setBalance(account.getBalance() - money);
		System.out.println("결과: 출금이 성공되었습니다.");
	}	
	
	//Account 배열에서 ano와 동일한 Account 객체 찾기
	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;
		}
}