[자바 – Java] 인터페이스 추상클래스 사용 이유 상속 예제 구현 implements

1. 인터페이스(Interface)

1) 모든 메서드가 추상 메서드로 선언된다. (public abstract)
2) 모든 변수는 상수로 선언된다. (public static final)
3) Java 8부터 디폴트 메서드(default method), 정적 메서드(static method) 등의 기능 제공으로 일부 구현 코드가 있다.

2. 인터페이스 구현 & 형(Type) 변환

1) 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환이 된다.

Calc calc = new CompleteCalculator();

2) 상속에서의 형변환과 동일한 의미이다.
3) 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수가 있다.
4) 형 변환되는 경우(업캐스팅) 인터페이스에 선언된 메서드만을 사용 가능하다.

3. 인터페이스의 역할

1) 클래스나 프로그램이 제공하는 기능을 명시적으로 선언한다.
2) 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세서(specification)이다.
3) 클라이언트 프로그램은 인터페이스에서 선언된 메서드 명세만 보고 이를 구현한 클래스들을 사용할 수 있다.
4) 인터페이스를 구현한 다양한 객체를 사용한다. 다형성, JDBC (Java Database Connectivity)

4. 인터페이스를 활용한 DAO(Data Access Object) 구현(implement)하기

1) DB에 회원 정보를 넣는 DAO를 여러 DB 제품이 지원될 수 있게 구현한다.
2) 환경(db.properties)에서 database의 종류에 대한 정보를 읽고 그 정보에 맞게 DAO 인스턴스를 생성하여 실행될 수 있게한다.

5. 인터페이스의 요소

1) 상수
: 모든 변수는 상수로 변환 된다.(public static final)
2) 추상메서드
: 모든 선언된 메서드는 추상 메서드 (public abstract)이다.
3) 디폴트 메서드 (Java 8 이후)
– 기본 구현을 가지는 메서드이다.
– 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드이다.
– default 키워드를 사용한다.

예)

default void description() {

}

4) 정적(static) 메서드(Java 8 이후)
: 인스턴스 생성과 상관없이 인터페이스 타입으로 사용할 수 있는 메서드이다.
5) private 메서드 (Java 9 이후)
– 인터페이스 구현하는 클래스에서 사용하거나 재정의할 수 없다.
– 인터페이스 내부에서만 사용하기 위해 구현하는 메서드이다.
– default 메서드나 static 메서드에서 사용한다.

7. 여러 인터페이스를 구현(implements)

1) 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현할 수 있다.
2) 디폴트 메서드가 중복이 되는 경우는 클래스에서 재정의 하여야 한다.
3) 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환되는 경우 해당 인터페이스에서 선언된 메서드만 사용 가능하다.

8. 인터페이스의 상속(extends)

1) 인터페이스 사이에도 상속을 사용할 수 있다.
2) extends 키워드를 사용한다.
3) 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속이라고 한다.