티스토리 뷰

[java 23강] 인터페이스 (interface)





우선 강의에 앞서 미리 선행해야할 강의들이 있습니다.


19강 상속강좌 --> http://bvc12.tistory.com/176

21강 오버라이드(오버로딩) 강좌 --> http://bvc12.tistory.com/178

22강 추상 클레스 강좌 --> http://bvc12.tistory.com/179



이번강의에서는 자바 인터페이스 (interface) 대해서 알아보겠습니다.


우선 자바는 다중상속이 안됩니다.

그럼 여러개를 상속받아야 한다면 어떡해 하실껍니까?

하나의 클레스에 여러가지를 넣고 하나만 상속하면될까요...?

여러게의 메소드를 넣은 상태로 클레스를 만들고... 여러클래스에 여러게의 메소드를 넣은 클레스가 상속이 되어있다고 생각해봅시다..

분명히 하나 수정할때마나 에러가 터져나올것입니다...

이것을 결합도가 높다고 할수 있습니다....


그러면.. 다른방법을 생각해 봅시다...

추상클래스에 추상메소드를 여러개 생성해놓고 하나만 상속해서 쓰면될까요??

추상클레스가 만약 완벽하지 않아서 추상메소드를 만약 하나 추가한다면...... 

추상클레스가 상속된 모든 클레스들을 찾아가 추가된 메소드만큼 오버라이드를 해야하는 불쌍사가 발생합니다.....


그럼 어떡할까요?

결론은 그래서 인터페이스를 사용합니다.

인터페이스는 다중으로 implements 할수 있습니다.

다중으로 implements 할수 있다는것은 여러개로 만들어 놓고 합쳐서 사용할수 있다는것입니다.

그러므로 결합도가 낮아지고... 필요할때 마다 추가해서 사용을 할수 있다는것입니다.

하지만 인터페이스는 목차와 같은 역활만 합니다.

인터페이스에 메소드를 추상메소드처럼 만들수만있고 내용들은 오버라이드 하여 사용하여야 합니다.

(메소드만 생성할수 있습니다.. 만약 변수들을 생성하면 컴파일이 되면서 스테틱이 붙을것입니다..) 


인터페이스 작성 문법은 

interface 인터페이스명 {}

입니다.


implements 작성 문법은

class 클레스명 implements 인터페이스명 {}

입니다.


바로 예제를 확인해 보겠습니다


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
45
46
47
48
49
50
51
package test123123;
 
public class java23  {
 
    public static void main(String[] args) {
        DD dd = new DD();
        dd.test();
        dd.test2();
        dd.test3();
        dd.test4();
    }
 
}
 
interface CC {
    public void test();
    public void test2();
}
 
interface EE {
    public void test3();
    public void test4();
}
 
class DD implements CC, EE{
 
    @Override
    public void test() {
        System.out.println(1);
        
    }
 
    @Override
    public void test2() {
        System.out.println(2);
        
    }
 
    @Override
    public void test3() {
        System.out.println(3);
        
    }
 
    @Override
    public void test4() {
        System.out.println(4);
        
    }
    
}
cs


결과



예제 설명


interface CC {
    public void test();
    public void test2();
}
 
interface EE {
    public void test3();
    public void test4();
}


인터페이스 CC, EE 를 만들어 주었습니다. 각각 메소드를 2개씩 만들어 주었습니다.


class DD implements CC, EE{
 
    @Override
    public void test() {
        System.out.println(1);
        
    }
 
    @Override
    public void test2() {
        System.out.println(2);
        
    }
 
    @Override
    public void test3() {
        System.out.println(3);
        
    }
 
    @Override
    public void test4() {
        System.out.println(4);
        
    }
    
}


클래스 CC 를 만들어주면서 앞에서 만들었던 인터페이스 CC,EE 를 implements 해주었습니다.

인터페이스 CC,EE 의 메소드들을 오버라이드 하여 재정의 하였습니다. (모두다 출력 메소드)


public class java23  {
 
    public static void main(String[] args) {
        DD dd = new DD();
        dd.test();
        dd.test2();
        dd.test3();
        dd.test4();
    }
 
}


DD 클래스를 생성하여 DD 클래스들의 메소드 들을 실행하였습니다.

그결과 콘솔창에 1,2,3,4 가 출력되는것을 확인할수 있습니다.


이렇게 예제를 살펴보았습니다.

인터페이스 부분은 아마도 확! 느낌이 오지 않으실수 있습니다.

만약 만들고 있는 프로젝트의 양이 적거나 혼자 개발을 한다면 더더욱... 이해가 안되실수 있습니다.

하지만 프로젝트의 양이 어마어마하고... 개인이 아닌 팀단위로 코딩을 한다면... 인터페이스를 사용할것입니다...

(인터페이스를 사용하므로 가이드 라인? 은 생긴다..)

이상으로 인터페이스 강의를 마치겠습니다.

수고하세요! ㅎㅎ

댓글