본문 바로가기
개발자 :-)/Java

[Java] 인터페이스

by 뚜생첨 2022. 9. 3.

1. 인터페이스란

클래스와 달리 객체를 생성할 수는 없으며, 클래스에서 구현해야하는 작업 명세서

선언만 되어있는 것을 클래스에서 정의하는 것!

자바의 다형성을 극대화하고 소스코드 수정을 줄여 프로그램 유지보수성을 높이는 특성

ex) 학교에서 과제를 받았다면 여기에서 규격, 가이드라인이 인터페이스라고 할 수 있다.

 

2. 인터페이스를 사용하는 이유

객체가 다양한 자료형(타입)을 가질 수 있기 때문이다.

 

 

3. 인터페이스 구현

클래스 선언시 implements 작성후 메서드 정의 부가 없으면 아래와 같은 에러가 남 

→ Add unimplemented methods 누르면 자동으로 정의할 수 있음!

Q. 만약 InterfaceA와 InterfaceB 를 implements 하는 클래스는 두개의 인터페이스를 모두다 호출 할 수 있을까?

클래스가 두개의 인터페이스를 implements 하더라도 

InterfaceA 를 구현하는 클래스는 InterfaceB의 메서드를 호출할 수는 없다.

InterfaceA ia = new ImplementClass();
InterfaceB ib = new ImplementClass();

ia.funcB();  		//불가능

 

4. 예시

인터페이스를 이용하면 객체가 다양한 자료형을 가질 수 있다.

public interface Toy{
	public void run();
    public void fly();
}

public class ToyRobot implements Toy{
	@Override
	public void run(){System.out.println("로봇은 뛴다");}
    @Override
	public void fly(){System.out.println("로봇은 날수없다");}
}

public class ToyAirplane implements Toy{
	@Override
	public void run(){System.out.println("비행기는 뛸수 없다");}
    @Override
	public void fly(){System.out.println("비행기는 날수있다");}
}

Toy toyrobot = new ToyRobot();
Toy toyairplane = new ToyAirplane();

Toy toys[] = new Toy[2];
toys = {toyrobot, toyairplane);

for(int i =0; i< 2; i++){
	toys[i].run();
    toys[i].fly();
}

 

 

5. 인터페이스에서 선언하는 4가지 유형

① 상수

인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 사용해랏

 

② 추상메소드(강제성)

가이드만 줄테니 오버라이딩해서 재정의 해랏

근데 implements 한 모든 클래스에서 구현해야하며 안하면 에러남

ex) 금융결제원에서 입/출금 함수 포맷을 정해주고

하나은행에서는 입/출금 함수를 가져다 사용

신한은행에서는 사용하지 않는다면 에러남

 

③ 디폴트메소드

인터페이스에서 제공(정의)은 하지만 사용하려면 사용하거나 재정의해라 아님말구

ex) 금융결제원에서 계좌해지하기 기능을 default 메서드로 정해주고

하나은행은 사용, 신한은행은 사용하지 않는다고 해서 에러가 나진 않음

 

④ 정적메소드(강제성)

인터페이스에서 제공하는대로 무조건 사용, 오버라이딩 불가

728x90
반응형

'개발자 :-) > Java' 카테고리의 다른 글

[Java] 람다식  (0) 2022.09.04
[Java] 추상클래스  (0) 2022.09.03
[Java] 내부클래스와 익명클래스  (0) 2022.09.03
[Java] 상속  (0) 2022.09.03
[Java] 데이터 은닉  (0) 2022.09.03

댓글