자바 인터페이스에 대해서 알아보자.
인터페이스(Interface)
인터페이스는 일종의 추상클래스이다. 하지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메소드와 상수만을 멤버로 가질 수 있다. 인터페이스도 추상클래스 처럼 객체생성을 못한다.
인터페이스도 추상클래스처럼 완성되지 않은 불안전한 것이기 때문에 그 자체만으로 사용되기 보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 키워드로 class 대신 interface를 사용하며, 일반적인 클래스와 달리 인터페이스의 추상메소드는 public abstrac이어야 하며, 생략할 수 있지만 static메소드와 default메소드는 생략할 수 없다. 상수는 public static final이어야 하며 생략할 수 있다. 이러한 부분들은 모든 멤버에 예외없이 적용되는 사항이기 때문에 편의상 생략하는 경우가 많다.
또한 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속이 가능해 여러개의 인터페이스로부터 상속을 받는 것이 가능하다. 클래스의 상속과 마찬가지로 자손 인터페이스는 조상 인터페이스에 정의된 멤버를 모두 상속받는다. 인터페이스가 인터페이스를 상속받을 때는 추상클래스와 비슷하기 때문에 오버라이딩할 필요가 없다.
다만, 일반클래스가 인터페이스를 상속(구현)할때는 구현한다는 의미의 키워드 implements를 사용하며, 부모 인터페이스의 추상메소드를 반드시 오버라이딩을 해야하며, 그래야 자식클래스 객체 생성이 가능하다.
인터페이스의 특징들을 정리해보면 아래와 같다.
- 인터페이스는 interface 예약어로 정의한다. 인터페이스는 객체 생성을 못한다.
- 하나 이상의 부모로부터 다중상속이 가능하다.(interface extends interface2, interface3,...) 인터페이스도 추상클래스와 비슷하기 때문에, 자식인터페이스에서 오버라이딩 할 필요가 없다.
- 인터페이스에 public static final로 인식되는 상수와 public abstract로 인식되는 추상메소드만 올 수 있다.
- 인터페이스는 자식클래스에서 implements 키워드로 구현한다. 다중구현이 가능하다(class implements interface, interface2). 상속받은 자식클래스에서 부모 인터페이스의 추상메소드를 반드시 오버라이딩을 해야하며, 그래야 자식클래스 객체 생성이 가능하다.
ex)
하나 이상의 부모로부터 다중상속이 가능하다. 인터페이스도 추상클래스와 비슷하기 때문에, 자식 인터페이스에서 오버라이딩 할 필요가 없다. 하지만 일반클래스에서 구현할 때는 부모인터페이스의 메소드를 오버라이딩을 해야한다. 또한 클래스 또는 추상 클래스는 다중상속을 받을 수 없다.
ex)
인터페이스 구현 및 클래스를 상속을 같이 받으려면, extends 클래스를 먼저 작성한 후 implements 인터페이스를 해야한다. 반대가 되면 에러가 발생한다.
ex)
참조변수 parser에 ParserManager.getParser()메소드를 호출하고 매개변수를 "XML"으로 한다. 여기서 해당 메소드에서 if조건문에 걸려 new XMLParser();가 리턴되므로 해당 문장은 parser=new XMLParser();(업캐스팅)으로 볼 수 있다. 여기서 parser.parse("abc.xml")를 호출하면 XMLParser에서 오버라이딩 된 parse()메소드가 호출된다.
'언어공부 > Java' 카테고리의 다른 글
자바 Object클래스의 메소드 - toString() (0) | 2021.05.21 |
---|---|
자바 Object클래스의 메소드 - equals() (0) | 2021.05.20 |
자바 final 키워드 (0) | 2021.05.18 |
자바 추상 클래스(Abstract Class), 추상 메소드(Abstract Method) (0) | 2021.05.17 |
자바 매개변수의 다형성 (0) | 2021.05.15 |