728x90
인터페이스(interface)
: 호환성을 나타내는 정해진 규격
- 클래스가 구현해야 할 메소드들이 선언되는 추상형
- interface 키워드로 선언
인터페이스의 목적
- 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언
- 클래스의 다형성을 실현하는 도구
인터페이스 구성 요소
- 상수public 만 허용
- 추상 메소드public abstract 생략 가능
- default 메소드
- public 만 허용
- 인터페이스에 코드가 작성된 메소드
- 인터페이스를 구현하는 클래스에 자동 상속
- private 메소드
- 인터페이스에 코드가 작성된 메소드
- 인터페이스 내에 있는 다른 메소드에 의해서만 호출 가능
- static 메소드
- public, privat 모두 지정 가능, 생략 시 public
인터페이스의 특성
- 인터페이스의 객체 생성 불가
- 인터페이스 타입의 레퍼런스 변수 선언 가능
- 인터페이스의 구현
- 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드를 반드시 구현
- 다른 인터페이스 상속 가능
interface MobilePhoneInterface extends PhoneInterface {
void sendSMS();
void receiveSMS();
// 새로운 추상 메소드 추가
}
- 인터페이스의 다중 상속 가능
interface MP3Interface {
void play();
void stop(); // 추상 메소드
}
interface MusicPhoneInterface extends MobilePhoneInterface, MP3Interface {
void playMP3RingTone(); // 새로운 추상 메소드 추가
}
인터페이스 구현
- implements: 인터페이스의 추상 메소드를 모두 구현한 클래스
- 여러 개의 인터페이스를 한 클래스에 동시 구현 가능
Ex1
interface PhoneInterface {
final int TIMEOUT = 10000;
void sendCall(); //추상 메소드
void receiveCall(); //추상 메소드
default void printLogo() { //default 메소드
System.out.println("**Phone**");
}
}
class SamsungPhone implements PhoneInterface {
@Override
public void sendCall() {
System.out.println("전화 발신");
}
@Override
public void receiveCall() {
System.out.println("전화 수신");
}
//추가 메소드
public void vibration() {
System.out.println("진동 ON");
}
}
public class InterfaceEx {
public static void main(String[] args){
SamsungPhone phone = new SamsungPhone();
phone.printLogo();
phone.sendCall();
phone.receiveCall();
phone.vibration();
}
}
💡 @Override 의 의미
: 어노테이션(annotation)
- 어노테이션은 클래스, 인터페이스, 메소드, 메소드 파라미터, 필드, 지역변수 위에 위치
- 주석처럼 쓰이는 데, 파라미터도 넘길 수 있음
- 어노테이션 사용 시, 컴파일 과정에서 오류 발견 가능
추상 클래스 VS 인터페이스
유사점
- 객체 생성 ❌
- 상속을 위한 슈퍼 클래스로만 사용
- 클래스의 다형성 실현 목적
차이점
Ex2
interface PhoneInterface {
final int TIMEOUT = 10000;
void sendCall();
void receiveCall();
default void printLogo() {
System.out.println("**Phone**");
}
}
interface MobilePhoneInterface extends PhoneInterface {
void sendSMS();
void receiveSMS();
}
interface MP3Interface {
public void play();
public void stop();
}
class PDA {
public int calculate(int x, int y) {
return x + y;
}
}
class SmartPhone extends PDA implements MobilePhoneInterface, MP3Interface{
@Override
public void sendCall() {
System.out.println("전화 발신 알림");
}
@Override
public void receiveCall() {
System.out.println("전화 수신 알림");
}
@Override
public void sendSMS() {
System.out.println("문자 발신 알림");
}
@Override
public void receiveSMS() {
System.out.println("문자 수신 알림");
}
@Override
public void play() {
System.out.println("음악 재생 알림");
}
@Override
public void stop() {
System.out.println("음악 중단 알림");
}
public void schedule() {
System.out.println("일정 관리 알림");
}
}
public class InterfaceEx{
public static void main(String[] args) {
SmartPhone phone = new SmartPhone();
phone.printLogo();
phone.sendCall();
phone.play();
System.out.println("3+5 = " + phone.calculate(3, 5));
phone.schedule();
}
}
아래 노션 페이지에 자바 공부 내용에 대해 업로드 합니다!
수정사항이나 질문사항의 경우 노션 댓글로 남겨주세요!(*•̀ᴗ•́*)و ̑̑
개발 환경
작성 플랫폼
728x90
'🧑💻 Language > Java' 카테고리의 다른 글
[Java] 12. 모듈화와 패키지 응용 (2) | 2021.06.01 |
---|---|
[Java] 11. 모듈과 패키지 (2) | 2021.05.26 |
[Java] 9. 추상 메소드와 추상 클래스 (0) | 2021.05.16 |
[Java] 8. 메소드 오버라이딩 (0) | 2021.05.16 |
[Java] 7. 상속 (0) | 2021.05.08 |