JAVA

인터페이스 (Interface)/ 추상화 클래스와 인터페이스의 공통점 / 차이점

jojelly 2020. 9. 10. 22:15
반응형

인터페이스란 일종의 추상 클래스이다.  다만 추상 클래스보다 추상화의 정도가더 크다고 생각하면 된다. 

 

특징 

 

1.멤버는 추상 메소드와 상수만으로 구성된다.

# 인터페이스는 메소드와 상수만을 가지며 필드는 가지지 않는다. 

# 메소드는 모두 추상메소드이다. 그러나 메소드 선언 시 abstract 키워드를 생략할 수 있다.

 

2. 모든 메소드는 public이며 생략이 가능하다.

# 모든 메소드는 public 접근 지정자이다. 주로 생략하여 사용한다.

 

3. 상수도 public static final을 생략하여 선언할 수 있다.

# 상수는 public static final 속성이며 생략 가능하다.

 

4. 인터페이스의 객체를 생성할 수 없다.

# 인터페이스는 추상 메소드만 가지기 때문에 원칙적으로 객체를 생성할 수 없다. 그러므로 다음 문장은 오류이다.

ex)

new car();

 

5. 다른 인터페이스에 상속될 수 있다.

 

6.인터페이스도 레퍼런스 변수의 타입으로 사용 가능하다.

 

 

7. 인터페이스는 다중 상속이 가능하다.

 

 

 


interface (인터페이스) 구현 : 인터페이스의 추상 메소드를 클래스에서 구현하는 것

 

이때 반드시 모든 추상 메소드를 구현해야한다.

(추상 메소드는 기본적으로 추상 메소드 클래스 안에서 구현이 불가능하기 때문)

 

ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
interface USBMouseInterface {
    void mouseMove();
    void mouseClick();
}
 
public class MouseDriver implements USBMouseInterface { // 인터페이스 구현
    void mouseMove() { .... }
    void mouseClick() { ... }
 
    // 추가적으로 다른 메소드를 작성할 수 있다.
    int getStatus() { ... }
    int getButton() { ... }
}
cs

다중구현또한 가능하다

ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface USBMouseInterface {
    void mouseMove();        // abstract 생략됨
    void mouseClick();        // abstract 생략됨
}
 
interface RollMouseInterface {
    void roll();                    // abstract 생략됨
}
            // 콤마로 분리하여 상속받는 인터페이스 나열한다. 
public class MouseDriver implements RollMouseInterface, USBMouseInterface {
    void mouseMove() { .... }
    void mouseClick() { ... }    // 2개의 인터페이스에 정의된 모든 메소드를 구현해야한다.
    void roll() { ... }
 
    // 추가적으로 다른 메소드를 작성할 수 있다.
    int getStatus() { ... }
    int getButton() { ... }
}
cs

 

 

 

 

 

 

 

 

인터페이스 상속


인터페이스도 상속이 가능하다. 

 

ex)

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package mePm;
 
interface InP_1{
   
   int a = 10;  //중복
   int b = 20;
   int d = 40;  //중복
   void meth_1();
   void meth_2();
}
 
interface InP_2{
   
   int a = 1000//중복
   
   void meth_1();
   void meth_3();
}
 
interface InP_3{
   
   int c = 33333;
   int d = 44444//중복
   void meth_2();
   void meth_3();
}
 
//interface InCC implements InP_1{
interface InCC extends InP_1,InP_2,InP_3{
    int a = 12345;  //hiding   /*
 
/* int a = 10;  int a = 1000;   ?
   int b = 20;
   int c = 33333; 
   int d = 40;  int d = 44444;   ?
   
   void meth_1();
   void meth_2();
   void meth_3();
   */   
}
 
 
 
cs

이와같이 인터페이스 InCC는 InP_1, InP_2, InP_3상속이가능하며동시에 다중상속 또한 가능하다.

반응형