티스토리 뷰
인터페이스
- 추상 메서드의 집합
- 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public)
- 추상메서드만 존재
- 추상클래스는 미완성 설계도라고 한다면 인터페이스는 구현된것 아무것도 없고 밑그림이다.
interface 인터페이스이름 { // 구현없음 껍데기만!!
public static final 타입 상수이름 = 값; // 상수만 OK (iv,cv, 생성자 = NO)
public abstract 메서드이름(매개변수목록); // 추상메서드
}
- 모든 멤버변수는 public static final 이여야 하며, 생략할 수 있다.
- 모든 메서드는 public abstract 이여야 하며, 생략할 수 있다.
인터페이스의 상속
- 다중상속가능
- 인터페이스 조상은 인터페이스만 가능(Object가 최고 조상 아님)
인터페이스의 구현
interface Fightable { // 인터페이스 미완성 설계도
void move(int x, int y);
void attack(Unit u);
}
class fighter implements Fightable { // 인터페이스 미완성 설계도 완선 (구현)
public void move(int x, int y) {}
public void attack(Unit u) {}
- 인터페이스의 추상메서드 몸통{} 만들기
- 인터페이스도 추상클래스처럼 인스턴스 생성 불가
- 인터페이스에 정의된 추상 메서드를 모두 구현
class 클래스이름 implements 인터페이스이름 {
public void move(int x, int y) {}
public void attack(Unit u) {}
}
- 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야함
abstract class 클래스이름 implements 인터페이스이름 {
public void move(int x, int y) {}
}
추상클래스와 인터페이스의 공통점
- 추상메서드를 가지고 있다.(미완성 설계도)
추상클래스와 인터페이스의 차이점
- 인터페이스는 인스턴스 변수(iv)를 가질 수 없다.
인터페이스를 이용한 다형성
interface Fightable {
public void move(int x, int y) {}
public void attack(Fightable f) {}
// Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능
}
- 인터페이스를 메서드의 리턴타입으로 지정가능
- 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다. (중요)
Fightable method() { // 반환타입이 Fightable인터페이스이다. 반환타입 일치해야
Fighter f = new Fighter();
return f; // Fightable를 구현한 Fighter 객체반환
}
class Fighter extends Unit implements Fightable { //(1) Fighter는 Fightable를 구현했다.
public void move(int x, int y) {}
public void attack(Fightable f) {}
}
인터페이스의 장점
- 두 대상(객체)간의 ‘연결’, ‘대화’, ‘소통’ 을 돕는 “중간역할”을 한다.
- 선언(설계)와 구현을 분리시킬 수 있게 한다.
- 느슨한 결합 변경에 유리하고 유연
'Java' 카테고리의 다른 글
JAVA - 기본형과 참조형 (0) | 2023.02.13 |
---|---|
JAVA - 상수(constant)와 리터럴(literal) (0) | 2023.02.13 |
Java - 추상메서드 (0) | 2023.01.28 |
Java - 접근제어자 (0) | 2023.01.27 |
Java - 메서드 정리 (0) | 2023.01.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JWT
- 로드밸런서
- CodeDeploy
- 인스턴스
- HTML
- githubactions
- 위치의 중요성
- 오토 스케일링
- Auto Scaling
- 시작 템플릿
- 로드 밸런서
- aws
- EC2
- Load Balancer
- CICD
- flask
- java
- script
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함