TIL

+ 9 자바 인터페이스란? 다형성

JAVABOZA 2023. 6. 20. 20:50

정말정말정말정말정말정말정말정말정말정말정말정말정말정말정말정말정말정말중요하다는 

자바에 있어서 객체지향에 있어서 빠질 수 없는 개념 인터페이스  다형성

 

 

인터페이스란?

클래스에서 메소드를 구현할 수 있도록 강제 할 수 있는 기능

쉽게 말하면 객체의 사용방법을 가이드라인 하는 것!

인터페이스는 추상메서드와 상수로만 이뤄져있다. 그래서 인터페이스로는 인스턴스 사용이 불가!!!

+ 자바 8부터는 디폴트메서드와 static메서드도 사용가능

 

인터페이스의 특징

 

★ 인터페이스는 interface 키워드를 사용해서 정의한다.

★ 인터페이스는 상수와 추상메서드로만 구성되어 있다.

자바 8부터는 디폴트메서드와 static메서드도 사용가능

★ 인터페이스 안에 있는 상수는 모두 public static final 타입이다 (생략가능)

★ 인터페이스 안에 있는 추상메서드는 abstract public 타입이다 (생략가능)

인터페이스는 추상클래스 와 같이 인스턴스 생성 불가 (생성자 사용 불가)

★ 인터페이스는 메서드의 메개변수로 인터페이스 타입으로 사용 가능

★ 인터페이스는  다른 인터페이스를 상속(extends) 받을 수 있다. 다중상속 가능!!!

★ 인터페이스는 implements  키워드를 사용한다. 사용 후 해당 클래스는 추상메서드를 오버라이드해서 완성해야함

★ default 메서드는 이미 많은 기능들이 추상메서드들이 있어서 번거로움이 있을 때 대응책으로 인터페이스 구현부에서 활용 할 수 있음

 

인터페이스에서 제공하지만 구현 내용을 재구현하고 싶다면은 오버라이딩에서 선택적으러 가능

(새로운 추상메서드를 추가할 경우)

default메서드 예시

-------------- default메서드 (기본메서드) 사용시 주의사항! -------------- 

 

interface A {
	default void go(){
    System.out.println("go go!!");
    }
}


interface B {
	default void go(){
    System.out.println("ggo ggo!!");
    }
}

public calss C implements A,B{
	
   	@Override
    default void go(){
    System.out.println("gggggo ggggggo!!")
    
    A.super.print();
    B.super.print();
    }
}

 

위의 예시 코드 같이 A인터페이스와 B인터페이스에는 똑같은 go() default메서드가 정의 되어 있다.

C는 반드시 override 해서 go() 메서드를 재정의 해야한다.

안그럼 컴파일 에러남!

 

해결방법 

: : 인터페이스.super.메서드명();

으로 호출해야함

 

 

 

★ static메서드는 인터페이스에서 제공하는 것으로 무조건 사용해야함

 

자~

이러한 특징을 가지고 있는 인터페이스를 왜 사용할까?

 

- 객체지향의 특징을 제대로 보여주고 있는 가독성과 유지보수가 향상이 된다.

   ㄴ 인터페이스를 구현한 클래스를 

- 확장에는 열려있고 변경에는 닫혀있는 객체간 결합도(코드 종속성)를 낮춘 유연한 방식의 개발이 가능

 

인스턴스 사용법 예시

 

다중상속 예시
public class Computer implments Backup,Pormat,turnOff

@Override
public void Backup(){
	System.out.printLn("백업을 시작합니다.");
}

@Override
public void Pormat(){
	System.out.printLn("포맷을 시작합니다.");
}

@Override
public void turnOff(){
	System.out.printLn("전원을 종료합니다.");
}