Computer Science/Java

Java - 인터페이스

ajdanddl 2020. 1. 27. 17:54
반응형

Java에서 인터페이스의 특징이라면 추상화보다는 더 설계적 기능을 강조하고 있다는 것과

다중 상속이 가능하다는 것입니다.

 

여기서 더 설계적이라는 뜻은 추상화의 경우 추상 메소드 이외의 일반 메소드 및 변수를 포함할 수 있지만

인터페이스의 경우 정말 추상 메소드와 상수만을 포함할 수 있다는 것입니다.

 

위 예와 같이 인터페이스에서는 추상 메소드는 에러가 뜨지 않지만

일반 메소드 Howling() 밑에는 빨간색 줄(에러)이 뜨는 것을 볼 수 있습니다.

(*Java 8을 기준으로 default 메소드가 사용가능해지면서 예를 들어

default void Howling(){
	System.out.println("왈왈");
}

위와 같이 default를 사용해준다면 인터페이스에서도 메소드의 내용을 채울 수 있게 되었습니다.

 

 

대신 일반 메소드의 내용을 정의하지 않은 상태로 둔다면 에러는 사라집니다.

 

반면 인터페이스가 아닌 추상 클래스에서는 

일반 메소드인 Howling에 대해 아무런 에러가 뜨지 않는 것을 볼 수 있습니다.

 

이런 면에서 인터페이스가 추상화보다 더 설계적인 측면을 강조하고 있다는 것입니다.

 

다른 클래스에서 인터페이스를 상속하고 싶을 때는 

extends가 아닌 implements를 사용하면 됩니다.

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
public interface Cat {
    abstract void crying();
    public void two();
}
 
cs

 

Main 클래스

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