-
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 필드 선언이 필요한 경우
인터페이스
- 구현 클래스 간에 관련성이 없는 클래스들이 인터페이스를 구현하는 경우에 사용
- 특정 데이터 타입의 행동을 명시하고 싶을 때, 어디서 그 구현이 되는지는 신경쓰지 않을 때
- 다중 상속을 허용 하고 싶을 때
'전공 지식 > JAVA' 카테고리의 다른 글
equals override 시에 주의 점은 무엇인가 (hashCode) (0) 2022.02.18 Java 7 -> 8 로 달라진 부분 (0) 2020.07.29 Heap 영역 Detail / Garbage-Collection (0) 2020.07.13 String StringBuilder StringBuffer (0) 2018.12.06 interface 간 상속 및 다중 상속 (0) 2018.12.05 댓글
- 기본적으로 추상메소드, 상수의 모음이다.