본문 바로가기

프로그래밍/JAVA

추상클래스와 인터페이스

abstract VS interface

 공 통 점

1. 추상클래스와 인터페이스는 객체 생성을 할 수 없다.

2. 멤버 함수의 선언부(원형:prototype)만 있고, 정의부(구현:Body)가 없는 메소드를 가진다.

3. 추상클래스와 인터페이스 모두 직접 사용하는 것이 아니라, 해당 추상 클래스와 인터페이스를 상속받아
서 구현을 해서 사용한다
.

4. 추상클래스와 인터페이스를 상속하여 만든 클래스의 객체의 참조변수로서 다형성을 구현할 수 있다.
  * 상위클래스의 참조변수로 하위클래스 객체 생성시 하위클래스에서 구현된 메소드 접근이 된다.
    즉, 자바에서는 참조변수의 type이 중요한 것이 아니라, 실제 메모리에 생성된 type이 중요하다.

5. 추상클래스와 인터페이스 내의 추상메소드를 상속받아 구현한 곳에서  throw를 하고자 할 때에는,
   추상메소드와 인터페이스에도 throws를 써줘야 한다.
   
   ex) 추상 클래스 혹은 인터페이스
        abstract void Show() throws Exception
        상속받은 서브 클래스
        public void Show() throws Exception{
         ~
        throw new Exception("~");
        ~
        }

 차 이 점
1. 추상 클래스와 인터페이스는 추상메소드(선언부만 존재하고 정의부는 없는)를 가지고 있는 데, 추상클래스에서는 정의부가 존재하는 메소드도 함께 사용할 수 있다. 반면 인터페이스는 정의부가 있는 메소드는 사용 불가하며, 오직 추상메소드만 선언할 수 있다.

2. 추상클래스는 멤버변수를 만들 수 있으나, 인터페이스는 멤버변수를 만들 수 없다.
    단, 인터페이스 내에 상수는 선언이 가능하다. 이 때  public static fianl 키워드는 생략 가능하다.

3. 추상클래스는 클래스이기 때문에 extends로 상속받으며 다중 상속이 불가능하나, 인터페이스는 implements로 상속받으며 다중 상속이 가능하다.

4. 추상클래스는 클래스와 메소드에 abstract라는 키워드를 쓰지만, 인터페이스는 자체와 멤버가 모두 public absract이기 때문에 public abstract 키워드를 생략 할 수 있다. 컴파일러가 자동으로 붙여준다.



기  타.
1. 추상클래스
 - 하나 이상의 추상메소드를 포함한 클래스는 추상클래스가 된다.
 

2. 인터페이스
 - interface는 접근지정자는 자동으로 public으로 된다.


결  론.
 추상클래스와 인터페이스에 있는 추상메소드는 모두 구현해야만 사용이 가능하다. 어떤 경우에 추상클래스를 사용하고, 어떤 경우에 인터페이스를 사용할까? 추상클래스와 인터페이스 모두 상속을 받아서 구현을 하게 된다. 하위 클래스에서 반드시 구현을 모두 해야만 하는 경우에는 추상클래스로 만들어서 모든 하위클래스에서 구현하여 사용할 수 있도록 하고, 하위 클래스 중에 일부만 그 기능을 구현해서 사용하는 경우의 것들은 인터페이스로 만들어 필요한 하위클래스에서만 상속받아 구현하도록 하면 된다.