일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 생성자
- jsp
- dbms
- JPA
- dfs
- generic class
- 알고리즘
- Algorithm
- javascript
- BFS
- 코테
- DB
- cloud computing
- sql
- spring
- 가상컴퓨팅
- 클라우드 컴퓨팅
- JDBC
- Stack
- Java
- 크루스칼
- data structure
- python
- MVC
- 자료구조
- Queue
- 코딩테스트
- 공개키 암호화
- 자바의정석
- 암호학
- Today
- Total
PLOD
[Java] interface(인터페이스) 본문
interface는 클래스들의 공통적인 특징을 추출하여 객체 사용 방법을 정의한 타입이다.
위의 그림에서 Car, Plane,Boat 클래스들은 배, 비행기, 보트로써 각각 육,해,공에서 각자 다른 운반 수단이지만 기계로서 공통된 특징이 있다(ex.엔진이 필요함, 연료가 필요함, 금속으로 만들어짐) 그러한 공통적인 특징을 Vehicle로 묶어 관리하면 배 , 비행기, 보트 말고도 예를 들어 우주선 객체를 만들때 쉽게 객체를 만들고 관리 할 수 있다.
interface는 동일한 목적 하에 동일한 기능을 수행하게 강제하도록 하는 역할을 한다. interface는 자바의 다형성을 극대화하고 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용한다.
interface는 객체와 필드 메서드를 만드는 방식은 같지만 , interface에서 변수는 public static final 상수 역할을 하고 메서드는 추상메서드로 정의 될수밖에 없다.(다형성을 극대화 하였기 떄문) 그리고 접근제한자는 public 보다 더 낮은 접근제한으로 작성할 수 없다.
ex) RemoteControl 인터페이스를 통한 Audio, TV 구현
1) RemoteControl interface
// 인터페이스
// 필드는 final 상수처럼 정의한다
// 메서드는 추상메서드처럼 정의한다
public interface RemoteControl {
public int MAX_VOLUMN = 10;
public int MIN_VOLUMN = 0;
public void turnOn();
public void turnOff();
public void setVolumn(int volumn);
}
2) Audio Class
public class Audio implements RemoteControl{
private int volumn;
@Override
public void turnOn() {
System.out.println("오디오를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("오디오를 끕니다.");
}
@Override
public void setVolumn(int volumn) {
if(volumn > MAX_VOLUMN) { //RemoteControl.MAX_VOLUMN
volumn = MAX_VOLUMN;
}
else if(volumn < MIN_VOLUMN) {
volumn = MIN_VOLUMN;
}
this.volumn = volumn;
}
public void output() {
System.out.println(volumn);
}
}
3) Television Class
public class Television implements RemoteControl{
private int volumn;
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
@Override
public void setVolumn(int volumn) {
if(volumn > MAX_VOLUMN) {
volumn = MAX_VOLUMN;
}
else if(volumn < MIN_VOLUMN) {
volumn = MIN_VOLUMN;
}
this.volumn= volumn;
}
public void disp() {
System.out.println(volumn);
}
}
4) Test Class
public class Test {
public static void main(String[] args) {
Audio audio = new Audio();
audio.turnOn();
audio.setVolumn(20);
audio.output();
audio.turnOff();
System.out.println();
Television TV = new Television();
TV.turnOn();
TV.setVolumn(-1);
TV.disp();
TV.turnOff();
}
}
* class와 interface의 상속관계 정리
class를 class가 상속 -> extends
interface를 class가 상속 -> implements
interface를 interface가 상속 -> extends
class를 interface가 상속 -> 존재하지 않는다(X)
'개발 공부 > Java' 카테고리의 다른 글
[Java] Exception(예외 처리) (0) | 2023.01.23 |
---|---|
[Java] API 및 Collection Framework (Map, Set, List) (0) | 2023.01.16 |
[Java] 업캐스팅(upcasting), 다운캐스팅(downcasting) (0) | 2023.01.13 |
[Java] 클래스- 생성자(Constructor) (0) | 2023.01.12 |
[Java] 접근 제어자(access modifier) (0) | 2022.12.04 |