본문 바로가기
👩‍💻 BackEnd/☕️ 자바 [Java]

[Java] 자바의 정석 : 인터페이스

by minhe2810 2024. 2. 26.

인터페이스 

- 결론 : 추상 메서드의 집합 (프로그래밍 관점) 

- 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public) 

 

 추상 클래스 

  • 메서드가 전부 추상메서드이다. 모든 메서드는 public abstract 이어야 하면 이를 생략할 수 있다. 
    • (단 static 메서드와 디폴트 메서드는 예외 - JDK 1.8 부터)  
  • 모든 멤버변수는 public abstract final 이어야 하며, 이를 생략할 수 있다. (컴파일 시 자동으로 붙음)  

 

- 추상 클래스와 인터페이스의 차이 : 👨🏻‍🏫 (면접 질문으로 많이 나옴!)  

  • 추상 클래스 : 일반 클래스인데 추상 메서드를 갖고 있는 클래스 (생성자 O, iv O) -> 일부 미완성 
  • 인터 페이스 : 추상 메서드만 갖고 있고, 그 외에는 다른 것들을 가질 수 없음. -> 구현된 것이 아무것도 없음
interface 인터페이스이름{
	public static final 타입 상수이름 = 값; 
	public abstract 메서드이름(매개변수목록); 
}

 

 

 

인터페이스의 상속 

  • 인터페이스의 조상은 인터페이스만 가능 * 인터페이스는 Object 가 최고 조상아 아님. 
  • 다중 상속 가능 (추상 메서드는 충돌해도 문제가 없기 때문, 왜냐하면 구현부가 없고 선언부만 있기 때문) 

 

인터페이스의 구현

  • 인터페이스에 정의된 추상메서드를 완성하는 것 
  • 인터페이스에 정의된 추상 메서드를 모두 구현해야한다. 
  • implements 를 통해 클래스 구현 완성
  • 추상클래스 완성과 동일한 방식 
  • 일부만 구현하는 경우 추상 클래스와 동일하게 클래스 앞에 abstract 를 붙여야 함. 

 

[ 👨🏻‍🏫정리 ]

인터페이스란? 

  • 추상 메서드의 집합 

인터페이스의 구현이란? 

  • 추상 메서드의 구현부 만들기

추상클래스와 인터페이스의 공통점

  • 추상 메서드를 가지고 있다. 

추상 클래스와 인터페이스의 차이점

  • 인터페이스는 iv (지역변수) 를 가질 수 없다. 
  • 추상클래스는 iv를 가질 수 있다. 

 

 


김영한의 실전 자바 

인터페이스 

- 인터페이스의 모든 메서드는 모두 public abstract 가 들어감. 

- 다중 구현(다중 상속)을 지원함.

 

인터페이스와 멤버 변수

인터페이스의 멤버 변수는 public, static, final 이 모두 포함되었다고 간주된다. 

 

- UML에서는 인터페이스의 구현(상속) 관계는 점선으로 표시

- 상속 받을 게 없다. 인터페이스에 정의되어있는 메서드를 모두 구현해야하기 때문! 

- 메모리 구조, 실행 순서는 모두 동일

 

인터페이스를 사용해야하는 이유 

1. 제약 : 인터페이스를 구현하는 곳에서 인터페이스의 메서드를 반드시 구현해야한다는 제약을 주는 것임. 추가된 기능을 자식 클래스에서 구현하지 않을 수도 있고, 또 더는 순수 추상클래스가 아니게 된다. 

2. 다중구현 : 자바에서 클래스 상속은 부모를 하나만 지정할 수 있지만 인터페이스는 다중 구현(상속)이 가능하다. 

 

인터페이스 : 구현체에서 메서드를 구현하지 않으면 안됨. 

추상 클래스 : abstract 메서드가 아닌 메서드도 존재할 수 있으면 상속받은 클래스가 해당 메서드를 override하지 않아도 문제가 없다. 

 

참고 

자바 8에 등장한 default 메서드를 사용하면 인터페이스도 메서드를 구현할 수 있다. 하지만 아주 특별한 케이스에서만 사용해야한다. 

자바 9에 등장한 private 메서드도 마찬가지.