인터페이스는 객체와 객체의 소통 수단이다. 객체를 부속품화 할 수 있다는 것이다.
인터페이스의 문법
실제 기능 X - 구현된 기능은 X. 추상메소드와 상소만이 존재한다.
Private X – 상수를 만들 때 private 접근 제한자는 X.
추상화 – 메소드는 무조건 추상 메소드만 존재 한다.
객체타입 – 인터페이스는 객체는 아니다. 다만, 객체 타입으로만 사용가능하다. 구현은 실행 되는 객체의 메소드에서 한다.
가장 중요한 것은 상수와 추상메소드만 존재한다는 것이다.! 또한, 다형성의 특징을 가지고 있기 때문에 여러 인터페이스를 받을 수 있다.!
예제를 통해 알아보자.
IFunction.java
package com.javalec.interfacephone;
public interface IFunction {
void callSenderReceive();
void canLte();
void tvRemoteController();
}
인터페이스의 구조는 이렇게 이루어져있다. 여기서 추상메소드를 만들고 이것을 받는 클래스가 저 3가지 메소드를 모두 구현하는 것이다.
APhone.java
package com.javalec.interfacephone;
public class APhone implements IFunction{
@Override
public void callSenderReceive() {
System.out.println("가능 합니다.");
}
@Override
public void canLte() {
System.out.println("불가능 합니다. 3G 입니다.");
}
@Override
public void tvRemoteController() {
System.out.println("미탑재 되어 있습니다.");
}
}
override를 통해 모든 메소드를 재정의 해줘야한다. 왜냐하면 인터페이스에 추상메소드로 정의해놓았기 때문이다. 인터페이스를 상속 받을 때는 implements를 사용해서 받는다.
BPhone.java
package com.javalec.interfacephone;
public class BPhone implements IFunction {
@Override
public void callSenderReceive() {
System.out.println("가능 합니다.");
}
@Override
public void canLte() {
System.out.println("가능 합니다. 4G 입니다.");
}
@Override
public void tvRemoteController() {
System.out.println("탑재 되어 있습니다.");
}
}
APhone과 같은 구조이다. 이 또한 인터페이스를 사용했기 때문에 모두 재정의 해주었다.
CPhone.java
package com.javalec.interfacephone;
public class CPhone implements IFunction {
@Override
public void callSenderReceive() {
System.out.println("가능 합니다.");
}
@Override
public void canLte() {
System.out.println("가능 합니다. 4G 입니다.");
}
@Override
public void tvRemoteController() {
System.out.println("미탑재 되어 있습니다.");
}
}
CPhone도 APhone, BPhone과 같은 구조이다.
MainClass.java
package com.javalec.interfacephone;
public class MainClass {
public static void main(String[] args) {
// APhone aPhone = new APhone();
// BPhone bPhone = new BPhone();
// CPhone cPhone = new CPhone();
IFunction aPhone = new APhone();
IFunction bPhone = new BPhone();
IFunction cPhone = new CPhone();
IFunction[] iFunctions = {aPhone, bPhone, cPhone};
for (int i = 0; i < iFunctions.length; i++) {
iFunctions[i].callSenderReceive();
iFunctions[i].canLte();
iFunctions[i].tvRemoteController();
System.out.println();
}
}
}
원래 객체를 생성할 때는 주석처리 된 것처럼 생성자를 통해서 생성했다. 하지만 상속과 같이 인터페이스 또한, 인터페이스를 통해 객체를 생성할 수 있다. 왜냐하면 인터페이스를 사용하고 있기 때문이다!
출력
가능 합니다.
불가능 합니다. 3G 입니다.
미탑재 되어 있습니다.
가능 합니다.
가능 합니다. 4G 입니다.
탑재 되어 있습니다.
가능 합니다.
가능 합니다. 4G 입니다.
미탑재 되어 있습니다.
위처럼 출력되는 것을 알 수 있다.
간단하게 인터페이스의 구조를 알아보았다. 인터페이스는 정말 유용하게 사용된다. 겹치는 것을 미리 만들어두고 각 객체마다 다르게 구현해주면 된다!