인터페이스 (Interface)
다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스
다만 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만, 인터페이스는 오로지 추상 메소드와 상수만을 포함
자바는 클래스를 통한 다중 상속은 지원하지 않지만, 인터페이스를 통해 다중 상속을 지원
* 필드: 클래스 안에서 독립적으로 선언되는 변수
장점
클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.
클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간 단축
일관되고 정형화된 개발을 위한 표준화 가능
인터페이스의 선언
(접근제어자) interface (인터페이스 이름) {
// 상수
(final/static : 지우라고뜸) 타입 상수명(대문자 convention) = 값;
String HI = "Hi~";
// 추상 메서드
List<String> findAllName();
// Default 메소드
default 타입 메소드명(파라미터,...) {...}
default void printHi() {
System.out.println(HI);
}
// static 메소드
static void printHi() {
System.out.println(HI);
}
}
클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하고 모든 메소드는 public abstract이어야 하지만 이 부분은 인터페이스 내에서 공통으로 적용되는 부분이라 생략해도 컴파일 시 자바 컴파일러가 자동으로 추가해주므로, 생략할 수 있다.
* static 메소드: 객체 생성 없이 클래스를 통해 메서드를 직접 호출할 수 있다.
* static 블록: ?
인터페이스의 구현
인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없다,
그렇기 때문에 인터페이스가 포함하고 있는 추상 메소드를 구현하는 클래스를 만들어야 한다.
class (클래스 이름) implements (인터페이스 이름) {...}
다형성을 구현하는 기술
1. 다형성
1 ) 정의
상속 관계에 있는 클래스에서 상위 클래스가 동일한 메세지로 하위 클래스들을 다르게 동작시키는 객체 지향 원리
부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해 자식 클래스에 접근 가능
동적바인딩: 메서드 실행 시점에서 성격이 결정되는 바인딩
동적 바인딩을 통해 부모 클래스가 자식 클래스의 멤버 함수에 접근하여 실행할 수 있다.
아하 클래스에서 생성자를 두 개 하는 것도 다형성
2) 장점
- 여러 객체를 하나의 타입으로 관리할 수 있기 때문에 유지보수가 쉽다.
- 코드 재사용성이 높아진다.
- 클래스간 의존성과 결합도는 줄어들고 확장성은 높아져 안정성이 높아진다.
3) 필수 조건
- 상속관계: 부모 - 자식간 클래스 상속이 있어야 한다.
- 오버라이딩: 다형성이 보장되기 위해서, 하위 클래스 메소드가 반드시 재정의 되어있어야 한다.
- 업캐스팅: 부모 타입으로 자식클래스를 업캐스팅해서 객체를 생성하여야 한다.
* 업캐스팅: 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것.
2. Casting
3. Promotion
4. Dynamic Dispatch
'개발일지 > 일간회고 (TIL)' 카테고리의 다른 글
왜 안되는걸까 (0) | 2022.12.06 |
---|---|
Java 테스트 코드 (0) | 2022.12.04 |
Java 코드가 실행되는 과정 (0) | 2022.11.30 |
발표도 끝! / TIL (22-09-14) (0) | 2022.11.29 |
프로젝트 끝 / TIL (22-11-28) (0) | 2022.11.28 |