GuideLine총 요약Interface란 무엇인가?Interface의 역할Interface 구성요소구현 방식 3가지인터페이스 사용 방식인터페이스 타입 변환과 다형성 (detail)왜 사용할까
GuideLine
guide총 요약
인터페이스는 유지보수에 있어 아주 좋은 해결 방안 중 하나가 될 수 있다. 객체를 뺏다 꼇다 하도록 유연하게 하며 의존성을 낮추는 효과 또한 얻을 수 있다.
SOLID 원칙 중 인터페이스 분리 원칙에 의거하여 해당 인터페이스를 최대한 분리하여 불 필요한 메소드를 호출하도록 하지 않아 side effect를 줄일 수 있으며, 해당 구현체에 의존하는 것이 아니라 추상화에 의존하여 객체의 강한 결합도를 낮추어 유연하게 갈아낄수 있도록 하는 효과가 있다.
Interface란 무엇인가?
사전적 의미 : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 컴퓨팅적 의미에서는 컴퓨터 시스템 끼리 정보를 교환 하는 공유 경계이다.
java에서의 의미 : 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다. 이들은 프로토콜과 유사하다.
Interface의 역할
- 설계도이다.
- 인터페이스 변수에 서로 다른 구현체를 넣으면서 객체를 조립식으로 만들어 의존성을 낮춰준다.
Interface 구성요소
- 상수 필드
public interface Wheel{ public static final DEFAULT = 33; // 상수 필드 }
인터페이스는
new 를 통해 객체화 할 수 없다.
그래서 인스턴스 필드, 정적 필드는 선언이 불가능
하다.상수필드는 run-time이 아닌
Compile-time에 선언
되어 지므로 선언이 가능하다.public static final 이 붙지 않아도 자동으로 상수화 된다.
- 추상 메서드
public interface Wheel{ public static final DEFAULT = 33; // 상수 필드 public abstract void roll over{ // 츠상 메소드 ... } }
실제소스는 구현객체 안에 있다.
public abstract 는 생략 가능하다.
- 디폴트 메소드
public interface Wheel{ public static final DEFAULT = 33; // 상수 필드 public abstract void roll over{ // 츠상 메소드 ... } public default void stop{ // default 메소드 ... } }
java 8에서부터 추가된 기술이다.
default 키워드가 붙으며, Override 또한 가능하다.
- 정적 메소드
java 8에서부터 추가된 기술이다.
클래스의 정적 메소드와 똑같은 방식으로 사용한다.
구현 방식 3가지
- 단일 인터페이스 구현
- 다중 인터페이스 구현(다중 상속 처럼)
- 익명 구현 객체
인터페이스 사용 방식
- 클래스 필드
- 생성자 파라미터
- 생성자의 로컬 변수
- 메소드 파라미터
- ‘메서드 로컬 변수
publicclassTestClass { // 1.클래스의 필드 User user =new Recipient(); // 2.생성자의 파라미터 TestClass(User user) { this.user = user; // 3.생성자의 로컬변수 User recipient =new Recipient(); } // 4.메서드의 파라미터 voidmethodA(User user) { ... } voidmethodB() { // 5.메서드의 로컬변수 User user =new Recipient(); } }
인터페이스 타입 변환과 다형성 (detail)
다형성이란? →인터페이스 대표적 특징
실제 객체에 따라 다양한 형태로 동작하는 방식을 의미한다.ex)
폰에 있는 숫자 키가 게임에서는 방향키가 될 수 있는 것처럼
- 자동 타입 변환
런타임에 구현객체가 인터페이스 참조 변수로 자동 변환 하는 것 =:
promotion
- 매개 변수의 다형성
인터페이스 변수를 두고, 구현 객체를 대입
- 강제 타입 변환
인터페이스에서 정의된 추상 메서드의 실체 메서드 이외에는 호출 할 수 없다.
- 객체 타입 확인
${상위 타입} instanceof ${하위 타입}
⚠️ 어던 구현 객체가 대입되는지 모르는 상황에서 강제 타입 변환을 하게 되면 classCastException이 발생하므로 어떤 구현체가 담겨있는지 꼭 확인이 필요하다‼️
왜 사용할까
서비스 애플리케이션의 라이프사이클을 크게 3단계로 나뉘어진다. [설계 → 개발 → 유지보수]
그 중 가장 큰 부분을 차지하는 부분이
유지보수
이다. 특히나 유지보수에서 Interface가 객체 지향적 개발을 하는데 큰 기여를 한다.