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
반응형
'Web Programming > java-jsp' 카테고리의 다른 글
java 스레드, Runnable 인터페이스, 싱글스레드, 멀티스레드, join메서드, sleep메서드 (0) | 2018.08.29 |
---|---|
java 다형성, instanceof, 객체의타입, 상향형변환 (0) | 2018.08.29 |
java 상속, 단일상속, 오버라이딩, 오버로딩, super, Object클래스, Object메서드 (0) | 2018.08.29 |
java 제어자, static, final, 접근제어자 (0) | 2018.08.29 |
java 생성자this, 참조변수this, 정적메서드 (0) | 2018.08.29 |