일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- CRUD게시판만들기
- 오버라이딩
- html기초
- Oracle기초
- 프로그래머스 MYSQL
- 자바기초
- jsp 날짜팝업
- 자바 정규표현식 예제
- 2020정보처리기사실기요약
- PLSQL
- 스프링 crud
- 자바연산자
- 스프링 CRUD게시판
- 2020정보처리기사실기정리
- js datepicker
- jsp게시판만들기
- 자바배열예제
- 오라클설치
- spring crud게시판
- spring crud
- crud게시판
- jsp 팝업띄우기
- 정보처리기사실기정리
- 정처기실기정리
- 프로그래머스 SQL
- 2020정보처리기사실기
- 스프링게시판만들기
- 날짜지정팝업
- 게시판만들기
- 프로그래머스 쿼리문
Archives
- Today
- Total
영보의 SystemOut.log
[Java] 자바 인터페이스 / 인터페이스 구현 / 인터페이스 예제 본문
반응형
\자바/스프링 기반 디지털 융합 웹 개발자 양성과정 6일차
인터페이스
- 추상 클래스의 특별한 형태
- 개발 코드와 객체가 서로 통신하는 접점
- 개발 코드는 인터페이스의 메소드만 알고 있으면 OK
- 자바에서는 다중 상속을 가능하게 하기 위해서 인터페이스를 제공한다
# 형식
interface 인터페이스이름{ 상수; 추상 메소드(매개변수); 디폴트 메소드(매개변수) 정적 메소드( ) } |
interface 인터페이스이름{ public static final 자료형 상수이름 = 값; public abstract 추상메소드(매개변수); default void 디폴트메소드(매개변수); static void 정적메소드( ); } |
- interface는 예약어로 선언하며 상수 또는 추상 메소드, 디폴트 메소드, 정적 메소드 (자바 8에 추가)를 포함할 수 있다
- interface 내의 메소드는 서브 클래스에서 어떻게 동작해야 할지를 구현(새롭게 정의)해 주어야 한다
- interface는 추상 메소드를 멤버로 갖기 때문에 인스턴스를 생성할 수는 없지만 레퍼런스 변수는 선언이 가능하다
인터페이스 구현
# 익명 구현 객체
- 명시적인 구현 클래스 작성 생략하고 바로 구현 객체를 얻는 방법
- 이름 없는 구현 클래스 선언과 동시에 객체 생성
인터페이스 변수 = new 인터페이스() {
// 인터ㅔ이스에 선언된 추상 메소드의 실체 메소드 선언
};
인터페이스 예제
# RemoteControl.interface
package 인터페이스실습;
/*
RemoteControl 인터페이스는 Television 클래스와 Audio 크래스가 가지고 있는 기능들을 추상 클래스로 정의해두는 인터페이스다.
*/
public interface RemoteControl {
// '볼륨' 조절을 상수로 선언
// public static final 생략 가능
public static final int MAX_VOLUMN = 10; // 최대 볼륨
public static final int MIN_VOLUMN = 0; // 최소 볼륨
// '추상 메소드' 선언
// public abstract 생략 가능
public abstract void turnOn(); // 켜기
public abstract void turnOff(); // 끄기
public abstract void setVolumn(int volumn); // 볼륨 조절
/*
자바 8 버전부터는 '디폴드' 메소드와 '정적' 메소드를 구성 맴버로 구현 가능 !
*/
// '디폴트' 메소드 구현 => 허용한 이유 => 기존 interface 를 확장해서 새로운 기능을 추가하기
default void setifMute(boolean mute) {
if (mute) {
System.out.println("무음 처리 합니다.");
} else {
System.out.println("무음 해제 합니다.");
}
}
// '정적' 메소드 구현 => 허용한 이유 => 디폴트 메소드와는 달리 객체가 없어도 인터페이스만으로 호출이 가능함 !
static void changeBetery() {
System.out.println("건전지를 교환합니다.");
}
}
# Audio.java
package 인터페이스실습;
public class Audio implements RemoteControl{
// 맴버 변수 선언
private int volumn;
@Override
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("Audio를 끕니다.");
}
@Override
public void setVolumn(int volumn) {
if(volumn > RemoteControl.MAX_VOLUMN) {
this.volumn = RemoteControl.MAX_VOLUMN;
}else if(volumn < RemoteControl.MIN_VOLUMN){
this.volumn = RemoteControl.MIN_VOLUMN;
}else{
this.volumn = volumn;
}System.out.println("현재 Audio 볼륨 : " + this.volumn);
}
}
# Television.java
package 인터페이스실습;
public class Television implements RemoteControl{
// 맴버 변수 선언
private int volumn;
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void setVolumn(int volumn) {
if(volumn > RemoteControl.MAX_VOLUMN) {
this.volumn = RemoteControl.MAX_VOLUMN;
}else if(volumn < RemoteControl.MIN_VOLUMN){
this.volumn = RemoteControl.MIN_VOLUMN;
}else{
this.volumn = volumn;
}System.out.println("현재 TV 볼륨 : " + this.volumn);
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
}
# MyClass.java
package 인터페이스실습;
/*
개발 코드
*/
public class MyClass {
public static void main(String[] args) {
RemoteControl rc = null ;
rc = new Television();
rc.turnOn();
rc.setVolumn(7);
rc.setifMute(true);
RemoteControl.changeBetery();
rc.turnOff();
System.out.println();
rc = new Audio();
rc.turnOn();
rc.setVolumn(7);
rc.setifMute(true);
RemoteControl.changeBetery();
rc.turnOff();
System.out.println();
}
}
반응형
'국비교육(아이티센 입사교육) > Java' 카테고리의 다른 글
[Java] 람다식(Lambda Expressions) / 스트림(Stream) / 예제 (0) | 2021.10.06 |
---|---|
[Java] 자바 스레드(Thread)개념 / 스레드 스케줄링 / 예제 (0) | 2021.10.06 |
[Java] 거스름돈 반환 프로그램 (0) | 2021.10.01 |
[Java] 소문자 대문자 변환, 대문자 소문자 변환 프로그램 (0) | 2021.10.01 |
[Java] this변수, this()차이점 / super변수, super()차이점 (0) | 2021.10.01 |