본문 바로가기
JAVA

추상클래스(abstract class), 추상메서드(abstract method)

by 꿀꿀이냐옹이 2011. 3. 25.
반응형

추상클래스?(abstract class)1

 

클래스를 인스턴스의 완전한 설계도로 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다.

미완성 설계도로 제품을 만들 수 없듯이, 추상클래스 타입의 인스턴스는 생성할 수 없다.

오로지 상속을 통해 자손클래스에서 설계도를 완성하여 인스턴스를 생성할 수 있다.

 

추상클래스는, 새로운 클래스를 작성하는 데 있어서 바탕이 되는 조상클래스로서 중요한 의미가 있다.

 

예를 들어,

"전자제품"이라는 추상클래스가 이미 존재한다면, TV, 컴퓨터, 냉장고 등의 전자제품 유형의 클래스를 만드는 데 도움이 될 것이다.

 

1. "전자제품" 클래스에 이미 완된 메서드가 있다면, TV,컴퓨터,냉장고는 상속을 통해서 바로 전자제품으로서의 특징을 가질 수 있다.

2. "전자제품"클래스에 있는 추상메서드는, TV, 컴퓨터,냉장고가 추상메서드의 형태를 따라 각각 다른 방식으로

     메서드를 완성하여 사용해야 한다.

 

여기서 1번의 경우엔, 클래스 상속을 통해 실현되고, 2번의 경우 메소드 오버라이딩을 통해 구현된다.

만약 추상클래스가 1번의 이점만 가진다면, 굳이 추상클래스로 선언 않고 일반 클래스로 선언해도 된다, 이 말은

추상클래스 사용의 진정한 강점은 상속을 통한 메서드 사용이 아닌, 추상메서드를 제공함으로써 자손 클래스의 메서드 오버이딩을

간편하게 하고, 동시에 다형성을 이룰 수 있다.

 

중요한 것은 추상클래스도 이름에서 알 수 있듯이, 명백히 "클래스"의 한 종류이다, 고로 추상클래스는 완성되지 못한 추상메서드를

포함하고 있다는 특징을 제외하고는, 일반 클래스와 똑같이 멤버변수도 있고, 생성자도 포함할 수 있다.

 

특징

1.생성자는 있지만, 인스턴스를 생성하지는 못한다.

2.반드시 1개 이상의 추상메서드를 가지고 있어야 한다.

 

 

추상메서드? (abstract method)

추상메서드를 사용하는 이유는, 각 클래스에 공통으로 존재하는, 똑같은 기능을 구현하는 메서드라도, 그 클래스의 특징에 따라.

메서드의 실제 구현방법이 틀릴 수 있기 때문이다. 예를 들어 똑같이 int 값을 인자로 전달받아, 해당 숫자만큼 체력을 회복시켜주는

메서드라도, 메서드가 속한 클래스가 사람이냐, 동물이냐, 식물이냐에 따라 구체적인 메서드 코딩이 달라질 수 있다.

고로 사람,동물,식물의 추상클래스인 "생물"에서"체력회복"이라는 메서드를 추상적으로 제공해야만, 각 각 클래스가 메서드

오버라이딩을 통해 메서드를 구현할 수 있다.

 

또한, 메서드를 사용하는 쪽에서는 메서드가 실제로 각각 자손 클래스에서 어떻게 구현되어 있는지 몰라도, 추상메서드에서 정의한

이름과 매개변수, 리턴타입을 이용하여, 추상메서드가 실제로 구현이 안 되어 있더라도, 메서드를 사용하는 코드를 작성할 수 있다.

 

 추상클래스에서 선언한 추상메서드는 강요성이 있어서, 자손클래스는 반드시 추상클래스에 있는 모든 추상메서드를,

선언된 형식에 맞게 구현시켜야 한다.

 

사실 추상클래스를 일반클래스로 전환하여, 메서드 구현부분을 비워둬도, 어차피 자손클래스에서 메서드 오버라이딩을 통해

구현할 것이니, 결과적으로 똑같은 기능을 할 수 있다, 하지만 굳이 추상클래스로 선언하는 이유는 위와 같이 자손클래스에

대한 강요성을 통해, 불완전한 클래스의 인스턴스가 생성되는 일을 피할 수 있기 때문이다.

 

 추상화란 각 클래스간의 공통점을 찾아내어 공통의 조상을 만드는 작업이고 다수클래스->추상클래스

구체화란 공통된 조상을 구현, 확장하는 작업이다: 추상클래스->다수클래스

반응형

'JAVA' 카테고리의 다른 글

JAVA  (0) 2022.08.19
스레드  (0) 2011.08.10
static 사용법  (0) 2011.03.25
다형성(polymorphism)과 참조변수의 형변환  (0) 2011.03.25
인터페이스란?  (0) 2011.03.25

댓글