woowacourse-study / 2022-modern-java-in-action

우아한테크코스 4기 모던 자바 인 액션 스터디
10 stars 4 forks source link

인터페이스는 어떤 특징이 있을까? #17

Open jaejae-yoo opened 2 years ago

jaejae-yoo commented 2 years ago

문제

책의 예제에서 저자가 Predicate 인터페이스를 선언하여, 선택 조건을 결정할 수 있도록 구현한 것을 볼 수 있다. 인터페이스에는 어떠한 특징이 있고, 더 나아가 추상 클래스와의 차이점은 무엇이 있는지 알아보자.

선정 배경

Predicate 인터페이스의 활용을 보고, 인터페이스의 정의와 이와 유사한 추상 클래스에 대해 짚고 넘어가면 좋을 것이라 생각하였다.

관련 챕터

[2장] 동작 파라미터화 코드 전달하기

jaejae-yoo commented 2 years ago

추상 클래스와 인터페이스 공통점 1) 둘 다 가지고 있는 추상 메서드를 구현하도록 강제한다. 2) 인스턴스화가 불가능하다.

추상 클래스와 인터페이스 차이점 1) 추상 클래스는 미완성 설계도의 느낌이 강하며, 인터페이스는 기본 설계도로 볼 수 있다. 2) 인터페이스는 추상 클래스와 달리 멤버 변수를 가질 수 없다.

해당 예제에서 인터페이스를 사용한 이유에 대한 생각 1) 추상 클래스는 상속이기 때문에 계층 구조를 갖게 되지만, 인터페이스는 계층 구조가 아니다. 또한 추상 클래스는 상위 타입과 연관성이 깊은 반면, 인터페이스는 상대적으로 느슨하다. 해당 예제에서 Predicate 인터페이스를 활용하여 상위 클래스를 확장한다는 느낌보다는, 조건은 다르지만 동일한 목적을 수행하는 메서드를 만드는 것이 목표인 것으로 보여진다.

2) DIP(의존관계 역전 원칙): 추상화에 의존해야지 구체화에 의존하면 안된다. 추상 클래스로 하게 되면 해당 클래스에 멤버 변수를 선언할 수 있게 되고, 변화가 많은 클래스가 될 수 있기 때문에 구체적인 클래스가 될 수 있다. -> 추상 클래스보다 인터페이스를 통해 DIP를 잘 지킬 수 있다.