07-3 추상클래스

 

사전적 의미로 추상(abstract)는 실체 간에 공통되는 특성을 추출한 것을 말한다. 

객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 

 

추상 클래스와 실체 클래스는 상속의 관계를 가지고 있기에 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성(필드, 메소드)을 가질 수 있다.

 

 


추상 클래스의 용도

  • 공통된 필드와 메소드의 이름을 통일할 목적

여러 사람이 설계하는 경우 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있는데 이를 통일할 목적으로 사용된다.

 

  • 실체 클래스를 작성할 때 시간 절약

공통적인 필드와 메소드는 추상클래스에 선언하고 다른 점만 실체 클래스에 선언하므로 실체 클래스를 작성하는데 시간을 절약할 수 있다.

 

이런 이유들 때문에 설계자는 어플리케이션 내에서 공통으로 사용하는 필드와 미소드를 추려내어 추상 클래스로 설계 규격을 만드는 것이 좋다. 

 

 


추상 클래스 선언

추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드가 붙어야한다. 

abstract가 붙으면 new연산자로 객체를 생성하지 못하고 오로지 상속을 통해서 자식 클래스만 만들 수 있다.

public abstract class 클래스이름 {
    //필드
    //생성자
    //메소드
}

 

비록 new연산자로 객체를 생성할 수 없지만 자식 객체에서 super(), super.메소드명() 등으로 호출해 객체를 생성 필드와 메소드를 사용할 수 있게 되므로 추상 클래스 역시 생성자를 반드시 작성해줘야 한다.

 

 


추상 메소드와 재정의

추상 클래스를 사용하는 여러 케이스 중에 메소드의 선언만 통일하고, 실행 내용은 실체 클래스마다 달라야 하는 경우가 존재한다. 이런 경우를 위해 추상 클래스는 추상 메소드를 선언할 수 있다. 

추상 메소드는 abstract 키워드와 함께 메소드의 선언부만 있고 메소드 실행 블록인 {}가 없는 메소드를 말한다.

[public | protected] abstract 리턴타입 메소드이름(매개변수, ... );

 

추상 클래스 설계시 실체 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있다면 추상 메소드를 선언한다.

하위인 실체 클래스가 이를 재정의 하지 않으면 컴파일 에러가 발생한다.

 

+ Recent posts