본문 바로가기
JAVA BASE/OOP(객체지향 프로그래밍)

11. [자바] 추상클래스(abstract class)

by staticClass 2020. 12. 15.

추상클래스란?

클래스가 설계도라면 추상클래스는 미완 설계도이다.
추상클래스는 클래스로서의 역할을 다 못하지만 새로운 클래스를 작성할 때
바탕이 되는 조상클래스이다.
즉 새로운 클래스를 작성할 때 어느 정도의 틀을 잡아주는 게 추상클래스이다.
추상클래스를 만드는 법은 키워드 'abstract'를 붙이면 된다.

abstract class Main {
    ...
}

추상클래스는 추상메서드를 가지고 있다는 것 외에는 일반 클래스와 다를 게 없다.
추상클래스에도 생성자, 멤버변수, 메서드를 가질 수 있다.

추상 메서드

추상메서드는 선언부만 작성하고 몸통은 작성하지 않는다

/* 주석을 통해 어떤 기능을 수행할 목적인지 작성 */
abstract 리턴타입 메서드이름();

키워드인 'abstract'를 작성해주고 구현부가 없으므로 '{}' 대신 ';'을 적어준다.

추상클래스를 상속 받은 자손클래스는 오버라이딩을 통해 조상의 기능을 구현해주어야 한다
만일 추상클래스를 상속받은 자손클래스가 메서드 중 하나라도 구현을 하지 않는다면
이 자손 클래스도 추상클래스로 지정해 주어야 한다.

abstract class Player { // 추상클래스
    abstract void play(int pos);        // 추상메서드
    abstract void stop();                // 추상메서드
}

class AudioPlayer extends Player{
    @Override
    void play(int pos) { ... }    // 추상메서드를 구현
    @Override
    void stop() { ... }            // 추상메서드를 구현
}

abstract class AbstractPlayer extends Player {    // 추상클래스
    void play(int pos) { ... }    // 추상메서드를 구현
    // stop() 메서드가 구현되지 않아 이 클래스는 추상클래스로 지정해주어야 한다.
}

실제 작업내용인 구현부가 없는 메서드가 어떤 의미일까?
메서드의 이름과 메서드에 필요한 매개변수, 리턴 타입을 결정하는 것은 생각보다 어려운 일이고
선언부만 작성해도 메서드의 절반 이상이 완성된 것이라 해도 과언이 아니다.

추상클래스의 작성

여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고
기존의 클래스의 공통적인 부분을 뽑아 추상클래스로 만들어 상속시키기도 한다.

추상 : 실체 간에 공통되는 특성을 추출한 것

상속은 자손 클래스를 만드는데 조상 클래스를 사용한다면
추상화는 반대로 기존 클래스의 공통부분을 뽑아 조상 클래스를 만드는 것이다.
상속은 따라 내려갈수록 기능이 점점 추가되어 구체화되지만
상속을 따라 올라갈수록 추상화가 된다고 할 수 있다.
즉, 상속 계층도를 따라 내려가면 세분화, 올라가면 공통 요소만 남게 된다.

추상화 : 클래스간의 공통점을 찾아 공통의 조상을 만드는 작업
구체화 : 상속을 통해 클래스를 구현, 확장하는 작업

 


 

추상! 추상이라는 단어 자체가 이해가 안간다.. 
미술에서 추상적이다 라는 말을 너무 많이 들어봐서 그런지
추상 클래스에 대해 공부를 해도 추상 이라는 단어가 뜻하는 바를 모르겠다🤢
그래도 추상클래스가 상속과는 반대(?)로 이미 만들어 둔 여러 클래스들의
공통적인 부분을 뽑아 묶은 클래스 라는것과 
설계목적으로 추상클래스를 만들어둔 뒤 실체 클래스들의 필드와 메서드의 이름 통일
되게끔 유도 해줄수도 있겠다..
단어는 정확히 몰라도 넘어가련다!👌

댓글