추상 메서드
- 자손 클래스에서 반드시 재정의되는 것들 → 조상에서의 구현이 무의미
- 메서드 선언부만 남김
- abstract 키워드 추가
추상 클래스
- 추상 메서드를 하나 이상 가진 클래스
- abstract 추가
- 상속 전용 클래스
- 객체 생성 불가
- 상위 클래스 타입으로 자식 참조는 가능
- 조상 클래스에서 상속받은 abstract 메서드를 재정의하지 않은 경우 해당 클래스도 추상 클래스
- 구현의 강제를 통해 프로그램의 안전성 향상
- 인터페이스와 달리(자바8 이전) 추상 메서드가 아닌 것도 포함
인터페이스
- 최고 수준의 추상화 단계
- 자바8에서 default method와 static method 추가
- 클래스와 유사하게 선언
- 모든 멤버변수는 public static final이며 생략 가능
- 모든 메서드는 public abstract이며 생략 가능
- 클래스와 마찬가지로 인터페이스도 extends 이용해 상속 가능
- 클래스와 달리 다중 상속 가능
- implements 키워드
- 모든 abstract 메서드 구현 필요
- 조상 인터페이스에도 다형성 적용
- 구현의 강제로 표준화 처리
- 인터페이스를 통한 간접적 클래스 사용 👉 손쉬운 모듈 교체 지원
- 서로 상속 관계가 없는 클래스 사이에 인터페이스를 통한 관계 부여
- 모듈 간 독립적 프로그래밍 가능
default method
- 인터페이스에 선언된 구현부가 있는 메서드
- default 예약어로 시작
- 구현 클래스로 접근
- public 생략
- 기존 인터페이스에 추가하여 구현 클래스들에게 미치는 영향 최소화
- 메서드 충돌 시 super class의 메서드가 우선되며, 다른 인터페이스와 충돌시 재정의 필수
static method
- 일반 static 메서드와 마찬가지로 별도의 객체 필요 없음
- 인터페이스 이름으로 바로 접근
제네릭
- 컴파일 시에 타입 체크
- 미리 사용할 타입을 명시하여 형변환 번거로움 감소
- 타입 안전성 향상
- <> 사이에 타입 파라미터 표시
- class 클래스
- 컴파일 타임에 타입 파라미터들이 대입된 타입으로 대체됨
- 필요에 따라 구체적인 타입 제한 필요
- T extends Number: Number를 상속받는 클래스로 제한
- 인터페이스도 마찬가지
- 클래스와 함께 인터페이스 제약 조건을 이용할 경우 &로 연결
- 와일드카드
- : 타입 제한이 없음
- : T 또는 T를 상속받은 타입
- : T 또는 T의 조상 타입
- 제네릭 메서드: 파라미터와 리턴타입으로 타입 파라미터를 갖는 메서드
- 접근제한자와 반환형 사이에 타입 파라미터 위치
- 클래스에 타입 파라미터 선언시 그대로 사용 가능