인터페이스(interface)

0

Java 공부

목록 보기
12/18

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

  • 현업에서 소스코드 작성 시 클래스를 처음부터 구현하게 된다면 코드의 가독성도 떨어지고 시간도 오래걸릴 것이다.
  • 팀별로 각각 다른 모듈을 만들 시 팀마다 방법이 다르기 때문에 서로 호환성이 없고 일관성이 떨어지게 됩된다.
  • 즉, 인터페이스란 특정 기능을 개발하는데 있어 공통적인 기능을 명시하고 강제적으로 구현하게끔 하는 역할입니다.
  • 인터페이스를 사용하게 된다면 자바의 다형성을 이용할 수 있고 이를 통해 유지보수성을 높일 수 있다.

사용방법

  • 인터페이스는 interface라는 키워드를 사용해서 정의할 수 있다.
  • 모든 메서드가 추상 메서드로 선언된다. public abstract 로 자동 변환.
  • 인터페이스의 변수의 값은 public static final 키워드가 생략된 상수이므로 주어진 값으로만 사용가능 하다.
interface 인터페이스 이름{

    public static final float pi = 3.14F;
    public void makeSomething();
}
  • 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있다. 인터페이스를 구현하는 클래스에서 재정의가 불가능하다.

사칙연산 구현해보기
interface Calc

public interface Calc {
	double PI = 3.14;
	int ERROR = -99999999;
	int add(int num1, int num2);
	int substract(int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
}

Calculator
인터페이스 상속은 implements 사용!!

public abstract class Calculator implements Calc{ //인터페이스 상속은 implements 사용!!
	// implements는 부모인터페이스의 전부 상속 받아야한다.
	// abstract를 사용한다면 추상화되어 전부 작성하지 않아도 된다.
	@Override
	public int add(int num1, int num2) {
		return num1 + num2;
	}
	@Override
	public int substract(int num1, int num2) {
		return num1 - num2;
	}
}

CompleteCalc
Calculator 에서 interface Calc 의 모든 요소를 구현한 것이 아니여서 나머지를 구현해보자!

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 ERROR;
		}else {
			return num1/num2;
		}
	}
	public void showIngo() {
		System.out.println("모두 완료하였습니다.");
	}
}

CalcTest

public class CalcTest {
	public static void main(String[] args) {
		Calc calc = new CompleteCalc();
		int num1 = 223;
		int num2 = 20;
		System.out.println(num1 + "+" + num2 + "=" + calc.add(num1, num2));
		System.out.println(num1 + "-" + num2 + "=" + calc.substract(num1, num2));
		System.out.println(num1 + "*" + num2 + "=" + calc.times(num1, num2));
		System.out.println(num1 + "/" + num2 + "=" + calc.divide(num1, num2));
	}
}

223+20=243
223-20=203
223*20=4460
223/20=11

0개의 댓글