반응형

자바 인터페이스

인터페이스는 추상 클래스(Abstract Class)의 일종으로 추상 클래스와 같이 추상 메소드를 같지만 값이 변하는 일반 멤버 변수는 가질 수 없습니다. JDK 1.8 이전 버전에서는 몸통(구현부)이 있는 일반 메소드를 가질 수 없었으나 JDK 1.8 버전부터는 디폴트 메소드와 정적 메소드 구현이 가능해졌습니다. 인터페이스는 inteface 키워드를 통해 선언하며 기능을 물려받는 클래스는 추상 클래스를 물려받는 것과는 다르게 상속(extends)이 아닌 구현(implements)한다고 표현합니다.

interface 인터페이스명 {
	
    // 상수 선언
    public static final 타입 상수이름 = 값;
    
    // 추상 메소드 선언
    public abstract 타입 메소드명();
	
    // 디폴트 메소드
    default 타입 메소드명();
    
    // 정적 메소드
    static 타입 메소드명() {
    	// 구현부
    }
}

위와 같이 상수, 추상 메소드, 디폴트 메소드, 정적 메소드를 구성원으로 가질 수 있습니다.

인터페이스를 사용하는 이유

인터페이스를 사용하면 구현하는 클래스에게 일부 구성원 구현에 대해 강제할 수 있습니다. 추상 메소드를 오버라이딩을 통해 구현해야 하며 인터페이스가 제공하는 정적 메소드를 무조건 사용해야 합니다. 이는 자바의 다형성을 극대화하여 코드의 생산성을 높이고 프로그램 유지, 보수의 용이성을 높이기 위함에 있습니다.

인터페이스의 구현

인터페이스도 추상 클래스와 마찬가지로 혼자서는 객체를 생성할 수 없습니다. 즉 추상 클래스가 하위 클래스에서 상속을 통해 추상 메소드를 완성시키는 것과 같이 인터페이스도 구현 클래스에서 추상 메소드를 완성시킵니다.

class 클래스명 implements 인터페이스명 {
	
    // 인터페이스를 구현하면 인터페이스에 선언된 추상 메소드를 반드시 구현해야 합니다.
    
}

인터페이스와 추상 클래스의 차이

얼핏 봤을 때 인터페이스와 추상 클래스는 구현(implements)하고, 상속(extends)한다는 키워드만 제외하고 보면 둘 다 추상 메소드를 갖으며 스스로 객체를 생성할 수 없다는 점에서 같아 보입니다. 하지만 자바에서는 추상 클래스의 다중 상속을 막아두었기 때문에 인터페이스를 통해 다중 상속을 할 수 있고 구현하는 모든 클래스에 대해 특정한 메소드를 반드시 구현하도록 강제할 수 있습니다.

반응형

+ Recent posts