자바공부를 다시하면서 추상클래스,인터페이스 둘다 추상메서드를쓰고 추상클래스는 공통적인 특성,인터페이스는 able로 끝나는 행동을 생성하는거라고 알고 있는데 공부하면 공부할수록 더어렵고 사람들마다 말하는게 달라서 제대로한번 정리하고 다시 머리를 뜯지 않으려고 제대로 머리에 넣어보자.
클래스를 설계도라 하면, 추상 클래스는 미완성 설계도에 비유할 수 있습니다.
(여기서 클래스가 미완성이라는 것은 추상 메서드를 포함하고 있다는 의미입니다.)
예를들면, 같은 크기의 TV라도 기능의 차이에 따라 여러 종류의 모델이 있지만 설계도 90은 동일할테니, 어느정도 틀을 갖춘 상태에서 진행하는 것이 좋다.이떄 사용할 수 있는 것이 추상 클래스이다.
추상메서드 : 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드이다.
추상 메서드는 상속받는 클래스에 따라 달라질 수 있다.(재정의를 할 수 있다.)
이제 예제를 보면서 알아보자
package 추상클래스;
public abstract class Player {
boolean pause;
int currentPos;
public Player(){ //pause=false,currentPos=0으로 초기화
this.pause=false;
this.currentPos=0;
}
//지정된 위치에서 재생을 시작하는 기능 수행되도록 작성
abstract void play(int pos);
//재생을 즉시 멈추는 기능을 수행하도록 작성
abstract void stop();
public void pause(){
if(pause){
pause=false;
play(currentPos);
}else{
pause = true;
stop();
}
}
}
Player 추상 클래스는 오디오,VCR, 같은 재생 가능한 기기의 부모 클래스 가 될 수 있다.
public class CDPlayer extends Player {
@Override
void play(int pos) {
// 구현 생략
}
@Override
void stop() {
// 구현 생략
}
//CDPlayer 클래스에 추가로 정의된 멤버
int currentTrack;
void nextTrack() {
currentTrack++;
// ...
}
void preTrack() {
if (currentTrack > 1) {
currentTrack--;
}
// ...
}
}
인터페이스는 일종의 추상 클래스로,추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높아
추상 클래스와 달리 몸통을 갖춘 일반 메서드,멤버 변수를 구성원으로 가질 수 없다.
추상 클래스를 미완성 설계도라 하면, 인터페이스는 구현된 것은 아무것도 없는 밑그림만 그려진 기본 설계도 라고 할 수 있다.
인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와 달리 다중 상속을 받는 것이 가능하다.
public interface Movable{
void move(int x ,int y);
}
interface Attackable{
void attak(Unit u);
}
interface Fightable extends Movable, Attackable{
}
클래스의 상속과 마찬가지로 자식 인터페이스는 부모 인터페이스에 정의된 멤버 모두 상속받는다.
접근자
-인터페이스에서 모든 변수는 public static final, 메서드는 public abstract 이다.
하지만 추상 클래스에서는 static 이나 final이 아닌 필드를 가질 수 있고,
public, protected, private 모두 가질 수 있다.
사용목적
-추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로,
상속관계를 타고 올라갔을 때 부모 클래스를 상속하며
부모 클래스가 가진 기능들을 구현해야 할 경우 사용한다.
-인터페이스는 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.
클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.
추상클래스