추상클래스 (abstract class)

 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다.

 클래스가 미완성이라는 것은 멤버의 갯수에 관계된 것이 아니라 미완성 메서드(추상메서드)를 포함하고 있다는 뜻이다.


추상메서드 (abstract method)

 메서드는 선언부와 구현부로 구성되어있다. 추상메서드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둬 자손클래스에서 구현되어야한다.


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



인터페이스(interface)

인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용 하지 않는다.


1
2
3
4
interface InterfaceName {
    public static final TYPE NAME = VALUE;
    public abstract MethodName ();
}


 일반적인 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약사항을 가지고있다. 

-모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.

-모든 메서드는 public abstract 이어야하며, 이를 생략할 수 있다.

모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는 것이며 편의상 생략하는경우가 많다.


인터페이스의 상속

 인터페이스는 인터페이스로만 상속받을 수 있으며 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로부터 상속을 받는 것이 가능하다.(클래스와는 달리 Object클래스와 같은 최고 조상은 없다.)


1
2
3
4
5
6
7
8
9
interface Movable{
    void move(int x, int y);
}
 
interface Attackable{
    void attack(Unit u);
}
 
interface Fightable entends Movable, Attackable{}


인터페이스의 구현

인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없으며, 추상클래스가 상속을 통해 추상메서드를 완성하는 것처럼, 인터페이스도 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성해야한다. 인터페이스를 상속받는 것은 클래스의 'entends'말고 인터페이스를 구현한다는 의미의 'implements'를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
interface Movable{
    void move(int x, int y);
}
 
interface Attackable{
    void attack(Unit u);
}
 
class Fightable implements Movable, Attackable{
    public void move(int x, int y){
        }
    public void attack(Unit u) {
        }
}


 만약 인터페이스의 메서드 중 일부만 구현한다면 클래스는 추상클래스로 선언되어야한다.


인터페이스를 이용한 다중상속(링크참조)




인터페이스의 장점


1. 개발시간을 단축시킬 수 있다: 인터페이스를 이용해 메서드의 내용에 관계없이 선언부만 알면 프로그램을 작성하는 것이 가능하다.


2. 표준화가 가능하다: 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현해 프로그램을 작성하므로 일관적이고 정형화된 개발이 가능하다.


3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다: 상속관계에 있지도 않고, 같은 조상클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 해 관계를 맺어 줄 수 있다.


4. 독립적인 개발이 가능하다: 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램 개발이 가능하다. 클래스와 클래스간 직접적인 관계를 인터페이스를 이용해 간적적인 관계로 변경하면 하나의 클래스 변경이 다른 클래스에 영향을 미치지 않도록 독립적으로 개발할 수 있다.

 

'Study > JAVA' 카테고리의 다른 글

agruments으로 파일이름 입력받아 생성하기  (0) 2014.10.15
예외발생 log 출력  (0) 2014.10.14
Equals 메서드  (0) 2014.10.13
java FILO(2)  (0) 2014.10.13
java FILO(1)  (0) 2014.10.13
Posted by 차희빈

차희빈

달력