추상화란 ?🤔
기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것
- 상속은 하위클래스를 정의하는데 상위 클래스를 사용하는 것.
- 공통적인 속성과 기능을 모아서 정의해주면 코드의 중복을 줄일 수 있고, 보다 효과적으로 클래스 간의 관계를 설정할 수 있으며, 유지/보수가 용이해진다.
- 주로 추상 클래스와 인터페이스 라는 문법 요소를 사용해서 추상화를 구현한다.
abstract 제어자
메서드 앞에 붙은 경우 '추상 메서드 (abstract method)',
클래스 앞에 붙은 경우를 '추상 클래스(abstract method)'라 부른다.
- 어떤 클래스에 추상 메서드가 포함되어 있는 경우 해당 클래스는 자동으로 추상 클래스가 된다.
abstract class AbstractExample {
abstract void start(); // 메서드 바디가 없는 추상 메서드
}
abstract
키워드는 '추상적인', '미완성' 을 의미한다.
추상 클래스
메서드 시그니처만 존재하고 바디가 선언되어있지 않은 추상 메서드를 포함하는 미완성 설계도이다 .
-
미완성된 구조를 가지고 있어 이를 기반으로 객체를 생성하는 것이 불가능
-
추상 클래스는 상속 관계에 있어 새로운 클래스를 작성하는데 매우 유용하다.
- 메서드의 내용이 상속을 받는 클래스에 따라서 종종 달라지기 때문에 상위 클래스에서는 선언부만을 작성하고, 실제 구체적인 내용은 상속을 받는 하위 클래스에서 구현하도록 비워둔다면 설계하는 상황이 변하더라도 보다 유연하게 대응할 수 있다.
- 이 때 우리가 사용하게 되는 것이 '오버라이딩' 이다.
- 오버라이딩을 통해 각각 상황에 맞는 메서드 구현이 가능하다.
-
추상화는 상속 계층도의 상층부에 위치할 수록 추상화의 정도가 높고 그 아래로 내려갈수록 구체화 된다.
- 상층부에 가까울수록 더 공통적인 속성과 기능들의 정의