클래스 상속과 인터페이스 사용 목적 정리
상속
> 부모클래스의 멤버를 그대로 상속 받으면서 기능을 추가할수도 있고 기존의 기능을 조금 수정해서 사용할 수 있음
비슷한 특성의 클래스가 있을때 기능의 중복정의를 하지 않고 필드와 메서드를 재사용함으로서 클래스 간결화 할 수 있음
클래스간의 계층적 분류 및 관리가 가능
인터페이스 (핵심은 선언과 구현의 분리)
자바에서는 다중상속을 지원하지 않기 때문에 다중상속을 위해 인터페이스가 나오게 됨
선언을 인터페이스로 함으로써 구현을 뒤로 숨긴다 (=결합도를 낮추기 위함)
클래스간의 계층 구분은 추상클래스 상속을 통해서 해결하고 할 수 있는 기능들은 인터페이스로 구현한다
인터페이스를 상속하면은 전부 구현해야하잖아
근데 추상클래스를 상속하면 일반메서드는 구현 안해도 되고 꼭 구현해야 하는 메서드를 구분지을 수 있음
각각 다른 추상클래스를 상속하는데 공통된 기능이 필요하다면은 해당 기능을 인터페이스로 작성해서 구현
상속은 중복되는 멤버에 대해서 재사용 + 추가 하는 이점이 있음
인터페이스는 공통의 기능을 구현할때 결합도를 낮춰서 각자 자기에 맞는 기능으로 구현하기 위함
만들고자 하는 객체의 특징이 명확한 것 딱 이거에 대한 설계도다 할때는 일반클래스 (상속 할수도 있고 안할수도 있고)
추상클래스 > 꼭 구현해야할 메서드가 있다 하면은 추상클래스로 해서 추상메서드를 선언 (상속을 위한 클래스)
인터페이스는 기능만 단독으로 관리할수있고 결합도도 낮출수가 있음
>> 오늘의 정리
일반클래스와 일반클래스 간의 상속 > 굳이 강제하려는 메서드 없을때 코드 재사용 + 오버라이딩
일반클래스와 추상클래스 간의 상속 > 추상클래스는 상속을 염두하고 만든 클래스인데 여기에 + 유효성 검증 같은 필히 구현해야 할 기능을 강제하고자 할때
추상클래스와 추상클래스 간의 상속 > 추상클래스를 상속받는 자식클래스도 또 다른 자식클래스한테 상속하고자 할때
추상클래스와 인터페이스의 사용목적
> 일반/추상 클래스 상속은 중복코드에 대한 재사용 + 기능 재정의가 주목적인거 같고 (추상은 구현 강제하려는 메서드 있을 경우)
인터페이스는 기능에 대한 구현/관리를 별도로 하고 공통기능의 집합을 부품처럼 조립해서 쓸 수 있도록 하기 위함
상속하려는(중복 코드 재사용) 부모 클래스랑 별개로 기능에 대한 부분은 인터페이스로 구현해서
인터페이스로 사용하려는 기능을 별도로 관리할수가 있음
>>> 정리중
추상클래스와 인터페이스 간의 상속
인터페이스와 인터페이스 간의 상속