추상클래스(abstract class)

HYUNBIN CHO·2021년 7월 7일
0

java

목록 보기
19/23
post-thumbnail

🔷 추상클래스

abstract class 클래스 이름{
....
}

🔸 미완성 메서드(추상메서드)를 포함하고 있는 클래스로, 상속받은 자손클래스에서 구현함으로써 완성시킬 수 있다.
🔸 클래스로서의 역할은 못하지만, 틀의 역할을 함으로써 새로운 클래스를 작성할 때 바탕이 된다.

🔷 추상클래스를 사용하는 이유

🔸 상속받은 자손클래스가 추상클래스가 포함하고 있는 추상메서드들의 구현을 강제하기 위함이다.
(일반클래스로 구현하게되면 메서드들을 구현해도 되고 안해도 되지만, 추상클래스는 반드시 구현해 주어야 한다.)
🔸 추상메서드에 abstract를 사용하는 이유 : abstract없이 빈 구현부{}만 가지고 있다면, 상속하는 자손클래스에서는 메서드가 완전하게 구현된 것으로 인식하고 구현하지 않을 수도 있기 때문이다.

🔷 추상메서드

🔸 선언부만 작성하고 구현부는 작성하지 않은 메서드(=미완성 메서드)
➡️ 메서드의 내용이 상속받는 자손클래스마다 달라질 수 있기 때문에 선언부만 작성하고 주석을 통해 메서드의 목적과 기능에 대해서 설명해준다.

abstract class Player{
    abstract 리턴타입 메서드이름();
    abstract void play(int pos);
    abstract void stop();
}

🔸 사실상 선언부가 구현부보다 중요하다.
➡️ 메서드 이름, 필요한 매개변수, 반환타입만 결정되어있다면 사용하는 사람이 구현하는 것은 그리 어렵지 않다.

🔷 추상클래스 작성하기

🔸 작성방법
1. 여러 클래스에 공통적으로 사용될 수 있는 부분을 추상클래스에 바로 작성.
2. 작성된 여러 클래스들에서 공통적인 부분을 뽑아 추상클래스로 만든 후, 기존클래스에서 상속하도록 함.

🔸 추상화 ↔️ 구체화
- 추상화 : 클래스들의 공통된 부분을 찾아 조상클래스를 만드는 작업
- 구체화 : 상속을 통해서 자손클래스를 구현, 확장하는 작업
‼️ 상속계층도를 따라 올라갈 수록 추상화의 정도는 심해지고, 내려갈 수록 기능이 추가되고 구체화의 정도가 심해진다.

abstract class Unit{
    int x, y;
    abstract void move(int x, int y);
    void stop(){ /*멈추기*/ };
}
class Marine extends Unit{
    void move(int x, int y){
        /* 이동하기 구현 */
    }
    void attack(){
        /* 공격하기 구현 */
    };
}
profile
백견이 불여일타

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN