default method

인터페이스(Interface)
JDK1.8부터 디폴트 메서드와 static 메서드도 인터페이스에서 사용할 수 있게 되었다. 일단은 JDK1.8 이전의 인터페이스에 대해서 먼저 살펴보고, 그리고 JDK1.8에서 추가된 기능(디폴트 메서드, static 메서드)과 Java9부터 사용할 수 있는 private 메서드에 대해서 살펴보는 것으로 하자. 📙 1. 인터페이스란 인터페이스란 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로만 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다. 인터페이스도 추상클래스처럼 완성되지 않은 불안전한 것이기 때문에 그 자체..

인터페이스는 구현하는 쪽을 생각해 설계하라 - [4장. 클래스와 인터페이스(아이템21)]
1. 개념 👻 디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 된다. 기존 인터페이스에 메서드를 추가하는 길이 열렸지만 모든 기존 구현체들과 매끄럽게 연동되리라는 보장은 없다. 자바 7까지의 세상에서는 모든 클래스가 "현재의 인터페이스에 새로운 메서드가 추가될 일은 영원히 없다"라고 가정하고 장성됐으니 말이다. 디폴트 메서드는 구현 클래스에 대해 아무것도 모른 채 합의 없이 무작성 '삽입'될 뿐이다. 이번 글에서는 이런 경우 발생할 수 있는 문제 상황들을 살펴보고 그에 대한 해결책을 알아보자. 2. [문제 상황 1] 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다. 🤖 자바 8의 Collcti..

추상 클래스보다는 인터페이스를 우선하라(인터페이스의 장점)(1) - [4장. 클래스와 인터페이스(아이템20)]
자바가 제공하는 다중 구현 메커니즘은 '인터페이스와 추상 클래스' 2가지가 있다. 자바 8부터 인터페이스도 Default Method를 제공할 수 있기 때문에 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다. 자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 안게 되는 것이다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 여기까지가 추상클래스와 인터페이스에 대한 간단한 설명이다. 이번 글에서 인터페이스의 5가지 장점들을 살펴보면서 ..