본문으로 바로가기

[JAVA] 인터페이스 ( interface )

category 프로그래밍/JAVA 2020. 2. 17. 16:13
728x90
반응형

자바의 인터페이스라는 개념에 대해 알아보겠습니다.

먼저 예제를 한개 보고 소스 분석을 하도록 하겠습니다.

 

 

 

 

 

 

-----------------------------------------------------

-인터페이스 예제


interface TestCar {
   String COLOR_BLACK = "BLACK";
   String COLOR_WHITE = "WHITE";

   abstract void start();
   abstract void stop();
}

class Car1 implements TestCar {
   
   @Override
   public void start() {
      System.out.println("Car Start!!!!!!!!!!!!!");
      System.out.println("color : " + COLOR_BLACK);
   }
   
   @Override
   public void stop() {
      System.out.println("Car Stop!!!!!!!!!!!!!");
   }
   
}

class Car2 implements TestCar {
   
   @Override
   public void start() {
      System.out.println("자동차 출발!!!!!!!!!!!!!");
      System.out.println("색깔 : " + COLOR_WHITE);
   }
   
   @Override
   public void stop() {
      System.out.println("자동차 멈춤!!!!!!!!!!!!!");
   }
   
}


public class ScanMain {

   public static void main(String[] args) {
      Car1 car1 = new Car1();
      car1.start();
      car1.stop();
      
      Car2 car2 = new Car2();
      car2.start();
      car2.stop();
   }
}

----------------------------------------------------

인터페이스는 추상 메소드만을 가지고 있습니다.

즉, 선언만 되어있지 구현은 하나도 되어 있지 않은 빈 깡통입니다.

변수도 선언을 할 수 있지만, 변수는 상수가 되어 버립니다.

인터페이스는 몇 가지 조건이 있습니다.

1. 인터페이스 안에 선언된 변수는 public static final이 됩니다. 즉, 상수가 되어 버립니다.

제가 소스에서는 String으로 선언했지만, public static fianl String이 되어 버립니다.

2. 인터페이스 안에 선언된 추상 메소드는 public abstract가 됩니다.

무조건 추상 메소드가 됩니다.

3. 일반 클래스와 마찬가지로 메소드 오버라이딩이 됩니다.

선언을 했으니, 반드시 상속을 받는 곳에서 구현을 해야됩니다.

먼저 TestCar 인터페이스를 보면 2개의 변수와 2개의 추상 메소드가 있습니다.

위에서 말했다시피 2개의 변수는 public static final String이 됩니다.

2개의 메소드는 public abstract가 됩니다. 즉, 추상 메소드가 됩니다. 선언만 되어 있습니다.

상속에 대해 알아 보겠습니다.

Car1, Car2는 자식 클래스가 되고, TestCar는 부모가 됩니다.

여기서 일반적인 상속과 다른 점이 있는데 extends가 아닌 implements가 됩니다.

인터페이스를 상속받으려면 implements를 사용하고, 다른 클래스를 상속받으려면 extends를 사용하여 구분합니다.

Car1, Car2는 TestCar 인터페이스의 추상 메소드인 start, stop를 구현해야 됩니다.

인터페이스는 다중상속을 지원합니다.

implements 뒤에 여러 가지의 인터페이스를 상속받을 수 있습니다.

인터페이스이기 때문에 가능합니다.

오늘 포스팅은 여기까지 하겠습니다.

728x90
반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[JAVA] Maven이란?  (0) 2020.03.03
[JAVA] DAO? DTO? VO?  (0) 2020.03.03
[JAVA] 추상 클래스 ( abstract class )  (0) 2020.02.14
[JAVA] 특정 format에 맞게 시간 출력  (0) 2020.02.14
[JAVA] JMS ( Java Message Service )  (0) 2020.02.11