[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 가 출력되는것을 확인할수 있습니다.


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

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

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

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

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

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

수고하세요! ㅎㅎ

[java 22강] 추상 클레스 (Abstract Class)




이번 강좌에서는 추상 클레스에대해서 알아보겠습니다.

추상 클레스도 우선 클래스의 종류입니다.

추상 클레스도 상속을 위해 많이 사용합니다.


그렇기 상속과 오버라이드 에대해 미리 알아두고 강의를 보실 필요가 있습니다.


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

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


그럼 추상클레스는 왜만들며 왜 상속해서 사용할수 있도록 있는것일까요?

추상클레스는 말그대로 구체적이지 않을떄 쓰는것 입니다.

추상적으로! 클레스를 만드는것입니다.

음.. 현직에서 업무를 하다보면 다음과 같은 문제가 생깁니다...

여러명이서 코딩작업을 한다면... 변수나... 메소드를 규칙적으로 이름을 생성해야할일이 생깁니다..

만약 똑같은 메소드를 다른이름으로 만들어 놓거나... 변수의 이름을 다르게 만들어 놓으면.... 찾기가 어렵죠?

그러면 또 이러한 생각이 들수있습니다... 그럼 클레스를 하나 만들어 놓고 그것만 쓰면되는거아님?

만약 메소드의 기능들이 조금씩만 다르면... 하나 만들어 놓은 것을 생성하고 조금씩 수정해서 쓸것입니다.

그렇게 조금씩 수정하다보면 정말로 이름이 조금씩 다르게 되고.. 정말 찾기가 어려워집니다..

그래서 메소드 명칭.... 변수 명칭 등등을 정해놓고 편리하게 사용할수 있는방법이 추상 클레스 입니다.


추상클레스의 문법은... 

abstract class 클레스명 입니다.


추상클레스를 만들고 추상메소드를 만들수 있습니다.


추상메소드문법은...

abstract 리턴타입 메소드명(); 입니다.

메소드 안에 내용은 작성하실수 없습니다.

왜냐구요? 추상이 잖아요... 명칭까지만 만들어 놓는것입니다.

메소드의 내용들은 상속을하거나... 생성을할께... 무조껀!!! 오버라이드 하여 재정의를 하셔야합니다..

(쉽게 말해서 상속할때 이름만 같게 메소드를 무조껀 만들어야함..)

그럼 바로 예제를 살펴보도록 하겠습니다.


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
package test123123;
 
public class java22 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.test();
        System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);
        
    }
}
 
abstract class AA {
    int a = 0;
    
    public AA() {
        System.out.println("추상클래스는 생성자도 만들수 있음.");
    }
    
    
    public abstract void test();
    
}
 
class BB extends AA{
 
    @Override
    public void test() {
        System.out.println("추상클레스 메소드 재정의 실행!");
        
    }
    
}
cs


결과



그럼 설명하겠습니다.


abstract class AA {
    int a = 0;
    
    public AA() {
        System.out.println("추상클래스는 생성자도 만들수 있음.");
    }
    
    
    public abstract void test();
    
}

AA 라는 추상클래스를 생성하여..

int 타입 변수 a 와 생성자 AA를 만들어 주었고....

 test 라는 추상메소드를 만들어 주었습니다. 추상메소드에는 {} <--- 내용을 담는곳은 빼고 작성합니다.. 추상메소드이기 때문입니다..


class BB extends AA{
 
    @Override
    public void test() {
        System.out.println("추상클레스 메소드 재정의 실행!");
        
    }
    
}

BB 라는 클레스를 만들고 AA 라는 추상클레스를 상속하였습니다.

추상클레스는 꼭! 추상메소드를 오버라이드 하여 재작성하여야 합니다. (오버라이드 안하시면 컴파일도 안되실겁니다.. 바로 에러..)

test 메소드를 오버라이드 하여       System.out.println("추상클레스 메소드 재정의 실행!"); 이라는 내용을 넣었습니다.

.

public class java22 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.test();
        System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);
        
    }
}
그다음 BB 클래스를 bb 라고 생성하고 BB 클래스의 오버라이드 된 메소드를 실행하고...
추상클래스 AA의 변수를 상속받은 BB 클래스의 변수를 출력해보았습니다. (    System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);    )

그래서 결과는 3개의 출력을 확인할수 있습니다.
첫번째 출력물은 추상클래스에 있는 생성자가 출력되고...
두번째 출력물은 오버라이드한 메소드가 실행되고...
세번째 출력물은 bb.a 의 값이 출력되는것을 확인할수 있습니다...!


이렇게 이번강의를 통해 추상 클레스 (Abstract Class) 를 알아보았습니다.
모두 수고하셨습니다!^^


+ Recent posts