추상클래스란?

서로 비슷한 클래스의 공통적인 요소를 뽑아서 만든 클래스.
-
미완성 메서드(추상메서드)를 포함하고 있는 클래스이다.

 보통 멤버(메서드,변수)들도 포함할 수 있다.

추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다.

 

추상메서드란?

-선언부만 작성하고 구현부는 작성하지 않고 남겨 둔 메서드.

-메서드를 미완성 상태로 남겨놓은 이유 : 메서드 내용이 상속받는 클래스에 따라 달라질 수 있기에 조상클래스에서는 선언부만 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려주고 실제내용은 상속받는 클래스에서 구현하도록 비워두는 것이다.

 

추상클래스의 특징

-인스턴스를 생성할 수 없다.

-인스턴스가 없으므로 그 자체로 사용되기 보다는 상속을 통해서 자손클래스에 의해서 완성될 수 있다.

-추상클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 전혀 다르지않다.

 추상클래스에도 생성자가 있으며, 멤버변수와 일반 메서드도 가질 수 있다.

-추상클래스도 조상클래스이기 때문에 일반클래스와 마찬가지로 추상(조상)클래스타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다.

 

추상메서드의 특징

-추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정해주어야한다.

-메서드를 작성할 때 실제 작업내용인 구현부보다 더 중요한 부분이 선언부이다.

 

추상화는 어떤 경우에 사용하는가?

-클래스간의 공통점을 찾아내서 조상을 두고자 사용한다.

-해당 추상 메서드를 자손클래스에서 반드시 구현하도록 강요하고자 사용한다.

 그냥 상속받아 쓰는게 아니라 자손클래스에 맞게 오버라이딩 하여 사용하라고 강요하는 것이다.

 

추상화를 사용함으로써 생기는 장점

-abstract를 붙여 추상메서드임을 알려줄 수 있다. 추상화로 선언해주지 않을 경우 구현을 해야하는지의 여부를 모르고 자손클래스에 맞게 구현하지않고 넘어가는 경우가 생길 수 있다.

-추상클래스로 공통조상을 만들어줌으로써 표준화를 이룰 수 있으며(상속받는 자손클래스들에서

같은 이름의 메서드이름으로 구현하기 때문에), 추상클래스 하나만 보고도 어떠한 기능들이

구현되고 있는지 한눈에 볼 수 있다.

 

추상화(추상클래스,추상메서드)는 어떻게 사용하는가?

-추상클래스 : 클래스 앞에 abstract를 붙인다.           

-추상메서드 : abstract 리턴타입 메서드이름();

 

abstract class Player          //추상클래스

{

             boolean pause;

             int channel;

 

             abstract void play(int pos);

             abstract void stop();

}

 

 

class CDPlayer extends Playter  //추상클래스를 상속받는 자손클래스

{

             void play(int currentPos){    //오버라이딩

                           /* 구현 내용 */

             }

             void stop(){               //오버라이딩

                           /* 구현 내용 */

             }

}

Posted by 윤연식
,