인터페이스

01_49g_63m·2024년 3월 28일
post-thumbnail

인터페이스

서로 다른 동작의 클래스도 공통 기능을 만들어서 상속 구조로 사용 가능

예시 ) 리모콘 (공통 기능) ← 라디오(클래스 1) , TV (클래스 2)

= 구현 메서드만 가지고 있음

= 다형성 100% 보장

추상 클래스가 있는데 왜 인터페이스를 쓸까?

추상 클래스는 재정의를 하게 만들어서 다형성을 보장할 수는 있지만

추상 클래스 말고도, 구현 클래스도 가질 수 있기 때문에 하위 클래스가 오동작 할 수 있음

추상 클래스의 구현 메서드를 살펴보자.

public void internet() {

System.out.println("인터넷이 된다.");

}

(단, tv에만 인터넷 기능이 있다고 하자.)

리모콘이랑 추상 클래스의 구현 메서드인 internet() 라는 메서드가 있다고 치면,
사실 tv 클래스는 오동작 하지 않지만 라디오 클래스는 재정의를 하지 않는 이상
오동작 하기 때문에 구현 메서드를 사용하면 안된다.

따라서

구현 메서드 없이 ! 추상 메서드로만 이루어진 클래스를 만드려고 하는데

그것을 인터페이스 라고 한다.

인터페이스의 특징

  • 100% 추상 메서드로 이루어져 있기 때문에 상속 받은 하위 클래스들은 인터페이스가 가지고 있는 모든 추상 메서드를 재정의를 해야한다.
  • 다형성이 100% 보장된다.
  • 부모가 인터페이스면, 자식의 내부 동작 방식을 전혀 몰라도 동작 시킬 수 있다.
  • 인터페이스 스스로 new를 통해서 객체 생성 불가하다.
  • 부모의 역할을 할 수 있다.
  • 추상 메서드 + final static 상수
  • 다중 상속을 지원한다.

final static 상수?

한번 세팅 된 값은 절대 수정할 수 없게 하기 위해 final을 쓰고,
객체를 생성 없이 접근할 수 있도록 static을 쓴다.

다중 상속?

마치 Dog 입장에선 부모가 3명인 것처럼 보인다.

자바는 단일 상속만 지원하지만, 인터페이스는 여러 개를 구현해도 상관이 없기 때문에
마치 다중 상속처럼 사용할 수 있도록 지원하는 것이다. (= 선택적 상속 가능)

결론

서로 다른 클래스를 묶어서 사용할 때는 인터페이스로 묶어서 사용하는 것이 바람직 하다.

→ 추상 메서드 + final static 변수(상수)

서로 비슷한 클래스를 묶어서 사용할 때는 추상 클래스로 묶어서 사용하는 것이 바람직 하다.

→ 추상 메서드 + 구현 메서드

문제를 풀어보자

인터페이스에 대한 설명으로 옳지 않은 것은?

1번) 객체 간 상호작용에 초점을 두어 모든 인스턴스 메서드들은 기본적으로 암시적으로
public abstract 이다. (default 키워드는 예외)

2번) 필드를 갖지 않으며, 모든 필드처럼 보이는 것은 사실은 필드가 아니라 암시적으로
static final로서 상수다.

3번) 클래스는 다중상속이 불가능하지만 인터페이스는 다중상속이 가능하다.

4번) 인터페이스가 인터페이스를 상속받을 때는 implements 키워드를 사용한다.

 답: 4번
인터페이스가 인터페이스를 상속받을 때는 extends 키워드를 사용한다. 
profile
CODING, AND MANY MORE

0개의 댓글