자바에서 class 앞에 abstract 라는 키워드가 붙어있는 것을 본적이 있을 것이다.
다음번에 다시 abstract가 붙은 class를 볼 때 우리는 이렇게 생각하면 된다.
해당 클래스는 인스턴스를 생성할 수 없고 상속을 통해 사용하기 위해 작성된 클래스구나라고
추상 클래스 자체가 추상 메서드만을 포함하는 것이 일반적이다. 구현부가 없는 것이 추성 메서드인데
구현부가 없어도 추상메서드 자체만 작성하는 것이 큰 의미가 있기에 추상메서드의 작성은 중요하다.
abstract class {
abstract method() {}
}
Type: 추상클래스를 상속받아 모두 구현한 추상클래스
추상클래스를 상속받아 모두 구현하더라도 그 자체로 추상클래스로 사용 할 경우도 있는데 그 때는 해당
클래스를 상속해서 사용하기 위해 그렇게 사용한다.
Type: 추상클래스를 상속받아 일부만 구현한 추상클래스
추상클래스를 상속받아서 일부만 구현 하고 클래스를 추상클래스로 명시하면 해당 추상클래스는 오류 없이
사용 할 수 있다.
개발 영역에서 '추상화'라는 단어는 중요한 단어이다.
추상이라는 말을 들었을 때 칸딘스키 같은 추상화가 떠오르면 안되고 개발자는 알수 없는 거대한 것을 사람이
단번에 인식하고 이해할 수 있기 위한 것으로서 '추상'을 사용한다.
내가 '추상'이란 단어를 이해한 바로는 다음과 같다. 우리가 냉장고 기능이 담긴 코드를 작성한다고 해보자.
우선 냉장고라는 class가 있을 것이다. 냉장고 안에는 냉장기능과 냉동기능이 있을 것이다. 그리고 냉장기능
안에는 야채를 위한 냉장기능, 고기를 위한 냉장기능 등등이 있을 것이다.
처음 우리가 냉장고를 파악할 때는 우리가 이해하고 인식하기 쉽게 냉장고를 인식한다. 그렇게 인식한다고 해서
우리가 제품 설명서 안에 있는 모든 것들이 냉장고를 본 순간 머리속에 떠올리는 것은 아니다.
설계의 관점에서 냉장고를 바라볼 때에도 우리는 그러하다. 냉동기능 냉장기능으로 나누어 냉장고라는 객체가 갖
고 있는 기능을 파악하고 인식한다. 냉동 기능 안에는 식품별 다르게 온도가 작동되는 기능이 있을 것이고
습도를 유지하는 기능 등 여러가지 기능 등이 들어가 있을 것이다.
이런 설계적인 측면에서 거대한 냉장고라는 녀석을 위와 같이 추상화 시키는 작업이 필요하고 그런 측면에서 추상
클래스를 작성하는 것은 중요한 의미를 갖는다.
특히 반환하는 타입, 함수의 이름, 매개변수의 타입을 결정하는 것은 후에 있을 또다른 추상작업이나 구현작업에
있어서 중요한 가이드라인을 제시해준다.