[1일1쓰기] Day 19 - 이것이 자바다 8장

Ki Tae Park·2021년 6월 19일
0

자바

목록 보기
7/13

8.1 인터페이스의 역할

인터페이스는 객체의 사용 방법을 정의한 타입이다.

자바 8에서 인터페이스의 중요성은 더욱 커졌는데, 자바 8의 람다식이 함수적 인터페이스의 구현 객체를 생성하기 때문이다 → 자바 8의 람다식이 인터페이스를 응용하기 때문에 중요성이 높아졌다는 얘기인거 같다.

개발 코드가 직접 객체의 메소드를 호출하면 되는데, 왜 중간에 인터페이스를 두냐면 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다 → 개발 코드를 수정하지 않고 사용하는 객체를 변경할 수 있다는 말이 이해가 되면서도 정확히 이해가 되지 않는다..

8.2 인터페이스 선언

8.2.1 인터페이스 선언

상수 필드

추상 메소드

디폴트 메소드

인터페이스에 선언되지만 사실은 객체(구현 객체)가 가지고 있는 인스턴스 메소드라고 생각해야 됨.

자바 8에서 디폴트 메소드를 허용한 이유는 기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해서 → 그 새로운 기능이 뭘까? 뒤에 나오는 설명을 보면 추상 메소드와 달리 중괄호로 실행 내용을 작성하던데, 그런 식으로 작성한 다음 객체에서 활용하는 것을 의미하는 걸까?

정적 메소드

8.2.2 상수 필드 선언

8.2.3 추상 메소드 선언

8.2.4 디폴트 메소드 선언

8.2.5 정적 메소드 선언

8.3 인터페이스 구현

8.3.1 구현 클래스

구현 클래스에서 인터페이스의 추상 메소드들에 대한 실체 메소드를 작성할 때 주의할 점:

인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 가지므로 public 보다 더 낮은 접근 제한으로 작성할 수 없음.

이클립스에서 인터페이스를 구현하며 자동 생성된 실체 메소드는 @Override 가 붙는데, 이는 인터페이스의 추상 메소드에 대한 정확한 실체 메소드인지 컴파일러가 체크하도록 지시하는 어노테이션이다. 생략해도 상관없지만 잘못된 실체 메소드가 생기지 않도록 해주므로 붙여주는게 좋다.

8.3.2 익명 구현 객체

인터페이스 변수 = new 인터페이스() {
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}

8.3.3 다중 인터페이스 구현 클래스

8.4 인터페이스 사용

8.4.1 추상 메소드 사용

8.4.2 디폴트 메소드 사용

8.5 타입 변환과 다형성

8.5.1 자동 타입 변환

8.5.2 필드의 다형성

8.5.3 인터페이스 배열로 구현 객체 관리

8.5.4 매개 변수의 다형성

8.5.5 강제 타입 변환

8.5.6 객체 타입 확인

8.6 인터페이스 상속

8.7 디폴트 메소드와 인터페이스 확장

8.7.1 디폴트 메소드의 필요성

MyInterface 가 있고 이를 구현한 MyClassA가 있다. 시간이 흘러 인터페이스에 기능을 추가할 필요가 생겼고 추상메소드를 인터페이스에 추가한다. 하지만 MyClassA에 해당 추상클래스를 구현하지 않으면서 문제가 발생한다. MyClassA를 수정할 수 있는 여건이 안된다면, 인터페이스에 디폴트메소드를 추가로 선언하고 새로운 구현 객체를 만들어 MyInterface 를 구현하여 사용한다.

8.7.2 디폴트 메소드가 있는 인터페이스 상속

profile
#Coder Became Developer

0개의 댓글