1. 다음 빈칸에 알맞은 단어를 작성해 보세요.
- 구현 내용 없이 비어있는 메소드를 □□□□□(이)라고 부릅니다.
- 위 메소드를 선언할 때는 □□□□ 키워드를 사용해야 합니다.
- 이러한 메소드를 1개 이상 가지고 있는 클래스를 □□□□□클래스라고 부릅니다.
보기1) 추상 메소드 : 구현 내용 없이 구현부가 비어 있는 메소드
보기2) 추상 메소드를 선언할 때 abstract 키워드를 사용해야 함
보기3) 추상 메소드를 1개 이상 가지고 있는 클래스를 추상클래스라고 부른다.
2. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는 곳을 모두 찾아 수정해 보세요.
abstract class Bike {
int wheel;
Bike(int wheel) {
this.wheel = wheel;
}
void info() {
System.out.println("이 자전거는 " + wheel + "발 자전거입니다.");
}
}
class ChildBike extends Bike {
ChildBike(int wheel) {
}
}
class Test01 {
public static void main(String[] args) {
Bike b = new Bike(2);
ChildBike cb = new ChildBike(4);
cb.info();
}
}
자식클래스인 ChildBike의 생성자에는 super()이 생략되어 있는데, 부모 클래스에 기본 생성자가 없으므로 자식클래스에서 따로 선언을 하여 값을 넣어줘야 한다. 따라서 생성자 안에 super(wheel); 넣어주면 된다.
또한, 추상 클래스는 객체를 생성할 수 없어서 컴파일 오류가 발생한다. 따라서 Bike b = new Bike(2);를 삭제해야한다.
3. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.
- 추상 클래스는 자식 클래스들이 상속(extends)받아 구현합니다. ( )
- 인터페이스는 다른 클래스 코드들과의 사이에서 중간 매개체 역할을 합니다. ( )
- 인터페이스 안에서 상수를 선언할 때, final을 명시하지 않으면 syntax error가 발생합니다. ( )
- 추상 클래스와 인터페이스의 추상 메소드는 구현부가 있으면 안됩니다. ( )
- 클래스 간 다중 상속이 불가능한 것처럼 인터페이스도 다중 상속이 불가능합니다. ( )
보기1) O --> 추상 클래스는 자식 클래스들이 상속받아 구현한다.
보기2) O --> 인터페이스는 구현 클래스들의 기본 틀을 제공하면서, 다른 클래스 코드들과의 사이에서 중간 매개 역할을 한다.
보기3) X --> final을 선언하지 않아도, 항상 상수로 선언되기 때문에 명시하지 않아도 된다.
보기4) O --> 틀을 제공하는 것이기에, 구현을 하지 않는다.
보기5) X --> 인터페이스는 다중 상속이 가능하다.
4. 2번 예제 코드에서 Bike 클래스 안에 아래 메소드를 추가했습니다. ChildBike 클래스를 어떻게 수정해야 할까요 ?
abstract int getWheel();
ChildBike 클래스에 추상메소드인 getWheel()이 강제된다. 따라서 getWheel()을 구현해야 한다. 또한, 반환 타입이 int이기 때문에 return 정수형타입을 반환해줘야한다. 따라서, 아래와 같이 코드를 수정하면 된다.
int getWheel() {
return wheel;
}
5. 인터페이스를 사용함으로써 다음과 같은 객체 지향의 특징을 가질 수 있습니다. 각 용어의 개념에 대해 이해하고 있는 것을 간략히 서술해 보세요.
- 정보 은닉 :
- 모듈화 :
정보 은닉 : 실제 구현 클래스의 내용을 전혀 보지 않고도 개발 코드로 객체를 사용할 수 있다.
모듈화 : 구현 클래스들이 독립적으로 구현되고 사용될 수 있습니다. 개발 코드에서 객체 변경이 필요할 때, 개발 코드의 수정을 최소화 할 수 있다.
'JAVA > JAVA 멘토시리즈' 카테고리의 다른 글
[JAVA 멘토시리즈] 응용 문제 풀이 (스레드) (0) | 2023.06.02 |
---|---|
[JAVA 멘토시리즈] 응용 문제 풀이 (컬렉션 프레임워크) (0) | 2023.06.01 |
[JAVA 멘토시리즈] 응용 문제 풀이 (다형성과 타입 변환) (0) | 2023.05.29 |
[JAVA 멘토시리즈] 응용 문제 풀이 (상속) (0) | 2023.05.25 |
[JAVA 멘토시리즈] 응용 문제 풀이(생성자) (0) | 2023.05.24 |