본문 바로가기
JAVA/JAVA복습(멘토씨리즈 자바)

[JAVA복습] 12. 추상 클래스와 인터페이스

by ssunooo 2024. 7. 24.

 

 

1. 핵심 정리

 

추상메서드란?

구현 내용 없이 구현부가 비어있는 메서드를 추상 메서드라고 함

 

추상 메서드 선언

abstract 키워드를 사용하여 다음과 같이 선언

[접근 제한자] abstract  반환타입  메서드이름  (매개변수1, 매개변수2 ...)

 

추상메서드를 1개 이상 선언하면, 그 클래스는 추상 클래스로 선언되어야 함

 

추상 클래스로 선언되는 클래스는 다음과 같은 제약 조건을 가짐

  • 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없습니다.
  • 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여
    부모 객체를 생성한 후 자식 객체를 생성합니다.

인터페이스는 모든 메서드가 추상 메서드

 

인터페이스 선언

interface 키워드를 사용해 선언

어떤 형태로도 객체를 만들 수 없으므로 클래스라고 부를 수 없음

따라서 별도의 필드와 생성자도 존재하지 않으며 필드 대신 상수를 선언하여 사용

 

구현 클래스

인터페이스를 구현해주는 클래스를 구현 클래스라고 함

implements 키워드를 사용해 선언


1
2
3
4
5
6
7
8
9
 
        [접근 제한자] class 클래스 이름 implements 인터페이스이름 {
            // 필드
            // 생성자
            // 구현 메서드(추상 메서드 오버라이딩)
 
cs

 


 


 

2. 응용 문제

 

Q1. 다음 빈칸에 알맞은 단어를 작성해 보세요.

  • 구현 내용이 없이 비어있는 메서드를     추상 메서드     (이)라고 부릅니다.
  • 위 메서드를 선언할 때는     abstract     키워드를 사용해야 합니다.
  • 이러한 메서드를 1개 이상 가지고 있는 클래스를     추상     클래스 라고 부릅니다.

 

Q2. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는 곳을 모두 찾아 수정해 보세요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package section12;
 
abstract class Bike {
    int wheel;
    
    Bike(int wheel) {
        this.wheel=wheel;
    }
    
    void info() {
        System.out.println("이 자전거는 "+wheel+"발 자전거입니다.");
    }
}
 
class ChildBike extends Bike {
    ChildBike(int wheel) {
    }
}
 
public class PRACTICE_12_02 {
    public static void main(String[] args) {
        Bike b=new Bike(2);
        
        ChildBike cb=new ChildBike(4);
        cb.info();
    }
}
 
cs

A2. 위 코드에서 15~18줄은 Bike 추상 클래스의 상속관계이므로 객체안에 super생성자를 넣어줘야 한다.

       그리고 22줄에서 Bike는 추상 클래스이므로 직접 생성자를 호출해 객체를 생성할 수 없다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package section12;
 
abstract class Bike {
    int wheel;
    
    Bike(int wheel) {
        this.wheel=wheel;
    }
    
    void info() {
        System.out.println("이 자전거는 "+wheel+"발 자전거입니다.");
    }
}
 
class ChildBike extends Bike {
    ChildBike(int wheel) {
        super(wheel);
    }
}
 
public class PRACTICE_12_02 {
    public static void main(String[] args) {
        Bike b=new ChildBike(2);
        
        ChildBike cb=new ChildBike(4);
        cb.info();
    }
}
 
cs

 


 

Q3. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.

  • 추상 클래스는 자식 클래스들이 상속(extends)받아 구현합니다. (O)
  • 인터페이스는 다른 클래스 코드들과의 사이에서 중간 매개체 역할을 합니다. (O)
  • 인터페이스 안에서 상수를 선언할 때, final을 명시하지 않으면 syntax error가 발생합니다. (X)
  • 추상 클래스와 인터페이스의 추상 메서드는 구현부가 있으면 안됩니다. (X)
  • 클래스 간 다중 상속이 불가능한 것처럼 인터페이스도 다중 상속이 불가능합니다. (X)

 


 

Q4. 2번 예제코드에서 Bike 클래스 안에 아래 메서드를 추가했습니다. ChildBike 클래스는 어떻게 수정해야 할까요?

abstract int getWheel();

 

A4.  오버라이딩을 통해 해당 메서드를 반드시 재정의 하여 구현해야 하기에 아래코드를 추가해야 한다.


1
2
3
4
5
6
7
8
9
10
 
        @Override
        int getWheel() {
            // TODO Auto-generated method stub
            return 0;
 
cs

 


 

Q5. 인터페이스를 사용함으로써 다음과 같은 객체 지향의 특징을 가질 수 있습니다. 각 용어의 개념에 대해 이해하고 있는

       것을 간략히 서술해 보세요.

 

  • 정보 은닉 : 실제 구현 클래스의 내용을 전혀 보지 않고도 개발 코드로 객체를 사용할 수 있다.
  • 모듈화 : 구현 클래스들이 독립적으로 구현되고 사용될 수 있다. 개발 코드에서 객체 변경이 필요할 때, 개발 코드의
                  수정을 최소화할 수 있다.

 

 

2024.07.24

 

'JAVA > JAVA복습(멘토씨리즈 자바)' 카테고리의 다른 글

[JAVA복습] 14. 예외처리  (0) 2024.07.25
[JAVA복습] 13. 내부 클래스  (0) 2024.07.24
[JAVA복습] 11. 다형성과 타입 변환  (0) 2024.07.22
[JAVA복습] 10. 상속  (0) 2024.07.21
[JAVA복습] 09. 생성자  (0) 2024.07.21