인터페이스
- 클래스와 외형적으론 비슷하지만
- 클래스처럼 객체를 생성, 메서드 호출등이 불가능
- 몰라도 문제는 없지만 좀더 세련되고 단단한 코드 작성 가능
인터페이스란
- 클래스와 달리 객체를 생성할 수는 없음
- 클래스에서 구현해야 하는 작업 명세서
- 클래스의 경우
- 클래스에서 생성(new)과정을 거쳐 객체를 매모리에 생성, 레퍼런스로 접근해 속성과 메서드 사용
- 인터페이스
- 클래스에서 인터페이스를 구현하는 단계를 거침
- 인터페이스는 껍데기만 갖고 있고 상세한 내용은 없음
- 즉 선언만 되어있음
- 이걸 클래스에서 좀더 명확하게 정의해줌
- 이 클래스로부터 객체를 생성함
인터페이스를 사용하는 이유
- 인터페이스를 사용하는 이유는 많음
- 가장큰 이유는 개체가 다양한 자료형(타입)을 가질 수 있기 때문

- 만약에 한 클래스에 인터페이스 A B C D가 있다고 가정
- 인터페이스는 어떠한 작업이 있다고 알려주는 명세서의 역할
- 만약 각각의 인터페이스에 어떠한 기능이 있으면
- 클래스는 인터페이스 A B C D의 기능을 다 구현 가능
implements
키워드 사용해서 사용
인터페이스 구현
package testPjt;
public interface InterfaceA {
public void funcA();
}
package testPjt;
public interface InterfaceB {
public void funcB();
}
package testPjt;
public class InterfaceClass implements InterfaceA, InterfaceB{
public InterfaceClass() {
System.out.println("interfaceClass constructor");
}
@Override
public void funcA() {
System.out.println("this is function A");
}
@Override
public void funcB() {
System.out.println("this is function B");
}
}
package testPjt;
public class Main {
public static void main(String[] args) {
InterfaceA ia = new InterfaceClass();
InterfaceB ib = new InterfaceClass();
ia.funcA();
ib.funcB();
}
}
장난감 인터페이스
- Interface를 이용하면 객체가 다양한 자료형(타입)을 가질 수 있음!!
- 인터페이스를 사용하면 객체의 타입이 확장될 수 있다.
- 인터페이스에서 제공해주는 메서드에 따라 클래스의 성격에 맞게 다양하게 구현 가능
package com.java.toy;
public interface Toy {
public void walk();
public void run();
public void alarm();
public void light();
}
package com.java.toy;
public class ToyRobot implements Toy {
@Override
public void walk() {
System.out.println("robot walk");
}
@Override
public void run() {
System.out.println("robot run");
}
@Override
public void alarm() {
System.out.println("robot alarm");
}
@Override
public void light() {
System.out.println("robot light");
}
}
package com.java.toy;
public class ToyAirplane implements Toy{
@Override
public void walk() {
System.out.println("airplane walk");
}
@Override
public void run() {
System.out.println("airplane run");
}
@Override
public void alarm() {
System.out.println("airplane alarm");
}
@Override
public void light() {
System.out.println("airplane light");
}
}
package test;
import com.java.toy.*;
public class MainClass {
public static void main(String[] args) {
Toy robot = new ToyRobot();
Toy airplane = new ToyAirplane();
Toy toys[] = {robot, airplane};
for (int i = 0; i < toys.length; i++) {
toys[i].walk();
toys[i].run();
toys[i].alarm();
toys[i].light();
System.out.println("----");
}
}
}