ch7-35 인터페이스(interface)
- 추상 메서드의 집합
프로그래밍 관점에서의 인터페이스에 대한 개념이다.
static 메서드, 상수 / 디폴트 메서드 = 부수적인 것
- 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public)
변수에 메서드를 통해서 접근 하는 것 = 캡슐화 (iv를 보호하기 위함)
> 직접 변수 접근 t.hour x / t.getHour()
그 껍데기가 인터페이스의 껍데기 ( 모든 멤버가 public )
- 추상클래스와 인터페이스의 차이가 무엇인가?
추상클래스는 일반 클래스이지만, 추상 메서드를 가지고 있는 것이라면
인터페이스는 완전히 아무것도 없는 것
생성자 iv 가 가장 큰 차이이다.
인터페이스는 인스턴스 변수를 가질 수 없지만,
추상클래스는 iv 를 가질 수 있다.
인터페이스는 추상메서드만 쭉 적어놓은 것이라 내용이 없는 것이다.
추상 메서드의 집합이라는 것이 인터페이스의 핵심 개념이다.
메서드의 껍데기 : 인터페이스
선언 방법은 interface 인터페이스 이름 { 추상메서드 ... }
인터페이슨 내에 변수 iv cv는 안돼지만, 상수는 선언 가능하다.
인터페이스 내의 모든 추상 메서드는 public이다.
인터페이스 내에서 메서드는 abstract를 생략할 수 있다. 항상 abstract public 이기 때문에
상수도 항상 예외 없이 static public final 이다.
따라서 생략가능
ch7-36 인터페이스 상속
- 인터페이스의 조상은 인터페이스만 가능 (Objetc가 최고 조상이 아니다)
- 다중 상속이 가능 (추상 메서드는 충돌해도 문제 없음)
인터페이스는 추상메서드의 집합이다. 따라서 원래는 메서드 충돌 문제 중에서 어느 것을 상속받을지 알 수 없는 문제가 있었다. 선언부가 같지만 구현부가 다르문제가 있었다. 하지만 인터페이스는 구현부가 텅텅 비었기 때문에 충돌문제가 발생할 문제가 없다.
자바는 단일 상속이지만, 인터페이스는 충돌 문제가 없기 때문에 다중 상속이 가능하다.
ch7-37 인터페이스의 구현
- 인터페이스에 정의된 추상 메서드를 완성하는 것
인터페이스의 구현 (추상메서드를 작성)
: 추상클래스처럼 완성해서 사용해야 한다.
상속을 통해서 구현되지 않은 인터페이스를 완성해야 하는데
클래스와 다르게 인터페이스는 implements 를 사용한다.
추상메서드 구현 = 몸통 {} 완성
Fighter 클래스는 Fightable 인터페이스를 구현했다.
추상 메서드의 몸통을 만들었기 때문에 abstract 가 없다.
만약 인터페이스를 구현한 클래스 중에서 인터페이스의 일부를 구현하지 않은 경우
abstract를 클래스 명 앞에 붙여줘야 한다.
인터페이스의 메서드 명 앞에 public abstract 가 생략 되어 있는 것
Q. 인터페이스란?
추상 메서드의 집합 : 상수나 static 메서드, 디폴드 메서드가 (jdk 1.8 이후에 추가 되었지만, 핵심이 아니다)
Q. 인터페이스의 구현이란? implements
인터페이스의 추상메서드 몸통{} 만들기 (미완성 설계도 완성하기)
추상 클래스의 구현과 인터페이스 구현의 차이
완성된 설계도
상속을 통해서 설계도를 완성한 것
추상메서드를 완성하는 것 implements
추상클래스는 상속을 통해서 구현하고 extends
둘 다 미완성 설계도를 완성하는 것
Q. 추상 클래스와 인터페이스의 공통점
추상 메서드를 가지고 있다.
Q. 추상 클래스와 인터페이스의 차이점
인터페이스는 iv를 가질 수 없다.
추상클래스는
일반적인 클래스와 같고, 추상 메서드를 가지고 있다는 점만
일반 클래스와 다르다.
인터페이스는 빈 껍데기, 추상클래스(상수,static,default메서드만: 핵심이 아님)만 가지고 있다.
iv, 생성자, 인스턴스 메서드 모두 안 됀다.
구현된 것이 전혀 없고, 껍데기인 추상메서드만 가지고 있는 것
'자바의정석' 카테고리의 다른 글
[자바의 정석 - 기초편] ch7-39 인터페이스의장점1 (0) | 2022.03.23 |
---|---|
[자바의 정석 - 기초편] ch7-38인터페이스와 다형성 (0) | 2022.03.23 |
[자바의 정석 - 기초편] ch7-33,34 추상클래스의작성2 (0) | 2022.03.22 |
[자바의 정석 - 기초편] ch7-33,34 추상클래스의작성1 (0) | 2022.03.22 |
[자바의 정석 - 기초편] ch7-31,32 추상 클래스, 추상 메서드 (0) | 2022.03.22 |