728x90
반응형
추상 클래스
추상적인 개념을 표현하고, 완성되지 않은 메서드를 가지고 있는 클래스
- 메서드가 미완성되어 있기 때문에 추상 클래스로는 개체를 생성할 수 없다.
- 추상 클래스는 주로 상속관계에서 추상적인 개념을 나타내기 위한 목적으로 사용되고, 단일 상속이 가능하다.
- 추상 메서드를 하나라도 가지고 있으면 추상 클래스가 된다.
- 추상 메서드 : 동작 방식을 결정할 수 없을 때, 확정할 수 없는 경우, 동작부분을 기술하지 않고 비워두는 메서드
- 메서드 오버라이딩이 빈번하게 사용될 것이 예측될 경우에도 사용한다.
- 예) 동물(animal) 클래스를 구형하려고 할 때 동물에 대한 개념은 알고 있지만 구체적으로 어떤 동작을 하는지 알 수 없기 때문에 구체적인 동작을 구현하기 어렵다. move()라는 메서드를 정의할 경우, 동물이 움직인다는 것은 알지만 구체적으로 날아다니는지 기어다니는지는 알 수 없다. 이런 경우에 animal은 추상 클래스로 구현한다.
- 추상 클래스의 예) 동물, 포유류, 어류, 조류, 도형 등
- 추상 메서드의 대표적인 예) 쓰레드의 run() 메서드

public abstract class Animal {      //추상클래스 : 추상메서드를 가지고 있는 클래스
      public abstract void move();   // ';'으로 종료됨을 유의! , 추상메서드 정의
      ...
 };





인터페이스(Interface)
- 인터페이스는 클래스가 아니다. interface 키워드로 선언한다.
- 인터페이스는 객체와 객체 사이의 상호 작용을 나타낸다.
다중 상속의 기능을 구현하려고 할 때, 인터페이스를 사용한다.
- 인터페이스는 추상 메서드만 가질 수 있고, 일반 메서드는 가질 수 없다.
- 인터페이스는 static final형태의 상수만 가질 수 있다. 변수는 가질 수 없다.
- 인터페이스는 데이터는 표현할 수 없고 메서드(함수)만 표현이 가능하다.
- 이미 클래스 상속을 받고 있더라도 인터페이스의 상속을 받는 것이 가능하다.
- 인터페이스도 추상클래스처럼 객체를 생성할 수 없다. 다른 클래스에 의해서 구현(implements) 하여 사용한다.
- 추상 메서드는 자식 클래스에서 반드시 구현해야 한다.

<인터페이스와 추상클래스의 구분>
 - 인터페이스 : 모든 메서드가 추상메서드이면 인터페이스로 구현, 다중 상속
 - 추상클래스 : 여러개의 메서드 중 일부가 추상메서드이면 추상클래스로 구현, 단일 상속

<인터페이스의 사용>
 - 인터페이스의 선언 : interface 인터페이스이름
 - 인터페이스의 구현 : class 클래스이름 implements 인터페이스이름
 
   public interface 인터페이스_이름 {
        반환형 추상 메서드1(...) ;
        반환형 추상 메서드2(...) ;       //인터페이스 안에는 추상 메서드들이 정의된다.
         ...
   }
                                                                                                                                             
  public class 클래스_이름 implements 인터페이스_이름 {
        반환형 추상 메서드1(...) {
         ...
        }
        반환형 추상 메서드2(...) {
         ...
        }                               //인터페이스를 구현하는 클래스는 추상 메서드의 몸체를 구현하여야한다.
   }



<여러 인터페이스를 동시에 구현>



인터페이스와 다중 상속
- 만약, 클래스에서 다중상속이 허용된다면 객체를 생성하여 인스턴스 변수에 접근할 때 obj.x는 SuperA 클래스의 멤버인지 SuperB 클래스의 멤버인지 구분이 안된다. 그래서 자바에서 클래스는 단일 상속만 허용한다.
- 다중상속의 효과를 구현하고 싶다면, 인터페이스를 구현하면서 동시에 다중 상속을 하면된다.




<상수 정의>
  인터페이스에서는 변수는 사용할 수 없고, 상수만 사용할 수 있다.


728x90
반응형

+ Recent posts