1. 객체와 클래스에 대한 설명으로 틀린 것은 무엇입니까? (3)

① 클래스는 객체를 생성하기 위한 설계도(청사진)와 같은 것이다.

new 연산자로 클래스의 생성자를 호출함으로써 객체가 생성된다.

③ 하나의 클래스로 하나의 객체만 생성할 수 있다. -> 하나 이상 생성할 수 있다.

④ 객체는 클래스의 인스턴스이다.

 

2. 클래스의 구성 멤버가 아닌 것은 무엇입니까? (4)

① 필드 (field)

② 생성자 (constructor)

③ 메소드 (method)
로컬 변수 (local variable)

 

3. 필드, 생성자, 메소드에 대한 설명으로 틀린 것은 무엇입니까? (4)

① 필드는 객체의 데이터를 저장한다.

② 생성자는 객체의 초기화를 담당한다.

③ 메소드는 객체의 동작 부분으로, 실행 코드를 가지고 있는 블록이다.

클래스는 반드시 필드와 메소드를 가져야 한다. -> 반드시 가져야하는 것은 아님

 

4. 필드에 대한 설명으로 틀린 것은 무엇입니까? (3)

① 필드는 메소드에서 사용할 수 있다.

② 인스턴스 필드 초기화는 생성자에서 할 수 있다.

필드는 반드시 생성자 선언 전에 선언되어야 한다. -> 필드는 생성자 선언 이후에 선언되어도 된다.

④ 필드는 초기값을 주지 않더라도 기본값으로 자동 초기화된다.

 

5. 생성자에 대한 설명으로 틀린 것은 무엇입니까? (1)

객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다. -> 생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다.

② 생성자는 다른 생성자를 호출하기 위해 this()를 사용할 수 있다.

③ 생성자가 선언되지 않으면 컴파일러가 기본 생성자를 추가한다.

④ 외부에서 객체를 생성할 수 없도록 생성자에 private 접근 제한자를 붙일 수 있다.

 

6. 메소드에 대한 설명으로 틀린 것은 무엇입니까? (4)

① 리턴값이 없는 메소드는 리턴 타입을 void로 해야 한다.

② 리턴 타입이 있는 메소드는 리턴값을 지정하기 위해 반드시 return 문이 있어야 한다.

③ 매개값의 수를 모를 경우 "..."을 이용해서 매개 변수를 선언할 수 있다.

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

 

7. 메소드 오버로딩에 대한 설명으로 틀린 것은 무엇입니까? (2)

① 동일한 이름의 메소드를 여러 개 선언하는 것을 말한다.

반드시 리턴 타입이 달라야 한다. -> 반드시 달라야 하는 것은 아니다.

③ 매개 변수의 타입, 수, 순서를 다르게 선언해야 한다. 

④ 매개값의 타입 및 수에 따라 호출될 메소드가 선택된다.

 

8. 인스턴스 멤버와 정적 멤버에 대한 설명으로 틀린 것은 무엇입니까? (2)

① 정적 멤버는 static으로 선언된 필드와 메소드를 말한다.

인스턴스 필드는 생성자 및 정적 블록에서 초기화될 수 있다. -> 인스턴스 필드 - 생성자 / 정적 필드 - 정적 블록

③ 정적 필드와 정적 메소드는 객체 생성 없이 클래스를 통해 접근할 수 있다.

④ 인스턴스 필드와 메소드는 객체를 생성하고 사용해야 한다.

 

9. final 필드와 상수(static final)에 대한 설명으로 틀린 것은 무엇입니까? (2)

① final 필드와 상수는 초기값이 저장되면 값을 변경할 수 없다.

final 필드와 상수는 생성자에서 초기화될 수 있다. -> 상수(static final) - 정적 블록에서 초기화한다.

③ 상수의 이름은 대문자로 작성하는 것이 관례이다.

④ 상수는 객체 생성 없이 클래스를 통해 사용할 수 있다.

 

10. 패키지에 대한 설명으로 틀린 것은 무엇입니까? (4)

① 패키지는 클래스들을 그룹화시키는 기능을 한다.

② 클래스가 패키지에 소속되려면 패키지 선언을 반드시 해야한다.

③ import문은 다른 패키지의 클래스를 사용할 때 필요하다.

mycompany 패키지에 소속된 클래스는 yourcompany에 옮겨 놓아도 동작한다. -> 다른 패키지에서는 동작하지 않는다.

 

11. 접근 제한에 대한 설명으로 틀린 것은 무엇입니까? (3)

① 접근 제한자는 클래스, 필드, 생성자, 메소드의 사용을 제한한다.

② public 접근 제한은 아무런 제한 없이 해당 요소를 사용할 수 있게 한다.

default 접근 제한은 해당 클래스 내부에서만 사용을 허가한다. -> 해당 패키지 내부에서만 사용 허가

④ 외부에서 접근하지 못하도록 하려면 private 접근 제한을 해야 한다.

 

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

public class Member {
	private String name; //필드
    
    public Member(String name) { //생성자
    
    }    
	public void setName(String name) { //메소드
    
    }
}

 

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

package exercise;

public class Member {
	//필드
	String name;
	String id;
	String password;
	int age;
}

 

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

Member user1 = new Member ("홍길동", "hong");

Member user2 = new Member ("강자바", "java");

package exercise;

public class Member {
	//필드
	String name;
	String id;
	String password;
	int age;
	
	//생성자
	Member(String name, String id) {
		this.name = name;
		this.id = id;
	}
	
	public static void main(String[] args) {
		Member user1 = new Member("홍길동", "hong");
		Member user2 = new Member("강자바", "java");
	}
}

 

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

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

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

package verify_YJ.Exercise15;

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("로그아웃 되었습니다.");
	}
}
package verify_YJ.Exercise15;

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가 올바르지 않습니다.");
		}
	}
}
로그인 되었습니다.
로그아웃 되었습니다.

 

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

package exercise.Exercise16;

public class Printer {
	//메소드
	int println(int value) {
		System.out.println(value);
		return value;
	}
	boolean println(boolean value) {
		System.out.println(value);
		return value;
	}
	double println(double value) {
		System.out.println(value);
		return value;
	}
	String println(String value) {
		System.out.println(value);
		return value;
	}
}
package verify_YJ.Exercise16;

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("홍길동");		
	}
}
10
true
5.7
홍길동

 

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

package exercise.Exercise17;

public class Printer {
	//메소드
	static int println(int value) {
		System.out.println(value);
		return value;
	}
	static boolean println(boolean value) {
		System.out.println(value);
		return value;
	}
	static double println(double value) {
		System.out.println(value);
		return value;
	}
	static String println(String value) {
		System.out.println(value);
		return value;
	}
}
package verify_YJ.Exercise17;

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

 

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

package exercise;

public class ShopService {
	//필드
	private static ShopService singleton = new ShopService();
	
	//생성자
	private ShopService() {
		
	}
	
	//메소드
	static ShopService getInstance() {
		return singleton;
	}
	
}
package exercise;

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 객체 입니다.");
		}
	}
}
같은 ShopService 객체 입니다.

 

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

① Setter와 Getter를 이용하세요.

② 0과 1,000,000은 MIN_BALANCE와 MAX_BALANCE 상수를 선언해서 사용해보세요.

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

package verify_YJ.Exercise19;

public class Account {
	//필드
	private int balance;
	final static int MIN_BALANCE = 0;
	final static int MAX_BALANCE = 1000000;

	//생성자
	//메소드
	public int getBalance() {
		return balance;
	}

	public void setBalance(int balance) {
		if(balance >= MIN_BALANCE & balance <= MAX_BALANCE) {
			this.balance = balance;
		} 
	}
}
package verify_YJ.Exercise19;

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());
	}
}
현재 잔고: 10000
현재 잔고: 10000
현재 잔고: 10000
현재 잔고: 300000

 

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

package verify_YJ.Exercise20;

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;
	}
}
package verify_YJ.Exercise20;

import java.util.Scanner;

public class BankApplication {
	private static Account[] accountArray = new Account[100];
    //main 메소드에서 객체 생성없이 바로 사용하기 위해 static으로 생성
    //Account 객체를 여러 개(100개) 저장하기 위해 accountArray라는 배열 생성
	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); //위 항목이 포함된 newAccount 객체 생성
		for(int i=0; i<accountArray.length; i++) { //newAccount 항목들을 배열에 저장
			if(accountArray[i] == null) { 
				accountArray[i] = newAccount; //accountArray 배열 중 비어있는(null) 곳에 먼저 저장
				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]; //배열에 저장 되어있는 account 객체 가져오기
			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(); //money 변수 생성 : 입력받을 예금액
		Account account = findAccount(ano); //맨 아래 findAccount 메소드 참고
		if(account != null) {
			account.setBalance(account.getBalance() + money); //기존 잔고(balance)에 money(예금액) 더하기
			System.out.println("결과: 예금이 성공되었습니다.");
		} else {
			System.out.println("결과: 계좌가 없습니다.");
			return;
		}
	}
	
	//출금하기
	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(); //money 변수 생성 : 입력받을 출금액
		Account account = findAccount(ano);
		if(account != null) {
			account.setBalance(account.getBalance() - money); //기존잔고 - 출금액
			System.out.println("결과: 출금이 성공되었습니다.");
		} else {
			System.out.println("결과: 계좌가 없습니다.");
			return;
		}
	}
	
	//Account 배열에서 해당 계좌번호 정보 가져오기
	private static Account findAccount(String ano) {
		Account account = null; //account 변수 선언
		for(int i=0; i<accountArray.length; i++) {
			if(accountArray[i] != null) {
				if(ano.equals(accountArray[i].getAno())) { //findAccount의 ano 변수의 값이 accountArray 내 ano 값과 같다면
					account = accountArray[i];
					break;
				}
			}
		}
		return account;
	}	
}
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 1
--------------
계좌생성
--------------
계좌번호: 111-111
계좌주: hong
초기입금액: 10000
결과: 계좌가 생성되었습니다.
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 1
--------------
계좌생성
--------------
계좌번호: 111-222
계좌주: kang
초기입금액: 20000
결과: 계좌가 생성되었습니다.
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 2
--------------
계좌목록
--------------
111-111    hong    10000
111-222    kang    20000
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 3
--------------
예금
--------------
계좌번호: 111-111
예금액: 5000
결과: 예금이 성공되었습니다.
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 4
--------------
출금
--------------
계좌번호: 111-222
출금액: 3000
결과: 출금이 성공되었습니다.
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 2
--------------
계좌목록
--------------
111-111    hong    15000
111-222    kang    17000
-------------------------------------------------
1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료
-------------------------------------------------
선택> 5
프로그램 종료

+ Recent posts