210205_JAVA_인터페이스_디폴트 메소드

정재현·2021년 2월 5일
0

TIL

목록 보기
66/80

오늘도 역시 어제에 이어서 인터페이스 중 디폴트 메소드를 진행한다.
이런 상황이 발생할 수 있다.
이미 정의되어 있는 다양한 프로젝트에 수십개의 인터페이스가 있는데, 모든 인터페이스에 최소한 한개 이상의 추상 메소드를 추가해야 하는 상황.
이러한 문제를 어제처럼 '인터페이스의 상속'을 통해 해결하게 되면 모든 인터페이스의 수는 두배로 늘어나게 된다.
이 해결책은 자바8에서 추가되었다고 한다. 실제로 '람다'를 지원하기 위해서 추상 메소드를 추가해야하는
상황이 발생했다고..!
디폴트 메소드는 이렇게 사용할 수 있다. (오 진짜 좋아)
github: https://github.com/jeong-jaehyeon/JavaProject/blob/javaExercise/src/PrinterDriver3.java

interface Printable3 { // 마이크로소프트가 정의하고 제공한 인터페이스
    public void print(String doc);
    default void colorPrint(String doc) { } // 인터페이스의 디폴트 메소드
}

어제의 소스 코드와 비교해보면 알겠지만 너무나 간편한 기능을 알게되었다.
이러한 디폴트 메소드의 특징은 다음과 같다.

  • 자체로 완전한 메소드이다. (비록 인터페이스 내에 정의되어 있지만)
  • 따라서 이를 구현하는 클래스가 오버라이딩 하지 않아도 된다.

그리고 위의 Printable3 인터페이스를 보고 나서 다음을 이해할 수 있어야 한다.
1. 처음에는 인터페이스에 print 추상 메소드만 있었다.
2. 이후에 필요에 따라 colorPrint 메소드를 추가하였다.
3. 그래도 디폴트 메소드로 추가하였으니, 이전에 구현된 클래스에는 영향을 주지 않겠구나.

오호~ 역시 이래야 국민 프로그래밍 언어지~
(와.. 근데 언어 개발자는 어느 정도의 프로그래밍 수준을 가지고 있어야 이런걸 다 구현할까..?)

그리고 주의해야할 점은 막무가내로 처음부터 디폴트 메소드를 선언해놓으면 안된다는 것!
(코드 보면서 그럼 처음부터 디폴트로 해놓으면 되지 않나 생각했다.. ㅎ)
왜냐면 위처럼 디폴트 메소드는 이전에 개발해 놓은 코드에 영향을 미치지 않게 등장한 문법이다.
때문에 처음부터 디폴트 메소드를 정의해 넣는다면? 잘못 이해하고 잘못 사용하는 것이라고 한다!


난 내일 라섹수술을 한다.
그래서 어느 정도로 전자기기를 못보는지는 모르겠지만 되는 한 안보려고 할 예정이다.
책도 안되려나.. 월화수 휴가도 올렸고, 회사 출근은 설 연휴가 끝난 15일에 한다.
얼마나 될지는 모르겠지만 당분간 TIL는 못올린다 ㅠㅠ

오늘의 코멘트: 시력 좋아져서 빨리올게 velog야~~

profile
"돈받고 일하면 프로다"

0개의 댓글