각진 세상에 둥근 춤을 추자

[Java] 인터페이스 본문

Java

[Java] 인터페이스

circle.j 2022. 9. 21. 11:10

여러 프로그래머들이 독립적으로 클래스를 작성하고, 이 클래스들을 합쳐서 하나의 소프트웨어를 완성한다고 한다.

이때 클래스들을 연결하려면 클래스 간의 상호작용을 기술하는 일종의 규격이 있어야 한다. 그래야 클래스들이 서로 잘 접속될 수 있다.

이러한 규격을 인터페이스(interface)로 정의한다.

 

구현 코드가 없는 인터페이스 

 

인터페이스는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다.

즉 추상 메서드와 상수로만 이루어져 있다. 

구현 코드가 없기 때문에 당연히 인터페이스로 인스턴스를 생성할 수 없다.

그렇다면 구현 코드가 없는 인터페이스는 어떻게 사용할까? 

 

인터페이스를 만들어 본다.

패키지에서 마우스 오른쪽 버튼 클릭 - New - Interface 클릭

인터페이스 이름은 Cacl로 입력한다. 

 

 

인터페이스 내부 코드를 작성한다. 

해당 인터페이스는 계산기를 만들기 위해 선언한 코드이다.

인터페이스에서 선언한 변수는 모두 컴파일 과정에서 값이 변하지 않는 상수로 자동 변환된다.

 

package ch10_1;

public interface Calc {
	
	// 인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환된다.
	double PI = 3.14;
	int ERROR = -999999999;
	
	// 인터페이스에서 선언한 메서드는 컴파일 과정에서 추상 메서드로 변환된다.
	int add (int num1, int num2);
	int substract (int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
	
}

 

선언한 인터페이스를 구현할 클래스를 생성한다. 

인터페이스에 선언한 기능을 클래스가 구현한다는 의미로 implements 예약어를 사용한다.

 

코드를 작성하면 다음과 같은 오류가 표시된다.

1. Add unimplemented methods: 추상 메서드를 구현하시오.

2. Make type 'Calculator' abstract: Calculator 클래스를 추상 클래스로 만드시오.

 

일단 1번 옵션을 클릭한다.

Calc 인터페이스에서 선언한 4개의 추상 메서드 중 add()와 substract() 2개만 구현하여 추상 클래스로 만든 후 

이를 상속하는 클래스를 만드는 과정을 구현해 본다. 

 

 

 

package ch10_1;

public abstract class Calculator implements Calc{

	@Override
	public int add(int num1, int num2) {
		return num1 + num2;
	}

	@Override
	public int substract(int num1, int num2) {
		return num1 - num2;
	}

}

 

Calculator 추상 클래스를 상속받아 CompleteCalc 클래스를 만든다. 

아직 구현하지 않은 times()와 divide() 추상 메서드를 CompleteCalc 클래스에서 구현한다.

package ch10_1;

public class CompleteCalc extends Calculator{

	@Override
	public int times(int num1, int num2) {
		return num1 * num2;
	}

	@Override
	public int divide(int num1, int num2) {
		if (num2 != 0) {
			return num1/num2;
		}else {
			return Calc.ERROR;	// num2가 0, 즉 나누는 수가 0인 경우에 대해 오류 반환
		}
	}
	
	public void shosInfo() {
		System.out.println("Calc 인터페이스를 구현하였습니다...");
	}

}

 

마지막으로 테스트 프로그램을 만들어 CompleteCalc 클래스를 실행해 본다.

package ch10_1;

public class CalculatorTest {
	public static void main(String[] args) {
		
		int num1 = 10;
		int num2 = 5;
		
		CompleteCalc calc = new CompleteCalc();
		
		System.out.println(calc.add(num1, num2));
		System.out.println(calc.substract(num1, num2));
		System.out.println(calc.times(num1, num2));
		System.out.println(calc.divide(num1, num2));
		calc.shosInfo();
		
	}
}

 

'Java' 카테고리의 다른 글

[Java] Object 클래스  (0) 2022.09.23
[Java] 인터페이스와 다형성  (0) 2022.09.23
[Java] final 예약어  (0) 2022.09.21
[Java] 템플릿 메서드 - 게임 캐릭터레벨 기능 구현하기  (0) 2022.09.20
[Java] 템플릿 메서드  (0) 2022.09.20