0. 문제
➡ 정답
(설명)
1. 객체와 클래스에 대한 설명으로 틀린 것은 무엇입니까?
➡ 하나의 클래스로 하나의 객체만 생성할 수 있다.
(설명)
하나의 클래스로 new 연산자 호출 시 호출하는 만큼 객체 생성 가능
2. 클래스의 구성 멤버가 아닌 것은 무엇입니까?
➡ 로컬 변수(local variable)
(설명)
클래스의 구성 멤버는 필드 field, 생성자 constructor, 메소드 method 이다.
3. 필드, 생성자, 메소드에 대한 설명으로 틀린 것은 무엇입니까?
➡ 클래스는 반드시 필드와 메소드를 가져야 한다.
(설명)
필드는 객체의 데이터를 저장한다.
반드시 x, 필드를 갖고 있지 않는 클래스도 있고, 필드만 있는 클래스도 있을 수 있다!
4. 필드에 대한 설명으로 틀린 것은 무엇입니까?
➡ 필드는 반드시 생성자 선언 전에 선언되어야 한다.
(설명)
클래스 선언 시 필드를 먼저 선언하고 생성자 선언 다음에도 필드를 선언할 수 있다.
필드 선언 / 생성자 선언 / 필드 선언 순도 가능하다!
5. 생성자에 대한 설명으로 틀린 것은 무엇입니까?
➡ 객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다.
(설명)
객체를 생성하려면 생성자 호출이 무조건! 필요하다!
6. 메소드에 대한 설명으로 틀린 것은 무엇입니까?
➡ 메소드의 이름은 중복해서 선언할 수 없다.
(설명)
메소드 재정의 (오버 로딩) 존재한다.
메소드의 이름은 중복해서 선언하나 실행부 내용이 다른 것.
7. 메소드 오버로딩에 대한 설명으로 틀린 것은 무엇입니까?
➡ 반드시 리턴 타입이 달라야 한다.
(설명)
반드시 x, 리턴 타입과 오버 로딩은 상관이 없다.
8. 인스턴스 멤버와 정적 멤버에 대한 설명으로 틀린 것은 무엇입니까?
➡ 인스턴스 필드는 생성자 및 정적 블록에서 초기화될 수 있다.
(설명)
정적 블록 static { } : 클래스가 메모리로 로딩될 때 자동 실행된다.
static 안에 인스턴스 필드 사용 불가능(초기화할 수 없기 때문에)
9. final 필드와 상수(static final)에 대한 설명으로 틀린 것은 무엇입니까?
➡ final 필드와 상수는 생성자에서 초기화될 수 있다.
(설명)
상수를 선언할 때 값을 주던지, 정적 블록에서 초기화를 줘야 하는데 이미 상수는 객체를 생성하기 전에 완성이 되어있어야 하기 때문에 생성자에서 초기화 될 수 없다.
10. 패키지에 대한 설명으로 틀린 것은 무엇입니까?
➡ mycompany 패키지에 소속된 클래스는 yourcompany에 옮겨 놓아도 동작한다.
(설명)
클래스를 선언할 때 패키지를 선언하면 클래스는 꼭 그 패키지 안에서만 동작을 한다.
11. 접근 제한에 대한 설명으로 틀린 것은 무엇입니까?
➡ default 접근 제한은 해당 클래스 내부에서만 사용을 허가한다.
(설명)
클래스 내부에서만 사용을 허가하는 것은 private 접근제한자이다.
12. 다음 클래스에서 해당 멤버가 필드, 생성자, 메소드 중 어떤 것인지 빈칸을 채우세요.
➡ 필드 / 생성자 / 메소드
(설명)
Field / Constructor / Method
13. 현실 세계의 회원을 Member 클래스로 모델링하려고 합니다. 회원의 데이터로는 이름, 아이디, 패스워드, 나이가 있습니다. 이 데이터들을 가지는 Member 클래스를 선언해보세요.
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");
public class Member {
// 작성 위치
}
➡ 13번 답 이어서 붙이기
Member (String name, String id) {
this.name = name;
this. id = id;
}
(설명)
생성자 만들기
클래스 이름 (매개 변수 , ...) {
this.name = 매개변수 값;
}
15. login() 메소드를 호출할 때에는 매개 값으로 id와 password를 제공하고,
logout() 메소드는 id만 매개값으로 제공합니다.
(1) login() 메소드는 매개값 id가 "hong". 매개값 password가 "12345"일 경우에만 true로 리턴하고
그 이외의 값일 경우에는 false를 리턴
(2) logout() 메소드의 내용은 "로그아웃 되었습니다."가 출력되도록 하세요.
public class MemberService {
// 작성 위치
}
public class MemberService Example {
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가 올바르지 않습니다.");
}
}
}
➡
String id;
String password;
boolean login(String id, String password) {
if(id == "hong" && password == "12345") {
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 Printer {
// 작성 위치
}
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 void println(int x) {System.out.println(x);}
public void println(boolean x) {System.out.println(x);}
public void println(double x) {System.out.println(x);}
public void println(String x) {System.out.println(x);}
(설명)
객체를 생성해야 메소드 호출이 가능
17. Printer 객체를 생성하지 않고 PrinterExample 클래스에서 다음과 같이 호출하려면 Printer 클래스를 어떻게 수정하면 될까요?
public class Printer {
// 작성 위치
}
public class PrinterExample {
public static void main(String[] args) {
Printer.println(10);
Printer.println(true);
Printer.println(5.7);
Printer.println("홍길동");
}
}
➡
static public void println(int x) {System.out.println(x);}
static public void println(boolean x) {System.out.println(x);}
static public void println(double x) {System.out.println(x);}
static public void println(String x) {System.out.println(x);}
(설명)
16번과 비슷하지만 앞에 STATIC을 붙이게 되면 정적메소드가 되므로 객체마다 있는 메소드가 되는게 아니라
클래스 이름으로 바로 접근하여 메소드 호출이 가능하다:)
18. ShopService 객체를 싱글톤으로 만들고 싶습니다. ShopServiceExample 클래스에서 ShopService의 getInstance() 메소드로 싱글톤을 얻을 수 있도록 ShopService 클래스를 작성해보세요.
public class 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 객체 입니다.");
}
}
}
➡
private static ShopService singleton = new ShopService();
private ShopService() {
}
public static ShopService getInstance() {
return singleton;
}
19. 은행 계좌 객체인 Account 객체는 잔고 (balance) 필드를 가지고 있습니다. balance 필드는 음수 값이 될 수 없고, 최대 백만 원까지만 저장할 수 있습니다. 외부에서 balance 필드를 마음대로 변경하지 못하도록 하고, 0 <= balance <= 1,000,000 범위의 값만 가질 수 있도록 Account 클래스를 작성해보세요.
public class Account {
//작성 위치
}
public class AccountExample {
public static void main(String[] args) {
Account account = new Account();
account.setBalance (10000);
System.out.printIn("현재 잔고: " + account.getBalance());
account.setBalance (-100);
System.out.printIn("현재 잔고: " + account.getBalance());
account.setBalance(2000000);
System.out.printIn("현재 잔고: " + account.getBalance());
account.setBalance(3000000);
System.out.printIn("현재 잔고: " + account.getBalance());
}
}
➡
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번은 패스하겠습니다.
'🤯TIL > JAVA' 카테고리의 다른 글
[이것이 자바다 - 연습문제] chapter 08. 인터페이스 (0) | 2022.11.09 |
---|---|
[이것이 자바다 - 연습문제] chapter 07. 상속 (0) | 2022.11.08 |
[이것이 자바다 - 연습문제] chapter 05. 참조 타입 (0) | 2022.10.13 |
[이것이 자바다 - 연습문제] chapter 04. 조건문과 반복문 (0) | 2022.10.11 |
[연습문제] Getter Setter 메소드의 호출과 정의 (0) | 2022.10.10 |