인터페이스

썩은요플렛's avatar
Jul 30, 2024
인터페이스
 
 
  • 인터페이스(interface)란 각자의 클래스를 다른 사람의 클래스와 연결하려면 클래스간의 상호작용을 기술하는 일종의 규격(규칙)이 있어야 한다. 이를 인터페이스(interface)라 한다.
  • 인터페이스class 키워드를 사용하지 않고, interface를 사용한다.
 
public interface Remocon{ //추상 메서드 정의 public void turnOn(); // 제품을 켠다 public void turnOff(); // 제품을 끈다
 
 
 
package ex07; interface Remocon { // 메서드 강제 void on(); // public abstract 생략이 가능하다 void off(); } //인터페이스는 무조건 규칙을 먼저 만들어 주어서 강제시켜야한다. //ex) 내가 컨테이너를 만들었으니 너희가 여기에 맞게 트럭 만들어!! //ex) 내가 리모컨 기능을 만들었으니 너희가 여기에 맞게 리모컨을 만들어!! //인터페이스는 이세상에 존재하지 않아 오브젝트가 아님 //인터페이스는 메서드를 강제 //메서드는 무조건 이 인터페이스에 맞춰서(implements) 만들어야 class SamsungRemocon implements Remocon { @Override public void on() { System.out.println("삼성 리모건 on"); } @Override public void off() { System.out.println("삼성 리모컨 off"); } } class LgRemocon implements Remocon { @Override public void on() { System.out.println("LG리모컨 on"); } @Override public void off() { System.out.println("LG리모컨 off"); } } /** * 작성자 : 홍길동 * 날짜(작성일) : 2023.12.26 * 구현체 : SamsungRemocon, LgRemocon * 구현체가 적혀있지 않다면 쓸 수가 없다. */ class CommonRemocon { //[Remocon, SamsungRemocon] //[Remocon, LgRemocon] private Remocon r; // 인터페이스 or 추상클래스 public CommonRemocon(Remocon r) { this.r = r; } public void on() { r.on(); //[Remocon, SamsungRemocon] } public void off() { r.off(); } } public class InterEx01 { public static void main(String[] args) { CommonRemocon cr = new CommonRemocon(new SamsungRemocon()); //()안에 new Remocon()쓸 수없다. Remocon은 오브젝트(인터페이스 이기때문에)가 아니다 때문에 객체를 확인해야한다. cr.on(); // Remocon samsung = new SamsungRemocon(); // [Remocon , SamsungRemocon] 두개의 메모리가 뜬다. // samsung.on(); //Remocon을 때리고 그 Remocon이 SamsungRemocon을 때리는 원리 } } //동적바인딩
 
D:\tools\jdk-21.0.1\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\lib\idea_rt.jar=53313:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\workspace\java_lec\study\out\production\study ex07.InterEx01 삼성 리모건 on Process finished with exit code 0
 
 

인터페이스의 장점

 
  1. 다중 상속의 제공: 자바에서는 클래스는 다중 상속을 지원하지 않지만, 인터페이스는 다중 상속을 제공합니다. 클래스는 하나의 클래스만 상속할 수 있지만, 인터페이스는 여러 인터페이스를 구현할 수 있어 다양한 기능을 조합하여 클래스에 제공할 수 있습니다.
  1. 코드 재사용 및 유연성: 인터페이스는 다른 클래스들에 의해 여러 번 구현될 수 있으며, 이를 통해 코드의 재사용성을 증가시킵니다. 또한, 여러 클래스에서 동일한 인터페이스를 구현함으로써 서로 다른 객체들을 동일한 방식으로 다룰 수 있어 유연성을 제공합니다.
  1. 계약(Contract) 규약 제공: 인터페이스는 클래스가 반드시 따라야 하는 계약(Contract)을 정의합니다. 클래스가 특정 인터페이스를 구현한다는 것은 해당 인터페이스가 정의한 메서드를 반드시 구현해야 함을 의미합니다. 이는 코드 작성자 간의 약속이나 규약을 제공하여 프로그램의 안정성을 높이고 협업을 용이하게 합니다.
  1. 코드의 결합도 감소: 인터페이스는 클래스 간의 결합도를 낮추어 줍니다. 클래스는 인터페이스의 메서드를 호출하고 의존할 뿐, 구현에 대해서는 신경 쓸 필요가 없기 때문에, 클래스 간의 결합도가 낮아져 유지보수와 확장이 용이해집니다.
  1. 프로그램의 일관성 유지: 여러 클래스가 동일한 인터페이스를 구현하면서, 이러한 일관된 방식으로 특정 동작을 수행할 수 있도록 도와줍니다. 이로 인해 프로그램의 일관성이 유지되고 코드를 이해하고 유지보수하기 쉬워집니다.
 
Share article

RottenYogurt's Development Blog