티스토리 뷰

TIL/JAVA

객체지향(OOP)인터페이스

YEIKKI 2023. 1. 12. 17:43

-추상메서드의 집합   (프로그래밍 관점)

-구현된 것이 전혀없는 설계도,껍데기(모든 멤버가 public)

 

  항상 public static final , public abstract이기때문에 생략가능

interface 인터페이스명{

public static final 타입 상수명=값;
public abstract 메서드명(매개변수목록);
}

추상클래스와 인터페이스의 공통점은?

-(abstract method)추상메서드를 가지고있다(미완성 설계도)

 

추상클래스와 인터페이스의 차이점은?

-인터페이스는 (iv,생성자,인스턴스메서드)를 가질 수없다.


인터페이스의 상속

-인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상 아님)

-다중 상속이 가능(추상메서드는 충돌해도 문제없음)

interface Fightable extends Movable,Attackable {]   //다중상속가능 인터페이스 Fightable 상속받아  
                                                    //사용할수있는 멤버는 2개

interface Movable {
void move(int x, int y);
}

interface Attackable {
void Attack(Unit u);
}

인터페이스의 구현

-인터페이스에 정의된 추상메서드를 완성하는것

-일부만 구현하는 경우 , 클래스 앞에 abstract를 붙여야 함.

class 클래스명 implements 인터페이스명 {
  //인터페이스에 정의된 추상메서드를 모두 구현해야한다.
}

인터페이스의 다형성

-인터페이스도 구현 클래스의 부모 가능!

-인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능 

-인터페이스를 메서드의 리턴타입으로 지정가능

class Shark extends MarineLife implements Attackable{
  public void move(int x, int y){//내용생략}
  public vod attack(Attackable a) {//내용생략}
}

MarineLife l= new Shark();
Attackable a= new Shark();

l.move(100,200);
a.attack(new Shark());

interface Attackable {

void attack(Attackable a);   // Attackable 인터페이스를 구현한 클랫의 인스턴스만 가능
}

 

class Shark extends MarineLife implements Attackable {
public void move(int x, int y){//내용생략}
public void attack(Attackable a) {//내용생략}
}
Attackable method() {
  Shark s= new Shark();
  return s;
}
   Attackable a= method();  == Attackable a= new Shark();

 


인터페이스의 장점

-두 대상(객체) 간의 '연결, 대화,소통'을 돕는 중간역할

-개발 시간을 단축

-표준화가 가능하다.(ex>JDBC)

-서로 관계없는 클래스들을 관계를 맺어줄 수 있다.

-인터페이스 덕분에 B가 변경되어도 A는 안 바꿀 수 있게 된다. (느슨한 결합)


(default) 메서드 와 static 메서드

-인터페이스에 디폴트메서드, static메서드 추가가능(JDK1.8부터)

-인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움.

 해결책=> 디폴트 메서드(default method)-> 인스턴스 메서드(인터페이스 원칙위반)  

                                                                                                                                                                                  예외

해결책

여러 인터페이스의 디폴트 메서드간의 충돌

-인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.

 

디폴트메서드와 조상클래스의 메서드간의 충돌

-조상 클래스의 메서드가 상속되고,디폴트 메서드는 무시됨.


참고문헌 :남궁성, 『자바의정석』, 도우출판

 

 

'TIL > JAVA' 카테고리의 다른 글

Collections Framework(컬렉션 프레임웍)  (0) 2023.01.16
java.lang패키지와 유용한 클래스  (0) 2023.01.15
예외처리(Exception)  (0) 2023.01.11
객체지향(OOP)추상클래스(abstract class)  (0) 2023.01.11
객체지향(OOP)제어자  (0) 2023.01.11