ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Abstract class와 interface 이야기
    Java 2013. 11. 1. 17:03

    abstract class 와  interface

    추상 클래스는 추상 메소드가 하나 이상 포함되는 클래스를 말한다.
    인터페이스는 제공되는 메소드의 선언만 있는 특정 기능들의 나열이다.

    인터페이스는 모든 메소드가 추상 메소드이며 일반 변
    추상 클래스는 상속받은 자식 클래스가 추상 메소드를 반드시 구현하도록 강제할 때 쓰인다.

    다시 차이점으로 돌아와서,
    추상 클래스와 인터페이스의 가장 큰 차이점은 클래스인가 아닌가의 차이다.

    추상 클래스를 구현하는 것은 extends (상속)이고, 인터페이스는 implements(포함)이다.

    자바라는 언어에서 이 차이점은 매우 중요하다.
    자바는 태생적으로 '단일 상속'만을 지원하기 때문에, 특정 추상 클래스를 구현한 자식 클래스는 다른 클래스를 상속받을 수 없다.
    반대로, implements를 통한 인터페이스의 구현 클래스는 다른 클래스를 상속 받을 수 있다.
    그렇기 때문에 인터페이스는, 이것을 쓰는 가장 큰 이유가 될 수 있는, 다중 상속의 특성을 가진다.
    다중 상속이 가지는 단점 (추가 설명)을 배제하고 장점만을 취한 인터페이스가 유용하게 쓰인다.

    다시 원론적인 얘기로 잠시 벗어나서,
    상속이라는 개념은 부모 클래스의 특성을 자식 클래스가 물려받는다는 것인데,
    이런 개념을 이용하여 추상 클래스는 단순한 성격의 특성만을 부모가 표현하고, 자식의 특성에 맞게 구현하여 쓰도록 유도할 때 쓰인다.

    앞서, 인터페이스는 다중 상속의 문제점을 피하고 장점을 취하고자 했는데
    왜 다중 상속을 써야 하는 것일까? 라는 의문점이 든다.

    자바라는 언어의 태생적 특성에서, 자바는 우선 객체 지향이며, type기반의 언어다.
    관계들을 통해 type(형)을 상속하거나 포함하도록 유도하고, 같은 type을 가진 클래스만이 casting이 가능하다.

    객체 지향의 다형성을 구현하는 방법에서, 자바는 객체를 사용할 때, 객체의 형태를 지정해줘야만 한다.
    이렇게 type으로 제한하여 다형성을 구현하는 자바에서
    상속을 통해 다형성을 표현하면서 생성자와 소멸자, 오버라이딩 등의 문제가 발생할 수 있다.

    이런 문제를 피하기 위해서,
    공통적인 인터페이스로 특정 지을 수 있는 클래스들은 인터페이스 클래스를 통해 구현하고, 다른 클래스들과의 결합도도 줄일 수 있다.


    상속은 sub-classing을 의미하고, implementation은 sub-typing을 의미한다.
    sub-classing은 상속을 통해 기능을 구현하는 것을 말하고,
    sub-typing은 기능을 공통적인 타입으로 묶는 것을 말한다.

    덧붙여서 상속은 inherits다. extends는 확장이다.
    상속이라는 말이 주는 뜻에 초점을 주지말고, 확장의 개념으로 접근해야 한다.


    쉬운 예로 마무리한다.

    class ZetaGundam extends Gundam implements Fighter, Transformable {

    }

     

    댓글

code by jaguarcode.