CODEDRAGON ㆍDevelopment/Java
인터페이스(Interface)
· 인터페이스는 TV나 오디오의 리모콘이나 음식점의 메뉴판에 비유할 수 있습니다.
· 리모콘으로 채널을 조작하게 되는데 리모콘 자체가 무언가 보여주지는 않습니다. 또 메뉴판을 보고 원하는 음식을 주문하게 되는데 메뉴판 자체가 음식을 만들어주지는 않습니다.
· 사용자가 선택한 실제 TV프로그램은 전파를 타고 TV수신기를 통해 TV모니터상에 보여주게 됩니다. 사용자가 선택한 실제 음식은 주방에서 만들어져 나오게 됩니다.
· 리모콘과 메뉴판은 사용자가 주문할 수 있는 "서비스의 목록(기능 목록)"을 제공하고 있습니다.
· 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.
구분 |
구성요소 |
추상 클래스 |
추상 메소드와 생성자, 필드, 일반 메소드도 포함 |
인터페이스 |
추상 메소드와 상수만을 포함 |
인터페이스 선언
· 인터페이스 내에는 상수 또는 추상 메서드들만 정의가 가능합니다.
· 인터페이스를 사용하기 위해서는 일반 클래스에서 구현(implements)을 해야 합니다.
· 일반 클래스에서 "implements"라는 예약어로 특정 인터페이스를 구현하겠다고 명시해야 합니다
· 이렇게 한 후 명시한 인터페이스가 가지는 추상 메서드들은 구현 받은 클래스에서 하나도 빠짐없이 Overriding(재정의)해야 합니다.
· 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야 합니다. 하지만 생략할 수도 있습니다. 이렇게 생략된 제한자는 컴파일 시 자바 컴파일러가 자동으로 추가해 줍니다.
[접근제한] interface [인터페이스명] {
public static final 상수;
public abstract 추상메서드;
} |
인터페이스의 기본 구성과 구현
인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수는 없습니다.
따라서 인터페이스가 포함하고 있는 추상 메소드를 구현해 줄 클래스를 작성해야만 합니다.
class 클래스이름 implements 인터페이스이름 {
} |
인터페이스 정의 및 사용 단계
단계 |
설명 |
TODO 1 |
인터페이스 정의 |
TODO 2 |
class에 implements구현하고 인터페이스 추상 메소드 구체화 |
TODO 3 |
class의 객체 생성 |
TODO 4 |
객체를 통해 메소드 호출 |
//TODO 1: 인터페이스 정의(인터페이스 선언) interface InterfaceTest { //상수 또는 추상메서드만 정의 가능 static final int A = 100; //abstract예약어는 생략 가능! abstract int getA(); }
//TODO 2: class에 implements구현하고 인터페이스 추상 메소드 구체화 //implements라는 예약어로 인터페이스 구현 public class InterEx05 implements InterfaceTest{
//추상메서드 재정의 @Override public int getA(){ return A; } public static void main(String[] args) { //TODO 3: class의 객체 생성 InterEx05 itex1 = new InterEx05(); //TODO 4: 객체를 통해 메소드 호출 System.out.println("getA(): "+itex1.getA()); } } |
'Development > Java' 카테고리의 다른 글
추상 클래스의 상속 관계 - 추상 클래스 관련 동일한 용어 정리, 상속 받는 추상 클래스를 작성, 상속 받는 하위 클래스 작성 (0) | 2017.09.27 |
---|---|
인터페이스의 상수 (0) | 2017.09.26 |
final 예약어 - final 적용(변수, 메소드, 클래스), final로 상수화된 값을 변경할 경우 컴파일 에러 발생 (0) | 2017.09.26 |
instanceof 연산자 (0) | 2017.09.26 |
객체간의 형변환, 업 캐스팅/다운 캐스팅, 형변환 형식, 호출영역 (0) | 2017.09.26 |