Java에서 인터페이스의 특징이라면 추상화보다는 더 설계적 기능을 강조하고 있다는 것과
다중 상속이 가능하다는 것입니다.
여기서 더 설계적이라는 뜻은 추상화의 경우 추상 메소드 이외의 일반 메소드 및 변수를 포함할 수 있지만
인터페이스의 경우 정말 추상 메소드와 상수만을 포함할 수 있다는 것입니다.
위 예와 같이 인터페이스에서는 추상 메소드는 에러가 뜨지 않지만
일반 메소드 Howling() 밑에는 빨간색 줄(에러)이 뜨는 것을 볼 수 있습니다.
(*Java 8을 기준으로 default 메소드가 사용가능해지면서 예를 들어
default void Howling(){
System.out.println("왈왈");
}
위와 같이 default를 사용해준다면 인터페이스에서도 메소드의 내용을 채울 수 있게 되었습니다.
대신 일반 메소드의 내용을 정의하지 않은 상태로 둔다면 에러는 사라집니다.
반면 인터페이스가 아닌 추상 클래스에서는
일반 메소드인 Howling에 대해 아무런 에러가 뜨지 않는 것을 볼 수 있습니다.
이런 면에서 인터페이스가 추상화보다 더 설계적인 측면을 강조하고 있다는 것입니다.
다른 클래스에서 인터페이스를 상속하고 싶을 때는
extends가 아닌 implements를 사용하면 됩니다.
다중상속
일반적으로 Java는 2개 이상의 클래스를 상속 받을 수 없습니다.
예를 들어 Cat, Dog라는 2개의 추상 클래스가 있다고 할 때 Main 클래스는 위 2개의 클래스를 동시에 상속받을 수 없습니다. 하나만 상속받을 수 있습니다.
하지만 인터페이스를 사용한다면 다중 상속이 가능합니다.
단순히 public class Main implements 인터페이스1, 인터페이스 2,,,,,, 를 선언함으로써 말이죠.
예제
Dog 클래스
1
2
3
4
5
|
public interface Dog {
abstract void crying();
public void one();
}
|
cs |
Cat 클래스
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
|
public class Main implements Dog, Cat{
public static void main(String[] args) {
Main main = new Main();
main.crying();
main.one();
main.two();
}
@Override
public void crying() {
System.out.println("월월우엉ㄹ");
}
@Override
public void two() {
System.out.println("two");
}
@Override
public void one() {
System.out.println("one");
}
}
|
cs |
'Computer Science > Java' 카테고리의 다른 글
[Java] - Eclipse 프로젝트 Github 연동 (0) | 2020.02.17 |
---|---|
Java - 다형성 (0) | 2020.01.27 |
Java - Final (0) | 2020.01.27 |
Java - 추상화 (0) | 2020.01.26 |
Java - 상속 (0) | 2020.01.26 |