일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kb네트워킹캠프
- 금융권 부트캠프
- 금융권it
- 첫알고리즘평가
- kb it's your life
- sql
- autohotkey
- kb 기자단
- kb취업교육
- 취업교육
- 알고리즘
- 금융권 it
- SQLD
- prefixsum #C언어
- 오토핫키
- kbit교육
- sql내장함수
- kb it's your life 기자단
- 반별이벤트
- SQL데이터타입
- 전문가특강
- 멀티캠퍼스
- KB국민은행
- kb 취업교육
- 부트캠프
- 이차원배열
- kb it's your life 6기
- Today
- Total
지식보부상님의 공부 일지
Java [08] 인터페이스 본문
[1] 인터페이스의 역할
◈ 인터페이스 (Interface)
- 두 객체를 연결하는 역할로 다형성 구현을 위한 주요 기술
[2] 인터페이스와 구현 클래스 선언
◈ 인터페이스 선언
interface 인터페이스명 { ... } // default 인터페이스 선언
public interface 인터페이스명 { ... } // public 인터페이스 선언
- 접근 제한자로 (default) 와 public 사용 가능
◈ 구현 클래스 선언
public class 클래스명 implements 인터페이스명 { ... }
- implements 로 인터페이스 사용
◈ 변수 선언과 구현 객체 대입
- 인터페이스도 변수의 타입으로 사용 가능
- 구현 객체를 사용하려면 인터페이스 변수에 구현 객체 대입해야
RemoteControl.java (인터페이스)
public interface RemoteControl {
// public 추상 메서드
public void turnOn();
}
Television.java (클래스)
public class Television implements RemoteControl {
@Override
public void turnOn() {
System.out.println("Tv를 켭니다.");
}
}
Radio.java (클래스)
public class Radio implements RemoteControl {
@Override
public void turnOn() {
System.out.println("라디오를 켭니다.");
}
}
RemoteControlMain.java
public class RemoteControlMain {
public static void main(String[] args) {
RemoteControl rc = new Television();
rc.turnOn(); // Tv를 켭니다. 출력
rc = new Radio();
rc.turnOn(); // 라디오를 켭니다. 출력
}
}
[3] 상수 필드
◈ 상수 필드
- 인터페이스에 불변의 상수 필드 선언 가능
- 기본적으로 public static final 특성 => 생략시 자동적으로 컴파일 과정에서 붙음
- 관례적으로 모두 대문자, 언더바(_) 로 연결하여 명명
RemoteControl.java (인터페이스)
public interface RemoteControl {
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
}
RemoteControlMain.java
public class RemoteControlMain {
public static void main(String[] args) {
System.out.println(RemoteControl.MAX_VOLUME); // 10
System.out.println(RemoteControl.MIN_VOLUME); // 0
}
}
[4] 추상 메소드
◈ 추상 메소드 (abstract method)
- public abstract 생략해도 컴파일 과정에서 자동으로 붙음
- 리턴 타입, 메소드명, 매개변수만 기술 ( 중괄호, 내용 작성 x )
RemoteControl.java (인터페이스)
package ch08.sec04;
public interface RemoteControl {
// 상수 필드
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
// public 추상 메서드
void turnOn();
void turnOff();
void setVolume(int volume);
}
Television.java (클래스)
package ch08.sec04;
public class Television implements RemoteControl {
private int volume;
@Override
public void turnOn() {
System.out.println("Tv를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("Tv를 끕니다.");
}
public void setVolume(int volume) {
if(volume < RemoteControl.MIN_VOLUME){
this.volume = RemoteControl.MIN_VOLUME;
} else if(volume > RemoteControl.MAX_VOLUME){
this.volume = RemoteControl.MAX_VOLUME;
} else {
this.volume = volume;
}
System.out.println("현재 Tv 볼륨 : " + this.volume);
}
}
Radio.java (클래스)
package ch08.sec04;
public class Radio implements RemoteControl {
int volume;
@Override
public void turnOn() {
System.out.println("라디오를 켭니다.");
}
public void turnOff() {
System.out.println("라디오를 끕니다.");
}
public void setVolume(int volume) {
if(volume > RemoteControl.MAX_VOLUME){
this.volume = RemoteControl.MAX_VOLUME;
}
else if(volume < RemoteControl.MIN_VOLUME){
this.volume = RemoteControl.MIN_VOLUME;
}
else {
this.volume = volume;
}
System.out.println("현재 라디오 볼륨 : " + this.volume);
}
}
RemoteControlMain.java (메인)
package ch08.sec04;
public class RemoteControlMain {
public static void main(String[] args) {
RemoteControl rc = new Television();
rc.turnOn(); // Tv를 켭니다. 출력
rc.turnOff(); // Tv를 끕니다. 출력
rc.setVolume(3); // 현재 Tv 볼륨 : 3 출력
rc.setVolume(14); // 현재 Tv 볼륨 : 10 출력
rc = new Radio();
rc.turnOn(); // 라디오를 켭니다. 출력
rc.turnOff(); // 라디오를 끕니다. 출력
rc.setVolume(5); // 현재 라디오 볼륨 : 5 출력
rc.setVolume(-3); // 현재 라디오 볼륨 : 0 출력
}
}
[5] 디폴트 메소드
◈ 디폴트 메소드
- 완전한 실행 코드를 가진 메소드 => 실행부 (중괄호) 존재
- 리턴 타입 앞에 default 키워드 추가
[public] default 리턴타입 메소드명(매개변수, ..) { ... }
- 구현 클래스에서 디폴트 메소드 재정의 가능
- 반드시 public 이어야하고, default 생략해야 함
[6] 정적 메소드
◈ 정적 메소드
- 구현 객체 없어도 인터페이스만으로 호출 가능
- public 생략해도 컴파일시 자동 추가
[public | private] static 리턴타입 메소드명(매개변수, ...) { ... }
- 실행부에서 상수 필드 제외한 다른 메소드, 필드 등 호출 불가
[7] private 메소드
◈ private 메소드
- private 메소드 : default 메소드 내에서만 호출 가능, 객체 내 중복 코드 줄이기 위해 사용
- private static 메소드 : static 메소드 내에서도 호출 가능
[8] 다중 인터페이스
◈ 다중 인터페이스
- 여러개 인터페이스 implements 가능
=> 쉼표로 구분하여 추가하면 됨
public class implements 인터페이스A, 인터페이스B { ... }
[9] 인터페이스 상속
◈ 인터페이스 상속
- 인터페이스도 다른 인터페이스 상속 가능
- 다중 상속 허용
public interface 자식인터페이스 extends 부모인터페이스1, 부모인터페이스2 { ... }
- 자식 인터페이스 구현 클래스에서는 부모 인터페이스의 추상 메소드도 재정의 해야함
[10] 타입 변환
◈ 자동 타입 변환 (promotion)
- 부모가 인터페이스 구현(implements) 중이면 자식 클래스도 인터페이스 타입으로 자동 타입 변환 가능
- B, C, D, E는 모두 인터페이스 A로 자동 타입 변환 가능
◈ 강제 타입 변환 (casting)
- 구현 객체가 인터페이스 타입으로 자동 변환시 인터페이스에 선언된 메소드만 사용 가능
=> 구현 객체의 메소드 사용하고 싶으면 강제 타입 변환 필요
'KB IT's Your Life > Java' 카테고리의 다른 글
Java [10] 라이브러리와 모듈 (0) | 2025.04.24 |
---|---|
Java [09] 중첩 선언과 익명 객체 (0) | 2025.04.24 |
Java [07] 상속 (1) | 2025.04.22 |
Java [06] 클래스 (1) | 2025.04.22 |
Java [05] 참조 타입 (3) | 2025.04.22 |