반응형
[1] 인터페이스
(1) 인터페이스 interface
- 추상화 정도가 높은 추상클래스의 윗버전 같은 것이다
- 인터페이스는 기본설계도, 추상클래스는 미완성 설계도 이다
- 인터페이스에 메서드를 추가하면 , 인터페이스를 구현한 모든 클래스에 각각 메서드를 구현해야하는 대공사가 필요하다
- 인터페이스는 Object클래스가 최상위 클래스가 아니다. 최고 상위클래스는 없다
(2) 인터페이스 구성
(2-1) 상수
(2-2) 추상메서드
(2-3) default 메서드
- 추상메서드의 기본구현을 제공한다. 메서드를 추가해도 인터페이스를 구현한 모든 클래스에 메서드를 추가하지 않아도된다
- public default 기본
- 인터페이스를 구현한 클래스에서 디폴트 메서드는 오버라이딩한다
- 상위클래스의 메서드와 이름이 똑같다면 디폴트 메서드는 무시된다
public default void play(){...};
(2-4) static 메서드
인스턴스 생성없이도 인터페이스 타입으로 사용가능한 메서드
(3) 인터페이스 상속
- 다중상속이 가능하다
- 인터페이스와 인터페이스로만 상속받는다
- 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음
- 클래스 상속은 단일상속만 가능하여 인터페이스와 차이점이 있다
- 구현코드 상속이 아니라 타입상속이다
interface 상위1 {...}
interface 상위2 {...}
interface 하위 extends 상위1 , 상위2 {...}
(4) 인터페이스 구현
- 멤버변수: public static final 타입 변수 (생략O)
- 메서드 : public abstract 메서드 (생략O)
- static 메서드 , 디폴트 메서드는 생략불가
- 생략된 부분은 컴파일시 컴파일러가 자동적으로 추가한다
(5) 인터페이스 사용이유
- 개발시간 단축
- 표준화 가능
- 클래스들과의 관계 연결
- 독립 프로그래밍 제작
- 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
- 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification)
- 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음
- 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미임
[2] 인터페이스 다형성
(1) 인터페이스 다형성
- 1개 인터페이스와 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있다
- 다형성을 활용하기 위해 DAO를 사용한다 data access object
- 만들어진 인터페이스를 MySQL, Oracle 등 여러 데이터베이스에 접목시키기 위해 DAO 인스턴스를 사용한다
(2) 인터페이스 타입 형변환
new 하위클래스 생성자() 를 상위클래스 타입 생성자로 형변환한다
// 인터페이스 선언
interface Fightable {}
// 인터페이스 상속
class Figher implements Fightable {}
// 인터페이스 상속 + 추상 클래스
abstract class Fighter implements Fightable {}
Fightable f = (Fightable) new Fighter();
Fightable f = new Fighter();
(3) 인터페이스를 매개변수 타입으로 설정하기
인터페이스에 인터페이스의 매개변수를 넣는다
void attack (Fightable f) {...}
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {...}
public void attack(Fightable f) {...}
}
(4) 인터페이스를 반환타입으로 설정하기
- Fightable 클래스의 인스턴스 주소를 반환하도록 설정한다
Fightable method() {
Fighter f = new Fighter();
return f;
}
반응형
'🌈 백엔드 > 객체 지향' 카테고리의 다른 글
JAVA_객체지향_ Class 클래스 (0) | 2023.06.19 |
---|---|
JAVA_객체지향_인터페이스 예시 (0) | 2023.06.19 |
JAVA_객체지향_추상클래스 & 가상메서드 (0) | 2023.06.18 |
JAVA_객체지향_다형성 & 업캐스팅 & 다운캐스팅 (0) | 2023.06.18 |
JAVA_객체지향_오버로딩 & 오버라이딩 (0) | 2023.06.18 |
댓글