ch7-35 인터페이스(interface)
프로그래밍 관점으로 보면 인터페이스는 추상 메서드의 집합이다. 외우자. static 메서드, 상수, default 메서드도 인터페이스에 포함되지만 부수적인 것이다. 추상 메서드이기 때문에 구현된 것이 전혀 없다. 상속받아 구현해야하므로 public이어야 한다.
한 객체에서 다른 객체의 변수에 접근할 때 메서드를 통해 접근하는 것을 캡슐화라 한다. iv 변수인 data를 메서드가 감싸고 있다. 따라서 메서드를 통해 접근해야한다. t.hour가 아니라 t.getHour()로 접근해야 한다.
인터페이스는 메서드의 껍데기라 할 수 있고, 제일 바깥에 노출되어 있으므로 제어자 public을 사용해야한다.
추상 클래스와 인터페이스의 차이가 무엇일까? 추상 클래스는 일반 클래스로 추상 메서드 말고도 다른 것을 가질 수 있지만 인터페이스는 오로지 추상 메서드만 갖고 있다.
인터페이스에는 class가 붙지 않으며 상수(final), 추상메서드가 들어갈 수 있다. 변수는 가질 수 없다. 인터페이스의 모든 멤버는 퍼블릭이고 메서드는 추상 메서드이다.
인터페이스의 모든 메서드는 public abstract가 붙으므로 생략할 수 있다. 상수도 항상 public static final 이므로 생략할 수 있다. 컴파일 할 때 자동으로 붙여준다.
ch7-36 인터페이스의 상속
인터페이스는 class와 달리 Obejct가 최고 조상이 아니다. 인터페이스의 조상은 인터페이스만 가능하다.
인터페이스는 다중 상속이 가능하다. 다중 상속을 못하는 이유는 상속받은 조상에 같은 이름의 메서드가 있을경우 구현부가 달라 충돌할 수 있다. 하지만 추상 메서드는 선언부가 같은 메서드가 있어도 구현부가 없어 충돌할 일 이 없다. 인터페이스 Fightable은 Movable, Attackable 2개를 상속받아 멤버가 2개이다.
ch7-37 인터페이스의 구현
인터페이스는 추상 메서드의 집합으로 구현부가 없다. 따라서 추상 클래스처럼 상속받아 완성해야 한다. 상속에 해당하는 용어를 인터페이스에서는 구현(완성)이라 한다.
Fightable이 구현해야 하는 메서드는 2개인데 1개만 구현하면 클래스 앞에 제어자 abstract를 붙여야 한다. 안보이지만 public abstract void attack 메서드가 있다. 여기서 왜 abstract가 아니라 제어자 public abstract개 붙을까?
인터페이스 메서드의 제어자는 abstract가 아니라 public abstract이다.
'인터페이스 = 추상 메서드의 집합'으로 외우자. 상수, static 메서드, default 메서드는 JDK 1.8에서 추가되었다.
추상 클래스는 일반 클래스처럼 iv, 생성자, 인스턴스 메서드를 가질 수 있고 차이점은 추상 메서드를 갖고 있어 클래스 앞에 제어자 abstract가 붙어있다. 하지만 인터페이스는 추상 메서드외에는 가질 수 없다. JDK 1.8에서 추가된 상수, static 메서드, default 메서드는 가질 수 있긴 하지만 본질은 추상 메서드의 집합임을 잊지 말자.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-38 인터페이스와 다형성 (0) | 2023.05.04 |
---|---|
ch7-33,34 추상 클래스의 작성2 (0) | 2023.04.22 |
ch7-33,34 추상클래스의작성1 (0) | 2023.04.22 |
ch7-31,32 추상 클래스, 추상 메서드 (0) | 2023.04.22 |
ch7-29,30 여러 종류의 객체를 배열로 다루기 (0) | 2023.04.21 |