⚡ 인터페이스

sonjh919·2023년 10월 18일
0

Java

목록 보기
25/28
post-thumbnail

📌 인터페이스?

UBS 인터페이스, SATA 인터페이스 등으로 많이 사용하는 용어이다. 이때 인터페이스는 서로 다른 하드웨어 장치들이 데이터를 주고받을 수 있는 규격이다. 이러한 규격을 정해놓으면 장치들을 규격화하여 누가 만들건 문제없이 결합할 수 있게 된다. 소프트웨어에도 이 개념을 적용할 수 있다. 소프트웨어를 규격화된 모듈로 만들고, 서로 인터페이스가 맞는 모듈을 조립하듯이 프로그램을 작성할 수 있다.

🌈 Java의 인터페이스

  • 자바의 인터페이스는 interface 키워드를 사용하여 클래스를 선언하듯이 선언한다.
  • public interface로, public 생략 가능
interface PhoneInterface{
	public static final int BUTTONS = 20;
    abstract public void sendCall(); // 인터페이스의 멤버는 누구나 접근 가능하도록 모두 public이다.
}

🌈 인터페이스의 특징

  1. 멤버는 추상 메소드와 상수만으로 구성된다.
  2. 모든 메소드는 abstract public이며 생략 가능하다
  3. 상수는 public static final 타입이며 생략 가능하다
  4. 인터페이스는 객체를 생성할 수 없다.
  5. 다른 인터페이스에 상속될 수 있다.
  6. 인터페이스 타입의레퍼런스 변수는 선언 가능하다.

🌈 인터페이스 상속

  • 인터페이스의 상속은 다중 상속을 허용한다.
interface Music extends Mobile, MP3{
	void playMP3RingTone(); // 새로운 추상 메소드 추가
}

🌈 인터페이스 구현

  • 구현이라 함은 인터페이스의 추상 메소드를 모두 구현한 클래스를 작성하는 것
  • implements 키워드와 함께 클래스를 작성한다.
  • 다중 구현이 가능하며, 각 인터페이스에 선언된 모든 추상 메소드를 구현하여야 한다.
  • 클래스 상속과 인터페이스 구현이 동시에 가능하다.
class SamsungPhone implements MobliePhoneInterface, AIInterface{ // 다중 인터페이스 구현
	// MobliePhoneInterface의 모든 메소드를 구현한다.
    // 추상 메소드를 하나라도 빠트리면 컴파일 오류 발생!
    public void sendCall(){...}
    public void receiveCall(){...}
    
    // 추가적으로 다른 메소드를 작성할 수도 있다.
    public int getButtons(){...}

🌈 인터페이스의 목적

  • 자바의 인터페이스는 클래스에게 구현할 메소드들의 원형을 모두 알려주어, 클래스가 자신의 목적에 맞게 메소드를 구현하도록 하는 것
  • 인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언
  • 인터페이스로 인한 클래스의 다형성 실현

📌 인터페이스 vs 추상 클래스

  • 둘의 공통점은 객체 생성 불가, 상속을 위한 부모 클래스로만 사용, 다형성 실현의 목적이 있다. 차이점은 다음과 같다.

🌈 인터페이스

  • 다른 부모 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.
  • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용한다.
  • 다중 상속이 가능하다.

🌈 추상 클래스

  • 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것
  • 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야할 경우 사용

0개의 댓글