자바 객체지향 프로그래밍 추상화에서 가장 핵심적인 역할을 담당하는 것이 추상클래스와 인터페이스이다.
interface는 "-간/사이"를 뜻하는 inter와 "얼굴/면"을 의미하는 face의 결합으로 구성된 단어로 두 개의 다른 대상 사이를 연결한다는 뜻을 가지고 있다.
컴퓨터 프로그래밍에에서 사용하는 인터페이스도 "서로 다른 두 시스템, 장치, sw를 이어주는 접속장치" 라고 이해하면 된다. 대표적인 예로는 인터페이스의 GUI가 있다.
공통적으로는 자바에서 추상화를 구현한다는 것이고 차이점으로는 인터페이스가 추상클래스보다 더 높은 추상성을 가지고 있다는 점에서 차이가 있다.
추상클래서 : 미완성 설계도
인터페이스 : 기초적인 밑그림
추상클래스는 메서드바디가 없는 추상메서드를 하나 이상 가지고 있다는 점 외엔 일반 클래스와 같다.
반면 인터페이스는 기본적으로 추상메서드와 상수만을 멤버로 가질 수 있다는 점에서 추상화정도가 더 높다고 할 수 있다. 즉, 인터페이스는 추상메서드의 집합으로 이뤄져 있다고 볼 수 있다.
인터페이스는 클래스를 작성하는 방법과 유사하지만 class키워드 대신 interface키워드를 사용하면 된다.
public interface InterfaceEx {} // 인터페이스
인터페이스는 내부의 모든 필드가 public static final로 정의된다.
public static final int rock = 1; // 인터페이스 인스턴스 변수 정의
모든 인터페이스의 필드와 메서드에는 위의 요소가 내포되어있기 때문에 명시하지 않아도 전부 생략이 가능하다. 자바 컴파일러가 자동으로 추가해주기 때문이다.
final int scissors = 2; // public static 생략 static int paper = 3; // public & final 생략 인터페이스는 추상메서드만 존재한다. public abstract String getPlayingNum(); void call() //public abstract 생략
추상클래스와 마찬가지로 인터페이스 그 자체로 인스턴스를 생성할 수 없고 메서드 바디를 정의하는 클래스를 따로 작성해주어야 한다.
// 추상클래스의 상속 class 자식클래스명 extends 부모클래스명{} // 인터페이스의 구현 class 클래스명 implements 인터페이스명{}
⭐️ 클래스가 어떤 인터페이스를 구현한다는 것?
: 인터페이스 내의 모든 추상메서드들을 해당 클래스내에서 오버라이딩하여 바디를 완성한다는 뜻이다. ⭐️
인터페이스는 자신을 구현하는 클래스에게 자신이 갖고있는 모든 추상메서드들을 반드시 구현하도록 강제한다.
interface Carable{ // 인터페이스 생성 (public static final)String name=" "; // 인터페이스 필드선언. // 변수타입 앞 ()는 생략해도 됨. // 인터페이스 추상메서드 선언 (public static void) talk(); } class Car implements Carable{ //인터페이스 구현 void talk(){ System.out.println("말하기"); } }
상속관계에서는 sub클래스는 하나의 상위 클래스만 상속받을 수 있었지만 인터페이스는 다중적 구현이 가능하다.
class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3 { ... 생략 ... }