abstract?
abstract는 '미완성'이라는 의미를 가지고 있다. 메서드의 선언부만 작성하고 실제 수행 내용은 구현하지 않은 추상 메서드를 선언하는데 사용한다.
abstract가 사용될 수 있는 곳 - 클래스, 메서드
abstract class AbstractTest{ //추상 클래스(추상 메서드를 포함한 클래스)
abstract void move(); //추상 메서드(구현부가 없는 메서드)
}
추상 클래스는 아직 완성되지 않은 메서드가 존재하는 '미완성 설계도'이다.
so 인스턴스를 생성할 수 없다.
AbstractTest a = new AbstractTest(); //에러! 추상 클래스의 인스턴스 생성불가
추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
추상클래스 - 미완성 설계도, 인스턴스 생성불가. 미완성 메서드(추상 메서드)를 포함하고 있는 클래스
추상 클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다. 새로운 클래스를 작성할 때 아무것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느 정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다.
추상 클래스는 'abstract'를 붙이기만 하면 된다. 이렇게 함으로써 이 클래스를 사용할 때, 클래스 선언부 abstract를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주어야 한다는 것을 쉽게 알 수 있다.
추상 클래스는 일반 클래스와 전혀 다르지 않다. 추상 클래에서도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다.
abstract method
선언부만 작성하고 구현부는 작성 하지 않은 채로 남겨 둔 것이 추상메서드이다. 즉, 설계만 해 놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것이다.
메서드를 이와 같이 미완성 상태로 남겨 놓는 이유는?
메서드의 내용이 상속받는 클래스에따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려 주고, 실제 내용은 상속 받는 클래스에서 구현하도록 비워두는 것이다.
추상메서드는 구현부가 없음으로 괄호{}대신 문장의 끝을 알리는 ";"을 적어준다.
abstract 리턴타입 메서드이름();
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.
abstract class Player{ //추상클래스
abstract void play(int pos); //추상메서드
abstract void stop(); //추상메서드
class AudioPlayer extends Player{
void play(int pos){ /*내용 생략*/ } //추상메서드 구현
void stop(){/*내용 생략*/} //추상메서드를 구현
abstract class AbstractPlayer extends Player{
void play(int pos){/* 내용 생략*/ } //추상메서드 구현
상속이 자손 클래스를 만드는데 조상 클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상 클래스를 만드는 것이라고 할 수 있다.
출처:자바의정석
'JAVA > 객체지향' 카테고리의 다른 글
[java/interface] 인터페이스란? (0) | 2022.07.02 |
---|---|
[java/상속] 상속이란? (0) | 2022.07.02 |
[java/thread] int 배열에 있는 숫자 다 뽑아내서 더하기 (2) | 2022.07.01 |
[java/Thread] 쓰레드와 클래스의 차이 (0) | 2022.07.01 |
댓글