언어(Language)/Java

[Java] 자바 인터페이스 활용 예제

잇트루 2022. 9. 19. 00:00
반응형

Intro

인터페이스를 왜 사용하고, 이것이 가지는 장점이 무엇인지 예제를 통해 알아보도록 한다.

 

예상 시나리오

1. 식당를 운영하는 사람이 있다.
2. 단골손님들은 매일 먹는 음식이 정해져 있다.
3. 단골손님 A는 항상 김치찌개를 주문한다.
4. 단골손님 B는 항상 제육볶음을 주문한다.

 

인터페이스를 활용하지 않는 경우

// 식당 손님
class ResCustomer {
    public String resCustomer;

    public void setResCustomer(String resCustomer) {
        this.resCustomer = resCustomer;
    }
}

// ResCustomer 클래스로부터 단골손님 A와 B 상속
class ResCustomerA extends ResCustomer {
}

class ResCustomerB extends ResCustomer {
}

// 식당 사장
class ResOwner {
    public void giveFood(ResCustomerA resCustomerA) {
        System.out.println("손님 A에게 김치찌개를 준다");
    }

    public void giveFood(ResCustomerB resCustomerB) {
        System.out.println("손님 B에게 제육볶음을 준다");
    }
}

// 음식 주문
public class OrderFood {
    public static void main(String[] args) {
        ResOwner owner = new ResOwner();
        ResCustomerA a = new ResCustomerA();
        ResCustomerB b = new ResCustomerB();

        owner.giveFood(a);
        owner.giveFood(b);
    }
}
손님 A에게 김치찌개를 준다
손님 B에게 제육볶음을 준다

위 코드는 단골손님 A와 B는 ResCustomer 클래스로부터 상속받았고, 식당 주인은 ResOwner 클래스로 정의했다. 단골손님 A와 B가 올 땐, 오버로딩을 활용하여 giveFood 메서드를 호출하고 OrderFood 클래스에서 객체를 생성하여 실행시키는 코드이다.

 

만약, 단골손님이 계속해서 늘어난다면, 만들어야 할 오버로딩된 메서드가 늘어나게 될 것이다.

 

인터페이스를 활용하는 경우

interface ResCustomer {
    String getOrder();
}

// 단골손님 A와 B 클래스에서 인터페이스 ResCustomer의 getOrder 추상 메서드 구현
class ResCustomerA implements ResCustomer {
    public String getOrder() {
        return "손님 A에게 김치찌개를 준다";
    }
}

class ResCustomerB implements ResCustomer {
    public String getOrder() {
        return "손님 B에게 제육볶음을 준다";
    }
}

// 식당 사장
class ResOwner {
    public void giveFood(ResCustomer resCustomer) {
        System.out.println(resCustomer.getOrder());
    }
}

// 음식 주문
public class OrderFood {
    public static void main(String[] args) {
        ResOwner owner = new ResOwner();
        ResCustomerA a = new ResCustomerA();
        ResCustomerB b = new ResCustomerB();

        owner.giveFood(a);
        owner.giveFood(b);
    }
}

인터페이스를 통해 작성한 경우, giveFood 메서드를 한 번만 사용해도, 더 이상 단골손님이 늘더라도 독립적으로 수행할 수 있는 클래스가 되었다.

반응형