[JAVA] 인터페이스(interface)

2023. 4. 11. 19:18·Programming Language/Java
목차
  1. 상수 필드 선언
  2. 추상 메소드 선언
  3. 구현 클래스
  4. 구현 객체
  5. 다중 인터페이스 구현 클래스

인터페이스

객체의 사용 방법을 정의한 타입

  • 개발 코드와 객체가 서로 통신하는 접점 역할
  • 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 메소드를 호출시킴 → 개발코드가 객체 매부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됨
  • 인터페이스를 왜 사용하는가? → 개발 코드를 수정하지 않고 사용 객체 변경 → 리턴값 다양화

 

 

 

인터페이스 선언

  • 물리적 형태는 클래스와 동일
  • [public] interface 인터페이스이름 { … }
  • 첫 글자는 대문자로 하고 나머지는 소문자로 작성하는 것이 관례
  • 상수필드와 추상 메소드만을 구성 멤버로 가짐
  • 객체를 생성할 수 없기 때문에 생성자를 가질 수 없음
interface 인터페이스이름 {
    //상수
    타입 상수이름 = 값;
    //추상 메소드
    타입 메소드이름 ( 매개변수, ... );
}

상수 필드 선언

  • 인터페이스는 데이터를 저장할 수 있는 인스턴스 또는 정적 필드를 선언할 수 없음
  • 그러나 상수 필드 ( constant field ) 는 선언 가능
  • 상수는 인터페이스에 고정된 값으로 실행 시에 데이터를 바꿀 수 없음
  • [public static final] 타입 상수이름 = 값; [] → 생략 가능
  • 상수 이름은 대문자로 작성하고 언더바로 연결하는것이 관례

추상 메소드 선언

  • 인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행
  • 인터페이스의 메소드는 실행 블록이 필요 없는 추상 메소드로 선언
  • 추상 메소드 → 리턴 타입, 메소드 이름, 매개 변수만 기술되고 중괄호 {} 가 없는 메소드
  • public abstract 의 특성을 갖기 때문에 public abstract 를 생략하더라도 컴파일 과정에서 붙음
public interface RemoteControl {

    //상수
    public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;

    //추상 메소드
    public void turnOn();
    public void turnOff();
    public void setVolume();
}

인터페이스 구현

  • 객체는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 함 → 구현 객체
  • 구현 객체를 생성하는 클래스 → 구현 클래스
  • 인터페이스의 모든 메소드는 기본적으로 public 이기 때문에 더 낮은 접근 제한을 사용할 수 없음

구현 클래스

public class 구현클래스이름 implements 인터페이스이름 {
    //인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
public class Television implements RemoteControl{

    //필드
    private int volume;

    //실체 메소드
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }

    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }

    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("현재 TV 볼륨 : " + this.volume);
    }
}
public class Audio implements RemoteControl{

    //필드
    private int volume;

    //실체 메소드
    public void turnOn() {
        System.out.println("Audio를 켭니다.");
    }

    public void turnOff() {
        System.out.println("Audio를 끕니다.");
    }

    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("현재 Audio 볼륨 : " + this.volume);
    }
}

구현 객체

인터페이스 변수 = 구현객체;
인터페이스 변수;
변수 = 구현객체;
public class RemoteControlExample {

    public static void main(String[] args) {
        RemoteControl rc;
        rc = new Television();
        rc = new Audio();
    }

}

다중 인터페이스 구현 클래스

  • 객체는 다수의 인터페이스 타입으로 사용할 수 있다
public class 구현클래스이름 implements 인터페이스, 인터페이스 {
    //인터페이스에 선언된 추상 메소드의 실체 메소드 선언
    //인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
public interface Searchable {
    void search(String url);
}
public class SmartTelevision implements RemoteControl, Searchable{
    private int volume;

    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }

    public void turnOff() {
        System.out.println("TV를 끕니다.");
    }

    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("현재 TV 볼륨 : " + this.volume);
    }

    public void search(String url) {
        System.out.println(url + " 을 검색합니다");
    }
}
public class SmartTelevisionExample {

    public static void main(String[] args) {
        SmartTelevision tv = new SmartTelevision();

        RemoteControl rc = tv;
        Searchable searchable = tv;
    }

}

인터페이스 사용

  • 클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있음

'Programming Language > Java' 카테고리의 다른 글

[Java] 자바에서 GitHub REST API 사용하기  (0) 2023.08.21
[Java] Github API 사용하기  (0) 2023.08.20
[JAVA] 소켓 프로그래밍, TCP 소켓 프로그래밍  (0) 2023.07.19
[JAVA] 네트워킹 이해하기 & InetAddress  (0) 2023.07.18
[JAVA] 패키지와 접근제어자  (0) 2023.04.13
  1. 상수 필드 선언
  2. 추상 메소드 선언
  3. 구현 클래스
  4. 구현 객체
  5. 다중 인터페이스 구현 클래스
'Programming Language/Java' 카테고리의 다른 글
  • [Java] Github API 사용하기
  • [JAVA] 소켓 프로그래밍, TCP 소켓 프로그래밍
  • [JAVA] 네트워킹 이해하기 & InetAddress
  • [JAVA] 패키지와 접근제어자
hurlud
hurlud
나와 같은 궁금증을 가진 사람들을 위해 오늘도! 🐥
  • hurlud
    주독야독
    hurlud
  • 전체
    오늘
    어제
  • 최근 글

    • ALL (106)
      • CS (13)
      • Linux (2)
      • Deploy (7)
        • AWS (6)
        • Docker (1)
      • IDE (13)
        • IntelliJ (5)
        • Android Studio (8)
      • DB (10)
        • MySQL (6)
        • MongoDB (4)
      • Programming Language (0)
        • JavaScript (10)
        • Java (8)
        • Python (2)
      • Framework (32)
        • Node.js (6)
        • SpringBoot (17)
        • React (6)
        • NestJS (2)
      • Git | Github (4)
      • ETC (5)
  • 링크

    • 깃허브
  • hELLO· Designed By정상우.v4.10.0
hurlud
[JAVA] 인터페이스(interface)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.