본문 바로가기
IT/Java

Interface(인터페이스)

by Jeami 2013. 7. 1.
반응형



Interface에 대한 정의는 일반시중의 다양한 서적들과 인터넷을 통해서도 많이 찾아볼 수 있습니다.

하지만, 정보가 너무 많기 때문에 어느것을 선뜩 선택하기가 망설여지기도 하는데요.

여러가지 자료를 참고하면서, Interface에 대한 정의나 비유가 비교적 알기쉽게 나와있는 것을

참고로 해서 설명을 드리고자 합니다.



추천은 블로거에게 큰 힘이 됩니다. 로그인 필요없이 손가락 버튼 클릭한번 부탁드릴게요^^

보다 나은 정보로 보답하겠습니다.

                                                                 




인터페이스

예를들어, 우리가 음식점에서 주문을 한다고 생각해봅니다.

메뉴판을 보고 메뉴를 선택하고 주문을 하게 되겠죠?? 물론 단골가게나 미리 정해놓은 메뉴를

주문할 경우를 제외하고선 말이죠(태클걸지 말아주세요 ㅠㅠ)

주문자 ---- 메뉴판 메뉴 선택 ---- 주방에서 음식준비

이런식으로 생각해볼수도 있겠죠?

인터페이스는 여기서 "메뉴판"의 역할이라고 볼 수 있겠습니다.

메뉴판에는 이 가게에서 어떤 음식을 만들 수 있는지 그 목록을 보여주는데요. 

메뉴에 없는 음식을 주문할수도 없고, 그 음식을 주방에선 만들수도 없습니다.

(물론 특별 케이스가 있긴 합니다만.. 식당에선.. 태클걸지 맙시다...ㅠㅠ)

바로, 고객이 호출할 수 있는 목록을 가진 메뉴판!! 그 목록을 가지고 있는다는 의미와

인터페이스가 구현할 메소드를 가지고 있다는 의미와 일맥상통한다고 생각해볼 수 있을 것 같습니다.

이제 음식점의 예는 접어두고요.



인터페이스는 단순히 상수와 메소드만을 갖고 있는 것을 의미합니다. 실제로 그 메소드의 기능은

정의되어 있지 않습니다. 그냥 이름만 떡하니 명시되어 있는것입니다.

그리고 그렇게 명시만 되어 있는 메소드를 추상메소드라고 합니다.



"인터페이스를 구현한다"라는 말을 사용하는데요. 이 말은 일반 클래스에서 implements 예약어 

사용해서 그 안에 있는 메소드를 전부 모조리 하나도 빠짐없이 오버라이딩한다는 것을 뜻합니다.

여기서 중요한 요점!!!! 하나도 빠짐없이 다 써버려야 한다는 것입니다.



다음의 예를 살펴보겠습니다.

interface Inter {

static final int A = 10 ;

abstract int getA() ;    //이 부분은 public이 앞에 생략되어 있습니다.(디폴트)

}//interface end


class InterExam implements Inter { 

public int getA() {

return A ;

}


public static void main(String[] args) {

InterExam one = new InterExam() ;

System.out.println("getA() :" + one.getA()) ;

}

}//class END


인터페이스는 일반멤버변수를 가질수 없기 떄문에 final 상수 선언을 해주었고, 추상메소드를 정의해주었습니다.

그 다음, 클래스 정의를 해주었는데요(class InterExam implements Inter{})

일반 클래스를 정의하면서 implements라는 예약어로 앞에서 정의된 인터페이스인 Inter를 구현하겠다는 것을

보여줍니다. 

인터페이스 Inter 를 상속하는 InterExam 클래스 안에서는 반드시 인터페이스의 메소드를 오버라이딩 즉

재정의 해주어야 하니까, 역시 그렇게 진행해주었습니다.

실행결과는 아래와 같습니다.

getA() : 10





인터페이스가 갖고 있는 모든 메소드를 일반 클래스에서 반드시 구현해야 한다면, 만약 메소드를 전부 

구현하지 않을 경우에는 어떻게 될까?

그렇게 되면 일반클래스는 추상클래스가 되어버립니다. 반드시 추상클래스이어야 한다는 표현이 맞겠습니다.

따라서 추상클래스를 다시 상속받아 일반클래스를 구현해야만 됩니다.

그래야 객체를 생성할 수 있기 때문입니다.


인터페이스 A가 3개의 추상메소드를 갖고 있습니다.

본래 일반클래스로 구현하려던 클래스 B가 A를 implements 해와서 구현했는데, 2개의 메소드만을 오버라이딩 해버렸습니다.

그럼 나머지 1개의 메소드를 반드시 구현해주어야 하겠죠?

그리고 인터페이스 A를 implements한 B는 2개의 메소드만을 구현했기 때문에, B는 추상클래스가

되어버렸습니다.

따라서, C라는 일반클래스를 만들어준 후 추상클래스인 B를 extends 해옵니다. 그리고 앞서 빠트렸던 나머지 추상메소드 1개를 마저 구현한 후 main()메소드를 통해 실행시키는 과정을 갖습니다.

결과적으로 C라는 일반클래스는 남은 메소드 1개 만을 구현했지만, B릉 상속받고, 또 B는 A를 상속받은 형태이기 때문에 C 일반클래스에서는 최종적으로 객체를 생성한 후 

 main()메소드에서 4개의 메소드를 실행시킬 수 있습니다.

위와 같은 과정을 갖게 되는 것을 기억하시면 되겠습니다^^



반응형

'IT > Java' 카테고리의 다른 글

Thread(스레드) - 시간 출력  (0) 2013.08.07
awt 기본(화면 띄우기)  (0) 2013.08.07
Java의 Generic(제너릭) 원리(간단정리)  (0) 2013.06.25
Generic 제너릭  (0) 2013.06.25
Java 다차원 배열  (0) 2013.06.24

loading