> 인터페이스 interface
클래스가 아니므로 일반 변수, 일반 메소드 (X) 상수, 추상 메소드 (O)
- 변수는 public static final 생략하여도 컴파일 시 자동으로 붙음 → 상수
- 메소드는 추상메소드 형식으로 선언하면 abstract 생략하여도 컴파일 시 자동으로 붙음 → 추상 메소드
- 추가로 static 메소드 선언 가능 (자바 1.8 이후)
인터페이스 선언 시: class 대신 interface 인터페이스명
클래스에서 인터페이스 구현 시: 클래스명 implements 인터페이스명
- 인터페이스의 추상메소드는 반드시 클래스에서 오버라이딩 되어야 함
- 다중 상속 시: 클래스명 implements 인터페이스명, 인터페이스명, ...
인터페이스 → 인터페이스 상속 시: 인터페이스명 extends 인터페이스명, 인터페이스명, ...
//예시
packager interface_;
public interface Example { //class 대신 interface
int A = 11; //자동으로 public static final - 상수
void method1(); //자동으로 public abstract (실행내용 없음, 오버라이딩 필수) - 추상메소드
}
//인터페이스 Shape
public interface Shape {
public abstract double getArea(); //추상메소드
}
//클래스 Rectangle
public class Rectangle implements Shape { //클래스 Rectangle에 인터페이스 Shape 구현 - implements
int width;
int height;
public Rectangle(int width, int height) { //생성자 - 멤버변수 초기화
this.width = width;
this.height = height;
}
public double getArea() { //추상메소드 오버라이딩
return width*height;
}
}
//main 클래스
public class MainClass {
public static void main(String[] args) {
Rectangle abcd = new Rectangle(10, 20); //객체생성
System.out.println(abcd.getArea());
}
}
//200.0
//첫번째 인터페이스
public interface IToDo1 {
void m1(); //추상메소드
}
//두번째 인터페이스
public interface IToDo2 {
void m2();
}
//세번째 인터페이스 - 첫번째, 두번째 인터페이스를 상속받음
public interface IToDo3 extends IToDo1, IToDo2 {
void m3();
}
//네번째 인터페이스
public interface IToDo4 {
void m4();
}
//클래스 - 인터페이스1,2를 상속받은 인터페이스3과 인터페이스4를 상속받음
public class ToDo implements IToDo3, IToDo4 {
//모든 추상메소드는 반드시 오버라이딩 되어야 함
//인터페이스에서 인터페이스로 상속됐어도 메소드의 오버라이딩은 클래스에서 이루어짐
public void m1() {
System.out.println("m1 구현");
}
public void m2() {
System.out.println("m2 구현");
}
public void m3() {
System.out.println("m3 구현");
}
public void m4() {
System.out.println("m4 구현");
}
}
* 인터페이스의 역할
만약 위에서 Cat에게 Cute의 기능을 추가하고싶다면? 클래스는 다중 상속을 지원하지 않음
→ Cute를 interface로 정의하면 그 기능을 구현(상속)할 수 있음 (interface Cute)
다중상속 (class Cat extends Animal implements Cute, Pet)
* 메소드 명세서
인터페이스는 객체의 사용방법을 정의한 타입(메소드 명세서)으로 객체의 교환성을 높여줌 - 다형성을 구현하는 중요한 역할을 함
▶ Cat 클래스는 다음 3가지 형태가 될 수 있음
Animal a = new Cat();
Cute c = new Cat(); ← 인터페이스도 데이터 타입(부모 타입)이 될 수 있음
Cat cc = new Cat();
▶ Cute 인터페이스를 부모타입으로 비슷한 기능을 묶어서 사용할 수 있음
Cute c1 = new Snake();
Cute c2 = new Cat();
Cute c3 = new Daisy();
※ 부모클래스의 변화
일반 클래스 → 추상 클래스(오버라이딩 강제) → 인터페이스 (오버라이딩 강제 + 다중 상속)
사용방법이 동일한 클래스를 만드는 기술
'course 2021 > JAVA' 카테고리의 다른 글
day18 - API(1) java.lang, java.util (0) | 2021.09.15 |
---|---|
day17 - exception (0) | 2021.09.11 |
day15 - final, abstract (0) | 2021.09.08 |
day14 - static (0) | 2021.09.07 |
day13 - polymorphism (0) | 2021.09.05 |