🔷 서로 다른 장치들을 연결시켜 주는 규격
class
대신 interface
키워드 사용)상수
이다.추상 메서드
(JDK8부터 default method
, static method
추가)public interface interName {
public static final int NUMBER1 = 100;
/* (생략가능) */ int NUMBER2 = 100;
public abstract void method1(String str);
/* (생략가능) */ void method2(int number);
}
🌟 상수에 붙는
public static final
과 메서드에 붙는public abstract
는 필수적이지만 작성 시 생략은 가능하다.
extends
대신 implements
키워드를 사용하여 구현 클래스 작성class Circle implements Shape {}
오버라이딩
해야 한다.❗ 구현하지 않을 경우
abstract
클래스로 표시해야한다.
extends
를 이용하여 상속이 가능하며 다중 상속이 가능 interface Chef extends Movable, Cookable {
// ...
}
JFoodChef j = new JFoodChef();
Chef ch = new JFoodChef(); // 다형성 적용
🌟
extends
와implements
동시 사용이 가능하다.
default method
default
라는 키워드를 작성 해야함.public
접근제한자를 사용해야 하며 생략 가능.interface Chef extends movable, Cookable {
public default void info() {//...};
}
❗ 그래서 무조건 오버라이딩을 해야한다.
static method
interface Chef extends movable, Cookable {
public static void info() {//...};
}
// Test
Chef.info();
클래스 | 인터페이스 | |
---|---|---|
특징 | class 키워드를 사용하여 정의, 필드와 메서드, 생성자로 이루어짐 | interface 키워드를 사용하여 정의, 상수와 추상메소드로 이루어짐. |
관계 | 인터페이스를 구현함 | 클래스에 의해 구현됨 |
멤버 변수 | 선언 가능 | 상수만 가능 |
다중 상속 | 클래스는 하나의 클래스만 상속 가능 | 인터페이스는 여러 개의 인터페이스 상속 가능 |
다중 구현 | 클래스는 여러 개의 인터페이스를 다중으로 구현 가능 | |
인스턴스 | 생성 가능 | 생성 불가 |
타입 | 타입으로 사용 가능 | 타입으로 사용 가능 |
추상클래스 | 인터페이스 | |
---|---|---|
객체 생성 | 불가 | 불가 |
일반 메소드 | 가능 | 불가 |
일반 필드 | 가능 | 불가(상수만 가능) |
메서드 | abstract를 붙여야만 추상 메소드 | 모든 메서드는 추상 메서드 |
사용 | 추상적인 클래스의 성격을 가질 때, 서로 유사한 클래스 사이에 코드를 공유하고 싶을 때 | 서로 관련 없는 클래스 사이에 공통으로 적용되는 인터페이스를 구현하기를 원할 때, 객체의 성격이라기보다 어떤 기능을 구현하고 있다는 약속의 성격이 있을 때 |
공통점 | 특정 기능의 구현을 강제하고 싶을 때 |
🔷 다양한 종류의 객체들을 다루는 메서드나 컬렉션 클래스에서 컴파일 시 타입을 체크해주는 기능
제네릭 클래스
T
와 같이 타입 매개변수를 이용하는 클래스🌟 타입 파라미터
특별한 의미의 알파벳 보다는 단순히 임의의 참조형 타입을 말한다.
class Box<T> {
// ...
}
class Box<Red> {
// ...
}
제네릭 클래스
객체 생성Box<Student> box = new Box<Student>();
Box<Student>box = new Box<>();
🌟 자동으로 T는 Object가 됨.
class Box<T> {
private T t;
public T getT() {
return t;
}
public void setT (T t) {
this.t = t;
}
}
public class BoxTest {
public static void main(String[] args) {
Box<String> box = new Box<>();
box.setT("HELLLO");
}
}
extends
키워드를 사용할 수 있음.extends
키워드 사용&
로 연결 class Box<T extends Person> { // person의 자손만 타입 지정 가능
private T t;
public T getT() {
return t;
}
public void setT (T t) {
this.t = t;
}
}
와일드 카드
이용표현 | 설명 |
---|---|
Generic type<?> | 타입에 제한이 없음 |
Generic type<? extends T> | T와 T를 상속받은 타입들만 사용 가능 |
Generic type<? super T> | T와 T의 조상 타입만 사용 가능 |