-
[JAVA] 인터페이스 (interface)JAVA 2020. 7. 4. 19:12
JAVA interface
인터페이스(interface)
인터페이스는 클래스가 제공하는 기능을 명시적으로 선언하는 역할을 합니다. 인터페이스는 추상 메서드와 상수로만 이루어져 있습니다. 즉, 구현된 코드가 없기 때문에 당연히 인터페이스로 인스턴스(객체)를 생성할 수 없습니다. 그렇다면 왜 인터페이스를 사용하는 걸까요?
인터페이스를 만드는 이유?
인터페이스는 개발자에게 내가 만든 프로그램이 어떤 메서드를 제공할 건지 알려주는 설명서와 같은 역할을 합니다. 예를 들어 계산이 프로그램을 구현한 CalBase클래스가 있다고 해봅시다. 우리는 이 인터페이스클래스만 보고도 이 메서드가 어떤 매개변수를 요구하고 있으며 어떤 반환값을 요구하는지 알 수 있습니다!
전자정부 표준 프레임워크에서는 Service 패키지에서 인터페이스 클래스를 선언하고 ServiceImpl 패키지에서 해당 인터페이스를 구현하는 방법으로 프로그램을 구현합니다.
CalBase.java
public interface CalBase { public double PI = 3.141592; public int ERROR = -999999999; public double add(double a, double b); public double sub(double a, double b); public double mul(double a, double b); public double div(double a, double b); }
간단한 예제를 보면서 설명을 붙여보겠습니다 :)
인터페이스는 위 코드처럼 작성 할 수 있습니다. 인터페이스는 추상 메서드로 이루어지므로 인스턴스를 사용할 수도 없으며, 멤버 변수를 사용할 수 없습니다. 그런데 위 코드는 변수를 선언했습니다.
그 이유는 컴파일되면서 인터페이스의 변수를 상수로 변환하게됩니다. 아래 코드처럼 상수로 선언하게 된 것과 동일합니다.
public static final double PI = 3.141592;
참고로 JAVA8 부터는 인터페이스에 디폴트 메서드(인터페이스 내에서 실제 구현 코드를 작성)와 정적 메서드(객체생성 없이도 사용 가능한 메서드) 기능을 제공합니다.
Calculator.java
public abstract class Calculator implements CalBase{ @Override public double add(double a, double b) { return a+b; } @Override public double sub(double a, double b) { return a-b; } }
선언한 클래스를 다음과 같이 인터페이스 클래스를 상속받아 추상 클래스를 구현 할 수도 있으며
ZangzangsCalc.java
public class ZangzangsCalc extends Calculator{ @Override public double mul(double a, double b) { return a*b; } @Override public double div(double a, double b) { if(b == 0) { return ERROR; }else { return a/b; } } }
다시 Caculator 추상 클래스를 상속 받아 더 구체적인 계산기 클래스를 작성하면 되는 겁니다!
References
- DO it! 자바
- 전자정부 표준 프레임워크
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'JAVA' 카테고리의 다른 글
[JAVA] Number 클래스와 Value 메서드 (0) 2020.07.13 [JAVA] SMTP 메일 이미지 첨부 방법 3가지 (0) 2020.07.04 [JAVA] IS-A 관계, HAS-A 관계 (2) 2020.06.30 [JAVA] 메서드 오버라이딩 (0) 2020.06.27 [JAVA] 상속에서 클래스 생성과 super (0) 2020.06.23