추상 클래스(abstract class)
사전적 의미로 추상은 실체 간에 공통되는 특성을 추출한 것을 말한다.
객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다.
추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성을 가질수 있다.
여기서 특성이란 필드와 메소드들을 말한다.
예를 들어 Bird.class, Insect.class, Fish.class 등의 실체 클래스에서 공통되는 필드와 메소드를 따로 선언한 Animal.class 클래스를 만들 수 있는데, 이것이 바로 추상 클래스이다.
추상 클래스의 용도
실체 클래스의 공통적인 특성(필드, 메소드)을 뽑아내어 추상 클래스를 만드는 이유는
첫째, 공통된 필드와 메소드의 이름을 통일할 목적이다.
실제 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다.
데이터와 기능이 모두 동일함에도 불구하고 이름이 다르면 객체마다 사용방법이 달라진다. 그럴때 추상메소드를 상속함으로써 필드와 메소드 이름을 통일할 수 있다.
두번째 이유는 실체 클래스를 작성할 때 시간을 절약할 수 있다.
공통적인 필드와 메소드는 추상 클래스에 모두 선언해두고, 다른 점만 실체 클래스에 선언하면 실체 클래스를 작성하는데 시간을 절약할 수 있다.
일반적으로 개발 프로젝트에서 설계자와 코더(코드를 작성하는 사람)는 다른 일을 수행한다. 설계자는 코더에게 클래스는 어떤 구조로 작성해야 한다는 것을 알려주어야한다.
단순히 문서로 전달한다면, 코더가 실수로 필드와 메소드 이름을 다르게 코딩할 수 있다.
코더가 작성해야 할 클래스가 다수이고 이 클래스들이 동일한 필드와 메소드를 가져야 할 경우, 설계자는 이 내용들을 ㅜ려내어 추상 클래스로 설계 규격을 만드는 것이 좋다.
그리고 코더에게 추상 클래스를 상속해서 구체적인 클래스를 만들도록 요청하면 된다.
추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야한다. abstract를 붙이면 new 연산자를 이용해 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다.
추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언을 할 수있다. new 연산자로 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super(..)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야한다.
'Java > information' 카테고리의 다른 글
[자바/JAVA] interface (0) | 2023.05.09 |
---|---|
[자바/JAVA] 추상 클래스와 인터페이스 (0) | 2023.05.04 |
[자바/JAVA] 다형성 (0) | 2023.04.28 |
[자바/JAVA] 상속 (0) | 2023.04.26 |
[자바/JAVA] 헷갈리는 용어 정확하게 정리 (0) | 2023.04.25 |