Skip to content

[Java]인터페이스

zeroam edited this page Sep 10, 2018 · 1 revision

인터페이스

자바에서 인터페이스(Interface)란 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구성하는 매우 중요한 역할을 한다.

자바 7이전까지는 인터페이스의 메소드는 실행 블록이 없는 추상 메소드로만 선언이 가능했지만, 자바 8부터는 인스턴스 메서드와 같은 디폴트 메서드와 정적 메서드도 선언이 가능하다



인터페이스의 선언

interface 인터페이스명 {

//상수  

타입 상수명 = 값;  

//추상 메서드  

타입 메서드명(매개변수,...);  

//디폴트 메소드  

default 타입 메서드명(매개변수, ...) {...};  

//정적 메서드  

static 타입 메서드명(매개변수) {...};

디폴트 메서드와 정적 메서드가 추가되긴 했지만, 추상 메서드를 대부분 사용하며, 추상메서드만으로도 인터페이스의 기능을 충분히 활용할 수 있다.



  • 상수 [public static final] 타입 MAX_VALUE = 값;

    • public static final의 특성을 갖는 변수, 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다
    • 상수명은 대문자로 작성하되 서로 다른 단어로 구성 되어 있을 경우 언더바(_)로 연결하는 것이 관례(ex.MAX_VALUE)
  • 추상메서드 [public abstract] 타입 메서드명(매개변수, ...);

    • 리턴타입, 메소드명, 매개 변수만 기술되고 중괄호 {}를 붙이지 않는 메서드
    • public abstract를 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.
  • 디폴트메서드 [public] default 타입 메서드명(매개변수, ...) { ... };

    • default가 리턴 타입 앞에 붙음
    • public 특성을 가지며 생략하더라도 컴파일 과정에서 붙게됨
    • 객체가 가지고 있는 인스턴스 메서드와 역할 동일
    • 추상 메소드가 아닌 인스턴스 메소드이므로 구현 객체가 있어야 사용할 수 있다.(선언만 한 경우에는 사용 불가능 - NullPointerException 발생)
    • 추상 메서드와 마찬가지로 재정의(오버라이딩) 가능
  • 정적메서드 [public] static 타입 메서드명(매개변수, ...) { ... };

    • 형태는 클래스의 정적 메소드와 동일
    • public 특성을 가지며 생략하더라도 컴파일 과정에서 붙게됨
    • 객체가 없어도 인터페이스 만으로 호출 가능

인터페이스의 예시

인터페이스의 예시



인터페이스의 구현

인터페이스는 클래스와 달리 상속의 개념이 아니라 구현의 개념이다. 상속의 경우 extends 뒤에 부모클래스명이 온다면, 인터페이스의 구현의 경우에는 implements 뒤에 인터페이스 명이 온다. 인터페이스를 구현한 클래스를 구현클래스라고 하며, 인터페이스에서 정의된 추상 메서드를 구현(오버라이딩)해야 한다.

public class 구현클래스명 implements 인터페이스명 {
	@Override //인터페이스에 선언된 추상 메서드를 구현
	타입 메서드명(매개변수) {...}
}


인터페이스 사용 방법

  • 인터페이스 변수를 선언하고 구현 객체를 대입함
인터페이스 변수;
변수 = 구현객체;

-----------or--------------

인터페이스 변수 = 구현객체;


익명 구현 객체

  • 소스 파일(구현 클래스)을 따로 만들지 않고도 구현 객체를 만들 수 있는 방법
인터페이스 변수 = new 인터페이스() {
	//인터페이스에 선언된 추상 메소드의 실체 메소드 선언  
}



인터페이스의 특징

  • 인터페이스는 객체지향 프로그래밍의 다형성을 이용하기 위한 방법이다
  • 구현 클래스는 여러개의 인터페이스를 구현 가능하다.(다중인터페이스 구현)
  • 구현 클래스에서 모든 메서드는 public보다 더 낮은 접근 제한으로 작성할 수 없다.(상속받는 인터페이스의 메서드의 접근 제한자가 모두 public이기 때문)
  • 개별코드에서 인터페이스는 클래스의 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있다.
  • 소프트웨어 공학적인 접근에서 클래스간의 결합도를 완화시키기 위한 방법으로 사용된다

참고문헌

  • 신용권(2015).「이것이 자바다」한빛미디어
Clone this wiki locally