본문 바로가기
Java

Interface (인터페이스)

by 개발자공부 2024. 4. 26.

인터페이스

모든 메서드가 추상 메서드로 선언된다. public abstract (생략하고 '리턴타입 + 메서드 이름'만 적어도 된다.)

모든 변수는 상수로 선언된다. public static final

(인터페이스는 기능 중심이다. 역할과 구현.)

 

+) getter, setter를 지원하지는 않는다.

인터페이스 특징

추상 메서드 : 인터페이스는 추상 메서드(구현부가 없는 메서드)만을 가질 수 있다. 자바 8버전부터 default 메서드와 static 메서드를 가질 수 있게 되었다.

 

다중 상속 : 클래스는 여러 인터페이스를 구현할 수 있으므로 다중 상속 효과를 낼 수 있다.

 

구현 : 클래스가 인터페이스를 구현할 때는 implements 키워드를 사용한다. (상속은 extends 로 받는 것처럼.)

(implements 는 '구현하다'라는 의미이다. 요즘은 구현했다는 의미로 class 끝에 Impl을 붙일 때도 있다.)

 


인터페이스와 추상클래스를 사용해서 코드 작성해보기

더보기
public interface Calc{

	public abstract int add(int n1, int n2);
    public abstract int substract(int n1, int n2);
    public abstract int times(int n1, int n2);
	public abstract double divide(int n1, int n2);

}
public abstract class Calculator implements Calc{

	// 예상 테스트 값 n1 -10, n2 -0
    @Override
    public double divide(int n1, int n2){
    
    	if(n1 == 0 || n2 == 0){
        	System.out.println("어떤 수를 0으로 나눌 수 없습니다.");
            return 0.0; // 리턴 값이 더블이라서 0.0 이라도 적었다.
        }
        return n1 / n2;
    
    }

}
public class CompleteCalc extends Calculator{

	@Override
	public int add(int n1, int n2) {
		return n1 + n2;
	}

	@Override
	public int substract(int n1, int n2) {
		return n1 - n2;
	}

	@Override
	public int times(int n1, int n2) {
		return n1 * n2;
	}
	
	public void showInfo() {
		System.out.println("계산 완료");
	}
	
	// 코드 테스트 메인 함수 
	public static void main(String[] args) {
		Calc calc = new CompleteCalc(); // 업캐스팅된 상태 
		
		System.out.println(calc.add(10, 10));
		System.out.println(calc.divide(10, 0));
		System.out.println("--------------------");
		
		((CompleteCalc)calc).showInfo();
		// 반복문, 제어문 활용한다면 instanceof 연산자를 기억하자
		if( calc instanceof CompleteCalc ) {
			((CompleteCalc) calc).showInfo();
		}
			
	}

}

 

인터페이스 고찰

인터페이스를 통한 동물 경주 게임 설계 해보기

  거북이, 토끼 클래스가 존재한다고 가정한다. 어느 날 둘이 경주 게임에 참가하자고 합의했다. 단 참가를 하기 위해서는 본인 이름과 경주 속도를 알려주는 장치를 달아야 중개(일종에 스펙)가 가능하다고 한다. 이 상황을 코드로 작성해보자.

더보기
public interface RaceParticipant{
	String getName(); // public abstract 생략
    int getSpeed(); // 리턴타입과 메소드 이름만 적어도 된다.
}
public class Turtle implements RacePartcipant{

	private final int speed = 2;
    
    @Override
    public String getName(){
    	return "거북이";
    }
    @Override
    public int getSpeed(){
    	return speed;
    }
}

 

 

 

연극에 로미오 역할이 있는데 배우는 2명

  더블 캐스팅(Double Casting) : 주연 역할을 두 명의 배우가 번갈아 가며 연기하여 공연 부담을 분담하거나 다양한 해석을 관객에게 제공할 수 있는 장점이 있다.

 


인터페이스 활용

'Java' 카테고리의 다른 글

String, StringBuffer 클래스  (0) 2024.04.29
Object 클래스  (0) 2024.04.29
Abstract class (추상 클래스)  (0) 2024.04.26
Polymorphism(다형성) & Upcasting+Downcasting  (0) 2024.04.26
Dependency (의존관계)  (0) 2024.04.26