ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Interface
    전공 지식/JAVA 2020. 7. 23. 21:25

    Java 에서 Interface 란?

    • 기본적으로 추상메소드, 상수의 모음이다.
      • Java8 이상부터 디폴트메소드, 정적 메소드도 추가 되었다.
      • 인터페이스 내에서 직접 메소드를 구현할 수 있다.
      • 오버라이딩 / 디폴트 메소드 둘 다 사용할 수있다.
    상수 절대적 String val = "10"
    추상 메소드 강제적 String fun(int a);
    디폴트 메소드 선택적 default String fun(int a) { ... }
    정적 메소드 절대적 static String fun(int a) { ... }
    • 다중 상속은 안되지만 Interface 는 implement 할 수 있다.
    • Interface 도 상속이 된다

    default Method

    • 만약에 공통적으로 추가가 되어야하는 메소드지만 아직은 몇몇개의 부분에서만 지원해주는 기능이 있을 때,
      • Interface 에 추상메소드로 추가한다면 사용하지도 않는 기능인데 구현해야하는 문제가 있다.
      • 이 때, default Method 로 지원을 안한다는 구현을 하고 지원하는 곳에서만 구현을 한다면 효과적일 것이다.
      • 추가 요건으로 인해 불가피하게 반영을 해야할 때, 효과적임

    Interface 를 쓰는 이유 -> 다형성

    •  여러 구현체에서 공통적인 부분을 추상화 하기 위해 사용
    • 코드 규약을 정한다.

    ex) 결제의 경우에 카드결제 / 계좌이체 등 결제 방법이 다르지만 결제라는 행위는 같다.

    이 때, 결제 타입이 CARD, BANK 등등으로 나눠질텐데

    CARD -> : 결제

    BANK -> : 결제

    내부 구현은 다를 건데 이걸 결제라는 함수 하나에서 Type 으로 나눈게 아니라

    CARD 결제를 위한 CLASS

    BANK 결제를 위한 CLASS 를 각각 구현하고

    결제라는 메소드를 Interface 로 빼서 공통적인 부분을 추상화 할 수 있다.

    주로 팩토리 패턴에서 자주 쓰이는 것 같다.

     

    **Interface - 상속의 차이

    • 공부를 하다보니 Interface 가 default method 를 지원하는데 왜 상속을 사용하고 추상 클래스를 사용해야할까? 라는 의구심이 들었다
    • 인터페이스에서 모든 변수는 기본적으로 public static final, 메소드는 public abstract 인 반면 추상 클래스는 public, protected, private 메소드를 가질 수 있다.

    추상클래스

    • 관련성이 높은 클래스 간에 코드 공유
    • 추상클래스를 상속받은 클래스들이 공통적으로 가지는 메소드, 필드가 많음
    • public 이외의 접근제어자 (protected, private) 사용이 필요한 경우
    • non-static, non-final 필드 선언이 필요한 경우

    인터페이스

    • 구현 클래스 간에 관련성이 없는 클래스들이 인터페이스를  구현하는 경우에 사용
    • 특정 데이터 타입의 행동을 명시하고 싶을 때, 어디서 그 구현이 되는지는 신경쓰지 않을 때
    • 다중 상속을 허용 하고 싶을 때

    댓글