Java/Java

자바[Java] 인터페이스(interface)란? 개념정리

백엔드 신입사원( soft 5.10 입사) 2021. 10. 14. 14:50
반응형

인터페이스(interface)

  인터페이스는 추상 클래스 위에 자리하고 있습니다. 추상 클래스는 실체 클래스의 공통된 필드와 메소드의 이름을 통합할 목적으로 사용된다면 인터페이스는 사용하려는 클래스가 객체에 종속되지 않게  하는 역할입니다. 다만 언제든지 변경할 수 있습니다. 

인터페이스는 사용하려는 클래스의 코드 변경 없이 리턴 값 또는 실행 내용이 다양해질 수 있습니다. 인터페이스를 구현하기 위해서는 implements로 선언 해준 뒤 사용하며, 인터페이스는 상수 필드가 붙는 변수들만 선언이 가능하며 데이터는 저장하지 않습니다. 인터페이스에 선언된 필드는 자동적으로 public static final이 자동적으로 붙어 있고, 인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행되며 인터페이스의 메소드는 기본적으로 실행 불록이 없는 추상 메소드로 선언합니다. public abstract를 생략해도 자동으로 컴파일 과정에서 붙게 됩니다.


인터페이스(interface) 구현한 클래스

인터페이스의 추상 메소드에 대한 실체 메소드를 가진 객체이며 자신의 객체가 인터페이스 타입으로 사용할 수도 있습니다.

예시. 인터페이스의 선언  
public  interface  test {  
//상수  
//추상메소드  
//디폴트메소드  
//정적메소드  
}
예시. 인터페이스의 구현  
public class test1  implements  test {  
  
  
}

 

인터페이스가 작성된 코드의 간단하며 해당 내용으로 예제를 만들어보자면

public class King {  
public static void main(String[] args){  
test me; //인터페이스를 활용할수있게 me라는이름을 주고  
me = new test1();  // me는 test1에서 인터페이스가 구현된  
//내용을 같기위해 test1의 값을 받는다고 선언한다.  
}  
}  

 

 

public interface Carinterface {  
//상수  
int MAX_SPEED = 100;  
int MIN_SPEED = 0;  

  
//추상 메소드  
void powerOn();  
void powerOff();  
void setSpeed(int Speed);  
}

public class Car implements Carinterface {  
//필드  
private int setSpeed;  
  
public void powerOn() {  
System.out.println("시동~");  
}  
public void powerOff() {  
System.out.println("시동 꺼~");  
}  
  
public void setSpeed(int setSpeed) {  
if(setSpeed>Carinterface.MAX_SPEED) {  
this.setSpeed = Carinterface.MAX_SPEED;  
} else if (setSpeed<Carinterface.MIN_SPEED) {  
this.setSpeed = Carinterface.MIN_SPEED;  
} else {  
this.setSpeed = setSpeed;  
}  
System.out.println("속도: " + setSpeed + "Km");  
  
}  
  
}

 

public class CarInterfaceExample {  
public static void main(String [] args) {  
Carinterface MeCar; // 인터페이스를 가져와 mecar로 선언하고  
MeCar = new Car(); // 선언된 mecar은 Car의 내용을 갖는다.  
MeCar.powerOn(); // Car에서 설정된 내용이 실행된다.  
MeCar.setSpeed(50);  
MeCar.setSpeed(70);  
MeCar.setSpeed(100);  
MeCar.powerOff();  
}  
}

 

익명 구현 객체

  명시적인 클래스 작성을 생성하고 바로 객체를 얻는 것을 뜻하며 장점으로는 한번 쓰고 버릴 것이라 굳이 클래스를 더 만들지 않고 사용할 클래스에 정의해서 바로 사용할 수 있습니다. 익명 구현 객체는 하나의 실행문이므로 끝에는 세미콜론 을 붙여야 하며 다중 인터페이스 구현 클래스 인터페이스 사용은 사용할 코드 안에 인터페이스를 선언해 주고 인터페이스의 내용을 가져와 작업합니다.


인터페이스의 선언

public interface test {  
//상수   
//추상메소드  
//디폴트메소드   
//정적메소드  
}

익명 구현 객체

public test1 {  
  
public static void main(String[] args){  
**test A = new test() {**  
**/ * 실행문 */**  
**};**  
}  
}

다중 인터페이스

Public class test2  **implements test, abcd**{  
  
  
}  

interface에 추상 메소드 사용

인터페이스에 객체가 준비되면, implements에서 바로 사용할 수 있게 만들고 실행되게 합니다.

public **interface** test {  
void turnOn();  
}

예시. implements  
public class A  **implements**  test{  
//필드  
  
// 추상 메소드의 실체 메소드를 만든다.  
public void turnOn() {  
System.out.println("AAA");  
}  
  
  
}

public class TOTOTO {  
public static void main(String[] args){  
test c = null; // test 인터페이스 에 내용을 C라는 변수에 선언  
c = new a(); // A의 객체를 C에 대입  
c.turnOn(); // 호출  
}  
  
}

인터페이스 다중 상속

인터페이스는 다른 인터페이스를 상속할 수 있고, 클래스와는 달리 다중 상속을 허용하고 extends 키워드 뒤에 상속할 인터페이스를 나열합니다.

public class ooo  extends inter1, inter2  { ..... }

상위 인터페이스를 하위 인터페이스에 다중 상속시킨 뒤. 하위 인터페이스를 구현할 수도 있습니다.(다중 인터페이스 구현과도 비슷한 방식)

public interface inter1 { // 상위  
public void A();  
}

public interface inter2 { //상위  
public void B();  
}

public interface inter3 extends inter1, inter2 {  
public void C();  
} // 하위

public class inert3Test implements inter3 {  
public void A(){ // 하위 인터페이스 구현.  
system.out.println("A");  
}  
public void B(){  
system.out.println("B");  
}  
public void C(){  
system.out.println("C");  
}  
}

 

반응형