JAVA

인터페이스(interface)

jiyoon12 2025. 4. 26. 14:52
  • 객체의 동작을 정의하는 추상 타입이다.
  • 구현 세부사항을 포함하지 않는다.
  • 메서드의 시그니처(이름, 매개변수, 반환 타입)만 정의하며, 이를 구현하는 클래스가 실제 동작을 제공한다.
  • 모든 메서드가 추상 메서드로 선언된다.( public abstract)
  • 모든 변수는 상수로 선언된다.(public static final)
package com._interface;
// HOW - interface 선언하면 된다.
// 여기 안에 선언된 메서드는 모두  추상 메서드가 되어야 한다.
// WHY

public interface Animal {

    // 메서드 선언부만 있고 바디가 없다.
    public abstract void eat();
    // 생략이 가능하다. abstract 키워드
    // public abstract void move();
    void move();
}
package com._interface;

// 인터페이스는 구현받다, 구현하다.
// Animal 인터페이스를 구현받다
public class Dog implements Animal {
    // 문법
    // 추상 메서드를 구현 메서드로 재정의 해야 한다

    @Override
    public void eat() {
        System.out.println("강아지가 먹이를 먹습니다.");
    }

    @Override
    public void move() {
        System.out.println("강아지가 달린다");
    }

    public static void main(String[] args) {

        // 다형성
        Animal dog = new Dog(); // 업캐스팅
        Animal bird = new Bird();

        dog.eat();
        dog.move();

        bird.eat();
        bird.move();

    } //end of main
}

class Bird implements Animal{

    @Override
    public void eat() {
        System.out.println("새가 모이를 먹습니다");
    }

    @Override
    public void move() {
        System.out.println("새가 하늘을 날아 다닙니다.");
    }
}

  • 추상 클래스와 인터페이스를 활용해서 코드를 작성해 보자.
package com._interface;

public abstract class HomeAppliances {

    int width;
    int height;
    String color;

//    public void turnOn(){
//        System.out.println("전원을 켭니다.");
//    }
//
//    public void turnOff() {
//        System.out.println("전원을 끕니다.");
//    }

}
package com._interface;

public interface RemoteController {

    // 인터페이스란?
    // 구현된 것이 아무것도 없는 밑 그림만 있는 기본 설계도이다.

    // 모든 변수는 -> 상수가 된다. public static final int N;
    // 모든 메서드는 추상 메서드가 된다. 심지어 abstract 키워드도 생략 가능하다.

    // 추상 클래스보다 추상화가 더 높다.
    // 중요! 인터페이스를 사용할 때 무언가 동작 중심의 클래스를 선언해야 할 때 사용한다.

    // 인터페이스는 표준이다. 또는 강제성이 있는 규약이다.

    // 오직 static final 상수만을 가질 수 있다.
    public static final int SERIAL_NUMBER = 100;

    public abstract void turnOn();
    public abstract void turnOff();
    
}
package com._interface;

public interface SoundEffect {

    public abstract void soundOn();
}
package com._interface;

public class Television extends HomeAppliances implements RemoteController {

    @Override
    public void turnOn() {
        System.out.println("티비 전원을 켭니다.");
    }

    @Override
    public void turnOff() {
        System.out.println("티비 전원을 끕니다.");
    }
}

 

package com._interface;

// 장난감 로봇이 가전을 상속받게 된다면 의미가 맞지 않음!!
// 추상 클래스 보다 더 유연한 설계 기법이 인터페이스가 있다.
public class ToyRobot implements RemoteController, SoundEffect {

    String name;

    @Override
    public void turnOn(){
        System.out.println("장난감 로봇을 켭니다.");
    }

    @Override
    public void turnOff(){
        System.out.println("장난감 로봇을 끕니다.");
    }

    @Override
    public void soundOn() {
        System.out.println("뚜뚜 ~~~ 뚜뚜 ~~ 날라*");
    }
}

 

'JAVA' 카테고리의 다른 글

swing  (0) 2025.04.26
인터페이스와 추상 클래스 활용한 코드 작성  (0) 2025.04.26
추상 클래스 구현해보기  (0) 2025.04.26
추상 클래스(abstract class)  (0) 2025.04.26
스타크래프트 만들어보기 ver.3  (0) 2025.04.25