본문 바로가기
JAVA

[JAVA 개념3]인터페이스

by 자유데이터 2018. 11. 11.
반응형

1.인터페이스개념

  • 개발 코드가 특정 객체에 종속되지 않게 하고 다른 객체가 와도(변경이 되어도) 가능하게 한다.
  • 개발  코트 변경 없이 리턴값 또는 실행 내용이 다양해 질 수 있다.(다형성이 가능하다.)





2.구성 요소

    1)상수 // 타입 상수명 = 값;

  • 인터페이스는 상수 필드만 선언 가능하고 동시에 초기값 지정해야 한다.
  • 선언된 필드는 모두 자동적으로 public static final이 붙는다. 
  • 상수명은 대분자로 작성한다.
            
    2)추상 메소드 // 타입 메소드명(매개변수,....);
            
        인터페이스에 추상메소드는 프로토콜 타입으로만 지정하고 구현할때 재정의해야 한다.
        즉, 규격으로서 사용된다. 객체를 구현 객체(구현 클래스)라고 하는데 반드시 추상 메소드를 구현해야 한다.

    
    3)디폴트 메소드 // default 타입 메소드명(매개변수,...){....}
      
  • 실행블록을 가지고 있다.(바디가 있다.)      
  • 반드시 default를 붙여야 한다.
  • 인터페이스에서 접근제한자는 모두 public이다.

     4)정적 메소드 // static 타입 메소드명(매개변수,...){....}

          
**default와 static

-공통점 

기능 추가의 기능을 한다.

-차이점

default는 인스턴스 메소드로 객체가 반드시 필요하다.
예를들어 사람이라는 객체가 사용되는 상황이면, 달린다/배운다 등 사람과 관련된 메소드 즉, 기능에 해당한다.
그리고 객체를 통해 호출하지만 사실상 객체가 존재하지 않는다.(자바의 특성(객체 지향)을 살리기 위한 억지)

static는 정적 메소드로 객체가 필요없다. 따라서 객체가 필요없는 상황에서 쓰이게 된다.
예를들어 사람이라는 객체가 사용되는 경우, static은 사람과 관계없는 메소드인 경우에 사용된다.


예제를 통해 알아보자))

개발코드(InterfaceExample) - 인터페이스(Interface1) - 구현클래스(ImplClass)

먼저 인터페이스를 만든다.
앞서 설명했듯이 인터페이스는 상수, 추상메소드, 디폴트, 정적메소드 이 4가지만 들어갈 수 있다.
따라서 모두 보여주기 위해 4가지 전부 설정해준다.




2번(상수)과 4번(정적메소드)에서는 인터페이스에서 바로 호출할 수 있다.(객체가 필요없기 때문)
1번(추상메소드)과 3번(디폴트메소드)은 객체가 필요하기 때문에
인터페이스를 참조한 if(변수)에 인터페이스에서 상속받은 Implclass 객체를 만들어 선언한다.(다형성1을 활용)


3.구현

public class 구현클래스명 implements 인터페이스명{          
        //인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}                                                                              

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


 ***익명 구현 객체
  • 인터페이스의 추상 메소드들을 모두 재정의하는 실체 메소드가 있어야한다.
  • 추가적으로 필드와 메소드 선언 가능하나 익명 객체 안에서만 사용가능하다.

참고)자바에는 익명객체가 두 가지 있다.
             1)익명구현객체 : 인터페이스를 구현하는 이름이 없는 객체
             2)익명자식객체 : 부모 클래스를 상속받는 이름이 없는 객체

익명 구현 객체는 실제로 많이 쓰는 기능으로 아주 중요한 개념이다.
쉽게 말하면, 인터페이스 사용할때 임시의 클래스가 생성되어 구현객체를 따로 생성하는 번거로움이 사라진다.
(위의 예시에서 볼때, ImplClass를 생성하지 않아도 된다는 뜻!!)

예시를 통해 더 자세히 알아보자.

익명구현객체))
인터페이스(I) - 메인클래스(Ex)

단순한 인터페이스 하나 만든 후, 
구현클래스 없이 바로 실행한다.
여기서 중요한 익명구현객체 구현하는 방법은 다음과 같다.

인터페이스 변수 = new 인터페이스() {                                   
        //인터페이스에 선언된 추상 메소드의 실체 메소드 선언      
};                                                                                   


설명은 주석에 아주 자세히 달아놓았다.


























반응형

댓글