[Java] 인터페이스, 추상클래스

인터페이스
인터페이스는 구현부가 없는 일종의 불완전한 클래스다. 멤버변수도, 생성자도 가질 수 없다.

인터페이스를 상속할 경우, 그 클래스는 인터페이스의 모든 메소드를 구현-오버라이딩해야 한다.
그리고 접근수준은 무조건 public!이어야만 한다.

interface 인터페이스명
{
**    불완전메소드...**
}

그리고 인터페이스의 상속은 extends가 아닌, implements로 수행한다.
그래서 인터페이스는 상속보단 구현이라 칭한다.

인터페이스는 불완전한 타입이므로, 그 자체로는 생성이 불가능하다. 때문에 구현한 자식클래스를 일정한 타입-규격으로 묶는 용도로만 사용된다.

이렇게 인터페이스와 구현체를 정의하면 image

image 인터페이스의 이름은 I로 시작하거나 able로 끝나는게 관례다.
여튼 저렇게 만들면 image

image 이런식으로 사용이 가능하다.

인터페이스는 클래스와 다르게 한번에 여러개를 구현할 수 있다. 다중상속이 가능하단 것이다. image

image


인터페이스의 상속, 확장
인터페이스는 다른 인터페이스를 상속받을 수도 있다. 당연히 그 구현 의무들을 그대로 다 가져오는 것이다.
키워드는 extends를 쓴다. image

image


추상 클래스
추상 클래스는 클래스와 인터페이스가 섞인 혼종이다. 일반 클래스처럼 필드, 메소드 등을 전부 구현할 수 있지만, 구현되지 않은 메소드를 집어넣을 수도 있다.

때문에 추상 클래스도 불완전 타입이라, 자체로는 생성이 불가능하다.

추상 클래스는 클래스 앞에 abstract만 붙여서 선언한다.

일부 디자인 패턴에 사용된다.

아래는 간단한 사용 예시다. image