Abstract
Interface
안정성
확장가능성
추상화 : 공통점을 추출하고 불필요한 부분 제거
몸체 없는 메소드를 포함한 클래스 (미완성 설계도)
몸체 없는 메소드
특징
1. 미완성 클래스(abstract 키워드 사용)
자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성
2. abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
abstract 메소드가 없어도 abstract 클래스 선언 가능
3. 클래스 내에 일반 변수, 메소드 포함 가능
4. 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능
장점
상속 받은 자식에게 공통된 멤버 제공.
일부 기능의 구현을 강제화(공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능).
상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것으로
상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함
반드시 사전에 정의된 추상메서드와 상수만 가질 수 있다!
특징
1. 모든 인터페이스의 메소드는 묵시적으로 public abstract
2. 변수는 묵시적으로 public static final
3. 객체 생성은 안되나 참조형 변수로는 가능(다형성)
장점
상속 받은 자식에게 공통된 멤버 제공.
일부 기능의 구현을 강제화(공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능).
<정리>
상속
(자식클래스) 공통된 부분을 추출하여 부모클래스를 만드는 것
-> 공통된 필드, 메서드를 가진 클래스를 만들고, 작성된 코드를 자식들이 물려받아 사용.
-> 코드길이 감소, 코드 중복 제거, 재사용성 증가, 자식에 대한 일관된 규칙 제공
[일반 클래스] 상속
부모클래스도 객체로 만들수 있어야 하는 경우
[추상 클래스] 상속
연관된 클래스의 공통점을 묶되, 부모클래스는 객체로 만들 수 없는 경우
일부 미완성 클래스(abstract 메서드 0개 이상 포함)
EX) Animal 클래스 -> 동물 객체는 어떤 동물인가? eat(), breat() 는 어떻게 수행되는가? -> 알수 없음
하지만, 동물의 공통된 기능명은 알고 있음.
[인터페이스] 상속 : 접점
연관성이 낮거나 없는 클래스에게 공통된 기능을 제공할 때 사용.
EX) 키보드, 마우스, 스캐너, 카메라, 기울기 센서(공통점 : 입력장치)
우연히도 입력이라는 기능을 가지고 있음! -> 각각의 용도는 다르지만 입력이라는 공통된 기능명이 있음. 입력이라는 접점!
(참고) 인터페이스 활용 용도