반응형

인터페이스(Interface)

abstract클래스의 한 종류로 포함멤버의 제약을 가진다.

순수하게 클래스의 디자인을 목적으로 한다.
다중 상속이 가능한 유일한 클래스이며 이를 통해 여러 형태로 객체형 변환이 가능하게 한다.
유일하게 interface를 이용하면 다중상속이 가능

 

public static final 멤버필드
    static final을 명시하지 않아도 디폴트로 지정
public abstract 멤버 메서드
    public abstract를 명시하지 않아도 디폴트로 지정
public static inner 클래스

 

인터페이스 문법 예제

package exam;

interface A {// 추상 클래스
	
	// 인터페이스 멤버 필드
	int a = 10;// 자동으로 static final이 붙는다.
	public static final int b = 20;// 이것이 원형. 상수만 선언가능

	// 인터페이스 멤버 메서드
	int result();// 자동으로 public abstract 가 붙는다.
	public abstract void disp();// 이것이 원형이다. 추상 메서드만 선언가능
	
}

class B implements A {// 인터페이스 구현체 정의(상속)
	
	public int result() {// 오버라이딩 구현
		return 10;
	}

	public void disp() {// 부모의 추상메서드를 재정의 해야 객체 생성가능
		System.out.println("상속 받아 구현한 disp()메서드");
	}
	
}

public class Exam {
	public static void main(String[] args) {
		// A ob1 = new A();//객체 생성 불가능(주석 해제 시 컴파일 에러!)
		B ob2 = new B();// 구현된 클래스로 객체생성 가능
		A ob3 = ob2; // 인터페이스 타입으로 하위 객체 참조 가능(업 캐스팅)
		ob3.disp(); // 오버라이딩 된 메서드 사용 가능
	}
}

 

실행결과

 

 

주요개념
    추상클래스와 같이 interface타입도 참조변수로는 사용 가능
    interface를 interface에서 상속 시 extends사용
    interface를 클래스에서 상속 시 extends가 아니라 implements를 사용한다.
    Java1.8에서는 interface안에 static 메서드와 default메서드 선언이 가능

다음 예제에 추가한 메서드 형태가 새로이 추가된 형태이다.

public interface A {// 추상 클래스

	// 인터페이스 멤버 필드
	int a = 10;// 자동으로 static final이 붙는다.
	public static final int b = 20;// 이것이 원형. 상수만 선언가능

	// 인터페이스 멤버 메서드
	int result();// 자동으로 public abstract 가 붙는다.

	public abstract void disp();// 이것이 원형이다. 추상 메서드만 선언가능

	public default void defMethod() { // java 1.8에서 추가
		System.out.println("기본 메서드");
	}

	public static void classMethod() { // java 1.8에서 추가
		System.out.println("기본 메서드");
	}
}

 

인터페이스 사용은?
인터페이스는 여러 종류의 객체들을 연결 짓는 개념으로 중간자 역할을 하는 타입으로 사용된다.
이는 자바 컬렉션과 입출력 클래스, GUI관련 클래스를 사용하는 부분에서 많이 보게 된다.

또는 개발 시 협업을 하는 경우 인터페이스를 만들어 여러 종류의 하위 클래스에
반드시 오버라이딩 할 메서드를 지정하는 용도로도 사용한다. (여러 개발자의 이름 일관성 유지)

 

일단은 문법적으로 이해를 먼저 하도록 한다.

 

반응형

'교육자료 > Java' 카테고리의 다른 글

Java Collection part2  (0) 2017.06.28
Java Collection part1  (0) 2017.06.27
Java 추상 클래스(abstract class)  (0) 2017.06.25
Java 객체 비교하기  (0) 2017.06.25
Java 클래스 구성 요소(다형성)  (0) 2017.06.25

+ Recent posts