필드, 생성자, 메소드에 대한 설명으로 틀린 것은 무엇입니까?
1. 필드는 객체의 데이터를 저장한다.
2. 생성자는 객체의 초기화를 담당한다. *객체를 생성할때, 생성자를 호출함으로서 객체를 초기화한다.
3. 메소드는 객체의 동작 부분으로, 실행코드를 가지고 있는 블록이다.
✔ 4. 클래스는 반드시 필드와 메소드를 가져야 한다. *반드시는 아니다.
필드에 대한 설명으로 틀린 것은?
1. 필드는 메소드에서 사용할 수 있다.
2. 인스턴스 필드 초기화는 생성자에서 할 수 있다.
✔ 3. 필드는 반드시 생성자 선언 전에 선언 되어야 한다. *생성자 선언 다음에도 선언이 가능하다.
4. 필드는 초기값을 주지 않더라도 기본값으로 자동 초기화된다.
생성자에 대한 설명으로 틀린 것은?
✔ 1. 객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다 *반드시 생성자 호출이 필요하다
2. 생성자는 다른 생성자를 호출하기 위해 this()를 사용할 수 있다.
3. 생성자가 선언되지 않으면 컴파일러가 기본 생성자를 추가한다.
4. 외부에서 객체를 생성할 수 없도록 생성자에 private접근 제한자를 붙일 수 있다.
메소드에 대한 설명으로 틀린 것은?
1. 리턴값이 없는 메소드는 리턴타입을 void로 해야한다
2. 리턴타입이 있는 메소드는 리턴값을 지정하기 위해 반드시 return 문이 있어야 한다.
3. 매개값의 수를 모를경우 "..."을 이용해서 매개변수를 선언할 수 있다.
✔ 4. 메소드의 이름은 중복해서 선언할 수 없다. *오버로딩(조건:매개변수의수,매개변수타입...등)으로 가능
메소드 오버로딩에 대한 설명으로 틀린 것은?
1. 동일한 이름의 메소드를 여러개 선언하는 것을 말한다
✔ 2. 반드시 리턴타입이 달라야한다
3. 매개변수의 타입, 수, 순서를 다르게 선언해야한다
4. 매개값의 타입 및 수에 따라 호출될 메소드가 선택된다.
인스턴스 멤버와 정적 멤버에 대한 설명으로 틀린 것은?
1. 정적멤버는 static으로 선언된 필드와 메소드를 말한다
✔ 2. 인스턴스 필드는 생성자 및 정적 블록에서 초기화 될 수 있다.
*인스턴스필드는 객체 안에있는필드이기때문에 객체가 없이는 사용할 수없다.
그렇기에 객체를 만드는 생성자에서는 사용할 수 있지만, 정적블록 static{} 안에서 초기화될수는 없다.
3. 정적필드와 정적메소드는 객체 생성 없이 클래스를 통해 접근 할 수 있다.
4. 인스턴스 필드와 메소드는 객체를 생성하고 사용해야 한다.
final 필드와 상수( static final )에 대한 설명으로 틀린 것은?
1. final 필드와 상수는 초기값이 저장되면 값을 변경할 수 없다.
✔ 2. final 필드와 상수는 생성자에서 초기화 될 수 있다. *상수는 생성자에서 초기화 될 수없다. 단순한 final필드는 가능
3. 상수의 이름은 대문자로 작성하는 것이 관례이다.
4. 상수는 객체 생성 없이 클래스를 통해 사용할 수 있다.
접근제한에 대한 설명으로 틀린 것은 무엇입니까?
1. 접근 제한자는 클래스, 필드, 생성자, 메소드의 사용을 제한한다.
2. public 접근 제한은 아무런 제한 없이 해당 요소를 사용할 수 있게 한다.
✔ 3. default 접근제한은 해당 클래스 내부에서만 사용을 허가한다. *private설명
4. 외부에서 접근을하지 못하도록 하려면 private접근제한을 해야한다.
MemberService 클래스에 login()메소드와 logout()메소드를 선언하려고합니다. login()메소드를 호출할때에는 메개값으로 id와 password를 제공하고, logout()메소드는 id만 매개값으로 제공합니다.
MemberService클래스와 login() logout()메소드를 선언해보세요
-login() 메소드는 매개값이 id가 "hong" 매개값 password가 "12345"일경우에만 true를 리턴하고, 그외의 값일 경우 false
-logout() 메소드의 내용은 "로그아웃되었습니다"가 출력되도록하세요
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(id.equals("hong") && password.equals("12345")){
return true;
}else{
return false;
}
}
void logout(String id){
System.out.println(id+" 님은 로그아웃되었습니다");
}
}
PrinterExample 클래스에서 Printer객체를 생성하고 println()메소드를 호출해서 매개값을 콘솔에 출력하려고합니다.
println()메소드의 매개값으로는 int, boolean, double, String 값을 줄 수 있습니다. Printer 클래스에서 println()메소드를 선언해보세요
package solution;
public class Printer {
//오버로딩
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);
}
}
다른답
package solution;
public class Printer {
//Object는 최상위 부모
//자동으로 int -> Integer(Integer=클래스)
static void println(Object value){
System.out.println(value);
}
}
package solution;
public class PrintExample {
public static void main(String[] args) {
Printer printer = new Printer();
printer.println(10);
printer.println(true);
printer.println(5.7);
printer.println("홍길동");
}
}
ShopService객체를 싱글톤으로 만들고 싶습니다.
ShopServiceExample 클래스에서 ShopService의 getInstance()메소드로 싱글톤을 얻을 수 있도록
ShopService클래스를 작성해보세요.
public class ShopService {
private static ShopService singletone = new ShopService();
//private로 접근제한 -> 싱글톤
private ShopService(){}
//직접접근해야기때문에 static ->그래서 위에도 static
static ShopService getInstance(){
return singletone;
}
}
public class ShopServiceExample {
public static void main(String[] args) {
//private이기때문에 .getInstance()
ShopService obj1 = ShopService.getInstance();
ShopService obj2 = ShopService.getInstance();
if(obj1 == obj2){
System.out.println("같은 ShopService객체 입니다.");
} else {
System.out.println("다른 ShopService객체 입니다.");
}
}
}
은행계좌객체인 Account객체는 잔고(balance)필드를 가지고있습니다. balance필드는 음수값이 될 수 없고,
최대 백만원까지만 저장할 수 있습니다. 외부에서 balance필드를 마음대로 변경하지 못하도록하고,
0<=balance<=1,000,000 범위의 값만 가질 수 있도록 클래스를 작성해 보세요.
1) Setter와 Getter을 이용하세요
2) 0과 1,000,000은 MIN_BALANCE 와 MAX_BALANCE 상수를 선언해서 이용하세요.
3) Setter의 매개값이 음수이거나 백만원을 초과하면 현재 balance값을 유지하세요.
package ex02;
public class Account {
//상수
public static final int MIN_BALANCE = 0;
public static final int MAX_BALANCE = 1000000;
private int balance;
//getter : 필드의 값을 리턴
public int getBalance() {
return balance;
}
//setter : 외부에서 값을 받아서 저장. 유효성검사
public void setBalance(int balance) {
//매개변수가 우선순위를 가짐 => 여기 balance는 매개변수
if(balance<Account.MIN_BALANCE ||
balance>Account.MAX_BALANCE){
//true이면 올바르지않은 값이므로 메소드종료 return
return;
}
//false이면 올바른 값. 유지
this.balance = balance;
}
}
package ex02;
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());
//잘못된 값이므로 위 값이 10000 유지 되어야함.
account.setBalance(2000000);
System.out.println("현재잔고 : "+account.getBalance());
}
}
다음은키보드로부터 계좌정보를 입력받아서, 계좌를 관리하는 프로그램입니다.
실행결과를 보고, 알맞게 BankApplication 클래스의 메소드를 작성해보세요.
package ex03;
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;
}
//getter ano
public String getAno() {
return ano;
}
//setter ano
public void setAno(String ano){
this.ano = ano;
}
//getter owner
public String getOwner(){
return owner;
}
//setter owner
public void setOwner(String owner){
this.owner = owner;
}
//getter balance
public int getBalance() {
return balance;
}
//setter balance
public void setBalance(int balance){
this.balance = balance;
}
}
package ex03;
import java.util.Scanner;
public class BankApplication {
//static으로 선언한 이유 - main이 static이니 main에서 바로 사용할 수있도록
private static Account[] accountsArray = 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){
creatAccount();
} 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 creatAccount(){
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();
//생성자에 입력받은 ano, owner, balance가 들어간다. = > newAccount
Account newAccount = new Account(ano,owner,balance);
//accountsArray라는 빈 배열에 index마다 newAccount가 통째로 담긴다. [즉, 계좌정보가 담긴다는 것]
for(int i =0; i <accountsArray.length; i++){
if(accountsArray[i] == null){
accountsArray[i] = newAccount;
System.out.println("결과: 계좌가 생성되었습니다");
break;
}
}
}
//계좌목록보기
private static void accountList(){
System.out.println("-------");
System.out.println("계좌목록");
System.out.println("-------");
//변수 account = accountArray에 있던 계좌 (대입)
for(int i =0; i <accountsArray.length; i++){
Account account = accountsArray[i];
//account가 null이 아닐때 [즉 계좌가 있을때]
//계좌정보를 print해준다.
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();
//계좌번호 매개로받은 findAccount를 account변수에 대입
Account account = findAccount(ano);
//아래에서 찾은 값(동일한 계좌번호)가 없을때, 계좌가없습니다가 뜨고
if(account == null){
System.out.println("결과 : 계좌가없습니다");
return;
}
// 동일한 계좌번호가 있을때에는 계좌금액인 Balance에 입금액을 더해 setBalance에 매개하여 저장한다.
account.setBalance(account.getBalance()+money);
System.out.println("결과: 입금이 성공되었습니다");
}
//ano라는 계좌번호를 매개로 받는 findAccount
private static Account findAccount(String ano) {
Account account = null;
for(int i =0; i <accountsArray.length; i++){
//배열에 계좌정보가 들어있을때,
if(accountsArray[i] != null){
//배열에있는 ano값을 dbAno에 대입해준다.
String dbAno = accountsArray[i].getAno();
//dbAno에 있는 ano가 매개로 받는 ano와 동일할때
if(dbAno.equals(ano)){
//account라는 변수에 해당 인덱스를 대입한다.
account = accountsArray[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("결과: 입금이 성공되었습니다");
}
}
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 22-06-13 상수풀 / String · StringBuilder · StringBuffer ☑ (0) | 2022.07.18 |
---|---|
[JAVA] 22-07-14 중첩 클래스 중첩 인터페이스 ☑ (0) | 2022.07.14 |
[JAVA-이것이자바다.5장] 참조 타입 확인 문제 (0) | 2022.07.13 |
[JAVA] 22-07-08 인터페이스를 이용한 주행 모드 바꾸기 문제 ☑ (0) | 2022.07.10 |
[JAVA]22-07-08 컬렉션 프레임워크 ☑ (0) | 2022.07.08 |