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;
}
}
'JAVA' 카테고리의 다른 글
이것이 자바다 18장 확인 문제 풀이 (IO 기반 입출력 및 네트워킹) (0) | 2022.09.21 |
---|---|
이것이 자바다 2장 확인 문제 풀이 (변수와 타입) (0) | 2022.09.21 |
이것이 자바다 15장 확인문제 풀이 (컬렉션 프레임워크) (0) | 2022.09.16 |
이것이 자바다 12장 확인 문제 풀이 (멀티 스레드) (0) | 2022.09.15 |
이것이 자바다 13장 확인문제 풀이 (제너릭) (0) | 2022.09.14 |