인터페이스 (Interface)
- 클래스를 확장하여 구현
- 각 클래스의 목적에 맞게 기능을 구현
1. 인터페이스의 구조(=기본 설계도)
- 인터페이스는 클래스가 '무엇을 할 수 있다'라고 하는 기능을 구현하도록 강제하는 특징을 가지며, 다중 구현 가능
- 상수, 추상 메서드로 구성
2. 인터페이스 목적
- 자바의 다형성을 극대화하여 개발 코드의 수정을 줄이고 유지보수성을 높임
- 상속 관계가 아닌 것들도 다형적 변수에 의해 같은 타입으로 만들 수 있음
3. 인터페이스 구조
public interface Calc {
double PI = 3.14; // 인터페이스에서 선언한 변수(일반 변수로 선언)는 컴파일 과정에서 상수로 변환
// 인터페이스에서 선언한 메서드(abstract 안쓰고 선언)는 컴파일 과정에서 추상 메서드로 변환
int add(int num1, int num2)
}
4. 인터페이스 메서드
* JAVA 8 이후 추가
1) 디폴트 메서드
- 기본으로 제공되는 메서드
- 인터페이스에서 기본적으로 제공해주지만, 맘에 안 들면 각자 오버라이딩을 통해 구현 (선택적)
2) 스태틱 메서드
- 재정의 불가능한 메서드
- 반드시 클래스 명으로 메서드를 호출(스태틱 영역에 있으므로, 스태틱 영역에 있는 건 클래스 명으로 불러야 )
- 인터페이스에서 제공해 주는 것으로 무조건 사용(절대적)
* Point
- 인터페이스의 메서드는 추상 메서드인 형태로 존재해야 하지만, JAVA8부터 구현부가 존재하는 2가지의 메서드를 생성 가능
5. 인터페이스 상속
1) 형 상속(type ingeritance)
- 인터페이스 간의 상속은 extends 예약어 사용
- 구현 코드를 통한 기능을 상속하는 것이 나리라 Type만 상속
2) 다중 상속 및 다중 구현
- interface C extends A, B {} // 인터페이스를 다중 상속 가능
- class C implements A, B {} // 클래스는 인터페이스를 다중 구현 가능
3) 인터페이스 구현과 클래스 상속 동시에 가능
6. 추상 클래스와 인터페이스의 공통점
- 추상 메소드를 가지고 있어야 한다.
- 인스턴스화 할 수 없다(new 생성자 사용 X)
- 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다. (인스턴스는 class에서 만들되, 그 데이터를 표현하고자 하는 타입은 인터페이스, 추상 클래스에서 정의하는 게 가능)
- 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현하여야 한다.
'이론 공부' 카테고리의 다른 글
개발 방법론 (0) | 2023.03.14 |
---|---|
GET / POST 방식 (0) | 2023.03.12 |
oauth, JWT (0) | 2023.03.11 |
스프링 프레임워크 (0) | 2023.03.10 |
서블릿과 JSP의 차이 (0) | 2023.03.07 |