티스토리 뷰

JAVA

[JAVA] 인터페이스

PeonyF 2023. 2. 23. 07:23
반응형

인터페이스란?

다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.

 

인터페이스의 객체지향 특징?

다형성 : 한 가지 타입으로 여러가지 구현체를 사용할 수 있는 것이다. -> 유지보수의 편의를 

ex. 한 카페에서 여러 음료를 시킬수있다.

 

 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능

 

예시

*기존

public class Americano {
    public String coffeeName() {
        return "americano";
    }
}
public class Cafe {
    private Americano coffee;

    public void makeCoffee(Americano coffee){
        this.coffee = coffee;
    }

    public String takeOutCoffee(){
        return coffee.coffeeName();
    }
}

=> 다른 커피종류를 추가하려고 하면 그때마다 클래스와 메서드를 각각 추가해줘야한다.

 

 

*인터페이스 사용

* 커피를 다양한 종류로 만들수있게 공통부분(커피이름)을 interface로 만든다.

public interface Coffee {
    String coffeeName();
}
public class Americano implements Coffee {
    @Override
    public String coffeeName() {
        return "americano";
    }
}
public class Latte implements Coffee{
    @Override
    public String coffeeName() {
        return "Latte";
    }
}

*카페에서 다양한 커피를 팔수있게된다.

public class Cafe {
    private Coffee coffee;

    public void makeCoffee(Coffee coffee){
        this.coffee = coffee;
    }

    public String takeOutCoffee(){
        return coffee.coffeeName();
    }
}

* 결과

public class Customer {
    public static void main(String[] args) {
        Cafe cafe = new Cafe();
        Coffee americano = new Americano();
        cafe.makeCoffee(americano);
        System.out.println(cafe.takeOutCoffee());
    }
}

 

 

SOLID원칙에 해당되는 것은?

- DIP (Dependency Inversion Principle) 의존 역전 원칙

: 자주 변경하는 concreate(구체적인)클래스 대신 인터페이스나 추상 클래스에 의존하라

-> 변하기 쉬운것에 의존하는것 대신, 변하지 않는것에 의존해라.

 

- 장점 : 확장성에 용이, 객체간의 관계가 느슨해짐 -> 복잡하고 다양한 설계 가능

 

*참고

http://www.tcpschool.com/java/java_polymorphism_interface

https://huisam.tistory.com/entry/DIP

반응형

'JAVA' 카테고리의 다른 글

[JAVA] HashMap, HashTable, ConcurrentHashMap,LinkedHashMap 차이  (0) 2023.04.04
[JAVA] 객체 지향의 특징 4가지  (0) 2023.02.23
[JAVA] 람다  (1) 2023.01.30
자바 문자열 파싱(parsing) : StringTokenizer  (0) 2023.01.27
[JAVA] JVM  (0) 2023.01.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함