[인터페이스 정의]
1. 인터페이스 개요
ex) 음향기기의 볼륨조절 장치 -> 인터페이스로 구현 -> 여러가지 음향기기 클래스에 쉽게 적용 가능
- 클래스와는 다른 개념
- 명칭과 매개변수가 동일한 메서드로 객체에 접근 가능하도록 하기 위한 기법
- 인터페이스의 모든 메서드는 추상 메서드이며 "abstract" 키워드를 붙이지 않아도 됨
- 인터페이스에 정의된 메서드는 인터페이스를 사용하는 클래스에서 반드시 구현해야 함
- 인터페이스의 모든 메서드는 public으로 선언해야 함
- 인터페이스는 값을 저장하는 일반 변수를 가질 수 없으나 상수는 사용 가능함
- 인터페이스의 메서드는 내부적으로 "public abstract"로 인식함
- 클래스에서 인터페이스를 적용할 때 "구현한다."라는 표현을 쓰며 "implements" 키워드를 사용함
- 인터페이스를 적용하는 클래스에서 인터페이스의 메서드 내용을 구체적으로 구현해야 함
- 자바의 클래스는 다중 상속이 불가능하나! 인터페이스를 이용할 경우 다중 상속이 가능
(클래스는 단 한개만 상속받을 수 있음)
- 문법
interface Volume { -> class 대신 interface 사용
void volumeUp();
}
- 인터페이스를 클래스에서 구현하는 문법
class Audio implements Volume {
public void volumeUp() { 문장 }
}
2. 인터페이스 활용
- 인터페이스 정의
interface Volume {
void volumeUp();
void volumeDown(); -> 추상메서드와 유사-메서드 명칭만 작성. 내용은 작성X(구현/적용하는 클래스에서 작성)
}
- 인터페이스 구현
class Audio implements Volume { -> volumeUp, Down의 실제 내용을 여기서 작성
public void volumeUp() {
System.out.println("오디오 볼륨을 높인다.");
}
public void volumeDown() {
System.out.println("오디로 볼륨을 낮춘다.");
}
}
[다중 상속]
1. 다중 상속 개요
- 자바의 클래스는 다중 상속 불가능 -> 인터페이스를 이용하여 다중 상속 가능
- 다중 상속의 부작용 : 승용차와 트럭 모두를 상속받게 될 경우 중복적인 상속을 받을 우려가 있음
- 자동차 클래스를 승용차와 트럭 클래스가 상속을 받음(승용차, 트럭에는 공통된 내용이 있을 것)
-> 승용차와 트럭 두 가지 클래스를 상속 받을 경우(다중 상속) -> 중복된 내용 발생 -> 자바에서 다중 상속 허용X
- 문법
interface Volume{ 문장 }
interface Tuner{ 문장 }
class Audio implements Volume, Tuner{ } -> 두 개를 동시에 상속 받아서 Audio 클래스를 구현함
2. 다중 상속 활용
- 인터페이스 정의
interface Volume { -> 인터페이스 1
void printVolume();
}
interface Tuner { -> 인터페이스 2
void printTuner(); -> 메서드 명칭만 부여 : 실제 내용은 인터페이스를 구현하는 곳에서 작성!
}
- 클래스에서 2개의 인터페이스 구현(다중 상속 효과)
class Audio V implements Volume, Tuner { -> 두가지 이상의 인터페이스 구현 -> 각 메서드를 모두 구현 해주어야 함
public void printVolume() {
System.out.println("볼륨 조절기");
{
public void printTuner() {
System.out.println("채널 선택기");
}
}
V -> 이 부분에 'extends B'라고 추가 해서 B 클래스 하나를 상속받을 수도 있음.
class Audio extends B implements Volume, Tuner { -> B 클래스 상속 받고 Volume, Tuner 인터페이스를 모두 구현
public void printVolume() {
System.out.println("볼륨 조절기");
{
public void printTuner() {
System.out.println("채널 선택기");
}
}
+예제 :
- 다중 상속을 활용한 인터페이스 정의 예제
interface Volume { -> Volume이라는 인터페이스 정의
void printVolume(); -> 메서드 이름만 : 내용은 작성하지 않음
}
interface Tuner {
void printTuner();
}
interface Controller extends Volume, Tuner { -> 인터페이스 2개(Volume, Tuner) 상속받아 Controller 정의
void printController(); -> printController라는 메서드 이름만 정의
}
class Audio implements Controller { -> 반드시 Controller의 메서드 구현되도록 작성
public void printVolume() { 그런데 Controller는 두가지 인터페이스를 상속 받음
System.out.println("볼륨 조절기"); 즉 3가지 메서드 모두 구현해주어야 함(Controller, Volume, Tuner의 메서드)
}
public void printTuner() {
System.out.println("채널 선택기");
}
public void printController() {
System.out.println("볼륨, 채널 통합 조정");
}
}
class TestAudio {
public static void main(String args[]) {
Audio a = new Audio();
a.printVolume(); -> 볼륨 조절기
a.printTuner(); -> 채널 선택기
a.printController(); -> 볼륨, 채널 통합 조정
}
}
[실습]
interface VolumeSystem {
void volumeUp();
void volumeDown();
}
public class Exam15_1 implements VolumeSystem {
public void volumeUp() {
System.out.println("볼륨을 높인다.");
}
public void volumeDown() {
System.out.println("볼륨을 낮춘다.");
}
public static void main(String[] args) { -> 객체 생성
Exam15_1 audio = new Exam15_1();
audio.volumeUp();
audio.volumeDown();
}
}
실행결과
볼륨을 높인다.
볼륨을 낮춘다.
'프로그래밍 > 자바(java) 융합개발자 2차' 카테고리의 다른 글
[취성패] 자바 배우기 - 선수학습(Object 클래스) (0) | 2020.12.13 |
---|---|
[취성패] 자바 배우기 - 선수학습(내부 클래스) (0) | 2020.12.13 |
[취성패] 자바 배우기 - 선수학습(추상 클래스) (0) | 2020.12.13 |
[취성패] 자바 배우기 - 선수학습(상속과 접근제어) (0) | 2020.12.13 |
[취성패] 자바 배우기 - 선수학습(static) (2) | 2020.12.12 |