[Java] 인터페이스(Interface) 개념과 구현하기
- Language/Java
- 2021. 6. 25.
이제 막 개발을 시작한 개발자라면 인터페이스의 필요성에 대해서 공감이 안되겠지만, 개발 경력이 어느정도 되었으며 협력을 하였고, 개발을 하기 전에 설계를 하는 개발자라면 인터페이스의 필요성에 대해서 더이상 말을 할 필요가 없을 것이다.
우리가 자동차를 만든다고 해보자 재료는 모두 갖추어져 있고 만들 기술과 장비가 있다고 한다면 현재 가장 필요한 것이 무엇일까? 바로 "설계도"일 것이다. 개발이든 건축을 하든 아니면 자동차를 만들든 제일 먼저 해야 될 것은 설계를 해야 하고 검증을 통해서 이상이 없다면 개발을 시작할 수 있다.
인터페이스는 바로 이 설계도와 유사하다. 개발자들은 비즈니스 로직이 되는 서비스단을 구현하기 위해서 필요한 메소드(method)를 미리 인터페이스화 시킨 후 이를 구현 하여 최종적으로 돌아가는 소스를 만들게 된다. 결국 인터페이스를 만들어야 되는 이유는 다음과 같이 크게 3가지 이유(다중상속은 일단 제외)가 될 수 있다.
대화의 원활함(Communication)
자동차를 여러명이서 개발을 하려고 하는데 설계도가 없이 같이 작업을 한다고 가정을 해보자 결국 제대로 이해를 못하고 서로간에 어긋나는 개발이 연속적으로 이루어질 것이다. 인터페이스를 잘 설계하고 주석 등을 제대로 달았다면 구현체를 보지 않아도 개발자들은 충분히 개발할 수 있고 input과 output도 동일하기 때문에 서로간에 의사소통에도 문제가 발생하지 않는다.
개발의 통일성과 교체 용이
인터페이스로 만들어진 프로그램은 결과적으로 input과 output이 원하는 형태로 나오기 때문에 프로그램을 교체하기가 상당히 용이하다. 프로그램에서 데이터를 가져오는 부분을 엘라스틱서치로 구현했다가 다른 엔진으로 교체를 한다고 했을 때 인터페이스로 구현하지 않을 경우 수정해야 될 부분들이 많을 것이다.
하지만, 서비스 로직을 인터페이스 형태로 구현하게 되면 수정해야 될 부분은 오로지 구현단만 건드리면 되며 해당 로직을 사용하는 부분은 건드릴 필요가 없어진다.
설계와 코더의 분리
인터페이스를 잘 설계하는 것은 코딩을 하는 것보다 더 어려울 수 있다. 어떤 파라미터가 필요하고 데이터를 어떻게 받아야 하는지 등을 제대로 설계해야 이를 구현하는 코더들은 여러번의 삽질을 방지할 수 있다.
결국 인터페이스를 고급 개발자들이 잘 설계해서 초급 개발자들에게 구현을 요청하면 초급 개발자들은 어찌저찌 구현을 할 수 있게 되기에 궁극적으로 설계자와 코더의 분리는 MM(Man month)를 줄일 수 있게 된다.
인터페이스 예시
우선 인터페이스의 예시를 위해서 자동차를 Java로 구현한다 생각해보자. 자동차는 일단 움직여야 하고, 핸들도 필요하고 자동차의 크기를 설계하는 것도 중요하기 때문에 이 각각의 기능들을 메소드화 시킨다.
인터페이스를 구현할 패키지로 이동하여, 마우스 우클릭 -> New -> Interface를 선택한다.
CarService라는 인터페이스를 구현하고 싶다면, CarService라 입력한 후 Finish를 누른다.
move, handle, size라는 메소드를 인터페이스에 설계한 후 모두 완료되었으면 이제 인터페이스를 구현하는 클래스를 만든다.
패키지에서 마우스 우클릭하여 Java Class를 선택한 후, 원하는 클래스명을 지정하며, Add 버튼을 클릭한다.
인터페이스를 선택하는 부분에서 만든 인터페이스 명을 입력하면 하단에 Matching Items가 나오는데 아이템을 선택한 후 OK를 클릭한다.
다시 클래스 화면으로 돌아왔으면, interface 영역에 선택한 인터페이스가 존재하는 것을 알 수 있다. 여기까지 작업이 끝났으면, Finish를 클릭한다.
클래스가 생성되었으면, Override가 된 메소드들이 화면에 노출이 될 것이고 이제 각 기능들을 개발을 화면 완료가 된다.
'Language > Java' 카테고리의 다른 글
[Java] 리스트(List) 형 정렬(오름차순, 내림차순) (0) | 2022.01.06 |
---|---|
[Java] 폴더 체크 및 폴더 생성, 삭제 (0) | 2021.12.29 |
[Eclipse] 이클립스에서 에러 표시 무시하기 (0) | 2021.03.30 |
[Java] 자바, 삼항연산자(ternary operator) 사용방법 (0) | 2021.01.27 |
[Java] 자바 IndexOf로 모든 위치 찾는 방법 (0) | 2021.01.02 |