JAVA_인터페이스(Interface)

JAVA_인터페이스(Interface)

인터페이스(Interface)

1. 인터페이스가 생긴이유

- 기본 클래스는 다중 상속을 지원하지 않아 문제 발생.

인터페이스를 통해 문제해결

2. 인터페이스

- 인터페이스는 상수, 추상메서드 가지고 있음.

- 인터페이스 메서드 추상메서드 형식으로 선언하면 abstract붙이지 않더라도 자동으로 컴파일 과정에서 붙게 됨.

- 클래스에서 인터페이스 구현할 때 클래스 이름 뒤에 implements키워드 사용.

- 추가적으로 static, default메서드 선언 또한 가능함.

▶ 인터페이스 기본문법

인터페이스

인터페이스를 구현하기위해 impletments한 후 인터페이스 내에있는 메소드 Overridig하지 않으면 오류발생.

오류해결방법 - 추상화, 메소드 오버라이딩 main문에서 interface사용

3. 인터페이스 기능1 - 다중상속이 가능

- 인터페이스는 다중상속 표현 가능.

- 여러 인터페이스 동시구현 가능.

- 단, 인터페이스에 있는 모든 추상 메서드 는 인터페이스 구현하는 클래스 내에 전부 오버라이딩 되어야함 .

- Inteface간에도 상속이 가능하다. Interface간 상속은 extends사용.

▶ 다중상속하는 인터페이스 예제1

인터페이스 2개 Inter1 & Inter2 2개의 interface기능 구현하는 Basic클래스

▲ 다중상속의 예 ▲

인터페이스기능 사용하는 MAIN클래스

4. 인터페이스 기능2 - 부모타입이 될 수 있고, 다형성 구현하는 원리

- 자바의 인터페이스는 객체의 사용방법을 정의한 타입(메서드 명세서)이다.

- 따라서 객체의 교환성 높여주기 때문에 다형성 구현하는 매우 중요한 역할함.

▶ 부모타입이고, 다형성을 구현하는 Interface예시

부모클래스와 인터페이스

추상클래스인 부모클래스 Animal, Fish와 Interface IPet을 상속받는

모든 클래스들은 부모클래스와 인터페이스에있는 메서드들을 재정의(Overriding)해야함.

public class MainClass{ public static void main(String[] args){ //생성자 Animal 부모타입에 저장됨. <- Animal의 기능만 실행됨. Animal dog = new Dog(); Animal cat = new Cat(); Animal tiger = new Tiger(); Animal[] ani = {dog, cat, tiger}; for(Animal a : ani){ a.eat(); } System.out.println("============================") //생성자 인터페이스 IPet타입에 저장됨 <- IPet의 기능만 실행됨. IPet dog2 = new Dog(); IPet cat2 = new Cat(); IPet fish2 = new GoldFish(); IPet[] pets = {dag2, cat2, fish2}; for(IPet p : pets){ p.play(); } } }

위 MainClass의 실행결과

5. 인터페이스 기능3 - 클래스 사용방법 정의한 규격화

- 인터페이스는 사용방법이 동일한 클래스를 만드는 기술이다.

▶ 프로그램에서 실제 사용되는 방법 예시(마이크로소프트에서 정의한 sw사용법)

사용방법을 규격화한 Printed인터페이스 하나의 인터페이스로 여러가지의 사용방법 정의하는 것 가능

위에서 LG와 Samsung클래스는 같은 인터페이스를 물려았음.

하지만 사용방법을 달리 정의하여 다른 결과값을 도출하게 함.

6. 인터페이스 정리

- 인터페이스는 상수와 추상메서드만 을 구성멤버로 가짐!

1. 인터페이스는기본적으로 다중상속 지원함.

2. 자바의 인터페이스는 객체의 사용방법을 정의한 타입이다. 이는 다형성을 구현하는 매우 중요한 역할을 함.

-->인터페이스도 데이터 타입(부모타입)이 될 수 있다.

3. 사용방법이 동일한 클래스를 만드는 기술.

- 인터페이스 구현 키워드 : Implements

- 인터페이스도 extends 키워드 사용해 인터페이스간 상속 구현가능.

from http://shinny.tistory.com/33 by ccl(A) rewrite - 2021-09-14 20:27:00