본문 바로가기
개발일지/JAVA

JAVA 인터페이스에 대한 모든 것

by 세 미 콜 론 2021. 5. 18.
728x90
반응형

최근 JAVA 국비지원 커리큘럼을 보면 대체적으로 Spring Framework를 기반으로 배우기 때문에 MVC 패턴에 대해 배우게 됩니다. MVC 패턴이란 말 그대로 Model, View, Controller를 말하는데요. MVC 패턴에서 흐름을 보자면 Controller > Service(interface) > ServiceImpl > Dao(interface) > DaoImpl > xml 로 흘러간다고 배웠을 것입니다. 그런데 여기에서 왜 굳이 interface를 구현해야 하는지에 대해 의문을 가지고 있는 분들이 있을 것입니다. 별도로 인터페이스를 구현하지 않고 바로 Impl 단계로 가는 경우도 있습니다. 있고 없고의 차이에 대해 많이 궁금할 것입니다. 그렇다면 우선 인터페이스가 무엇이고 왜 사용하는지에 대해 알아야할 것 같습니다. 

인터페이스의 정의
인터페이스란 쉽게 말해서 자바 프로그래밍 언어에서 클래스가 구현해야 하는 동작을 지정할 때 사용하는 추상 자료형입니다.

인터페이스를 사용하는 이유
JAVA를 이용한 프로그램은 단위가 큰 경우가 많습니다. 최근 개발자들이 가고 싶어하는 회사들, 네카라쿠배라고 부르는 회사를 비롯해서 많은 유니콘 기업, IT 기업이 대부분 JAVA를 사용니다. 개발자 혼자서 프로그램을 처음부터 끝까지 만드는 것이 아닌 이상 분업을 하기 마련입니다. 인터페이스는 이 분업 과정에서 다형성을 극대화시켜서 프로그램 유지보수성을 높이기 위해서 사용하고 있습니다. 
예를 들어 더욱 쉽게 설명 해보겠습니다. 우리는 그동안 핸드폰을 사용하면서 불편한 점이 있었습니다. 바로 충전 단자가 동일하지 않다는 것. 특히 15년 전만 하더라도 제조사에 따라 핸드폰 충전 단자가 달라 별도의 젠더를 가지고 다니는 사람이 매우 많았습니다. 그런데 지금은 micro 5핀, C핀 등 규격화된 단자를 사용하고 있습니다. 만약 옛날에도 한 가지 규격의 단자를 사용했다면 핸드폰을 새로 구매할 때마다 충전기나 주변기기를 새로 구매할 필요가 없었을 것입니다.
인터페이스란 이런 것을 말합니다. 인터페이스에서 메소드의 타입과 리턴타입, 변수타입, 이름을 미리 지정해서, 실제 구현(Impl) 단계에서 기능을 변경할 때도 해당 규격에 맞게 만들어 유기적으로 연계되는 다른 클래스나 메소드에 영향을 주지 않도록 하는 것을 뜻합니다. 예를 들어 사용자가 입력한 '라'라는 글자를 파라미터로 받은 A 메소드를 실행한 결과로 받은 int 값을 가지고 B 메소드에 넣어 계산식을 수행한다고 가정 해봅시다. 소스로는 아래처럼 표현할 수 있습니다.

public static void main(String[] args){
	//사용자가 글자를 입력하는 코드가 들어갈 자리
    int number = A(사용자입력글자);
    B(number);
}

public static int A(String 사용자입력글자){
	//사용자가 입력한 글자를 DB에서 찾아 숫자를 구하는 코드가 들어갈 자리
    
    return DB에서찾은숫자;
}

public static void B(int number){
	//number를 가지고 연산하는 코드가 들어갈 자리
    
    System.out.println(number);
}

메인은 사용자로부터 String을 입력받아 A와 B 메소드를 실행시키는 역할을, A는 사용자가 입력한 글자를 DB에서 찾아서 숫자를 구하는 역할을, B는 연산 후 콘솔에 결과를 찍어주는 역할을 하고 있다고 가정하겠습니다. 이 때 만약 A를 구정하는 사람이 멋대로 int형이 아닌 String형으로 return 하도록 변경했을 때 B까지 변경해야 하는 사태가 발생합니다. 따라서 이런 것을 방지하기 위해서 A는 반드시 public static이며 int의 반환타입을 가지고 파라미터는 String으로 하나 받아야 한다고 지정하는 것이 인터페이스입니다.

728x90
반응형

댓글