ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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


     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

    댓글