![[Java] 인터페이스(interface) [Java] 인터페이스(interface)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
자바에서 인터페이스(interface)는 객체의 사용 방법을 정의한 타입입니다.
인터페이스는 객체의 교환성을 높혀주기 때문에 다형성을 구현하는 매우 중요한 역할을 합니다.
특시 자바8에서 인터페이스의 중요성은 더욱 커졌습니다.
자바8의 람다식은 함수적 인터페이스의 구현 객체를 생성하기 때문입니다.
인터페이스(interface)는 개발 코드와 객체가 서로 통신하는 접점 역할을 합니다.
개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킵니다.
그렇기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됩니다.
개발 코드가 직접 객체의 메소드를 호출하면 간단한데, 왜 중간에 인터페이스를 두는지 의문점이 생깁니다.
그 이유는 개발 코드를 수정하지 않고, 객체를 변경할 수 있도록 하기 위해서입니다.
인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있습니다.
따라서, 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴 값을 다양화할 수 있다는 장점을 가지게 됩니다.
--
웹 개발을 하면서 너무 당연하게 controller > service > serviceImpl > mapper > xml
방식으로 개발하는데, service 인터페이스와 serviceImpl을 사용하는 이유를 잘 모르겠어서 인터페이스에 대한 정의를 찾아보고..
그 이유에 대한 것을 구글링 해 보았습니다.
--
Spring framework의 특징과 관련지어서 해답을 찾았습니다. spring에서는 객체를 bean으로 생성하고 각 객체에 의존성을 주입해서 사용하는 것으로 알고 있습니다. 그래서 service라는 뼈대를 만들어 놓고 다형성을 구현하기 위해 serviceimpl을 만들어 특정한 기능을 부여할 수 있게 사용한다고 생각합니다. 뼈대만 만들어놓고 안에 있는 내용만 바꿀 수 있다면 유지 보수 차원에서 굉장히 용이하기 때문입니다. 예를들어 식당이라는 객체에 접시1과 접시2라는 주입되어 있을 때 접시 1과 접시 2의 생김새만 만들어 놓으면 음식을 자유자재로 바꿀 수 있는거죠. 만약 interface로 뼈대를 만들어 놓지 않는다면 기능이 바뀔 때마다 새로운 메소드를 만들게 되서 연관된 파일을 전부 수정해야하는 불상사가 발생합니다.
인터페이스와 그 구현체를 쓰는게 원론적으로는 약한 결합을 지향하는 사고방식에서 나오지 않았나 생각해봅니다. 구체적은 클래스를 바로 작성해서 사용해도 틀렸다고 말할 수 없는 부분이죠. 자바가 지향하고자 하는 바를 잘 살리다보니 하나의 인터페이스에 하나의 구현체가 나오게 되지 않나 생각해봅니다.(아주 원론적이죠?) 그리고 다르게 한번 생각해보면...
저 같은 경우에도 어떠한 프로그램을 짤 때 주요 뼈대 및 흐름 같은 것을 코딩해서 초급개발자에게 역할을 부여합니다. 물론 인터페이스로 작성해서 해당 기능에 대해 코딩하도록 업무지시를 내리게 되죠. 프로그램은 혼자 작성할 수도 있지만 협업을 해야하는 경우가 많자나요. 이런 경우를 생각해보면 인터페이스를 누군가가 작성해놓고 실제 구현은 다른 사람이 하도록 분할해 놓으려고 사용하지 않았으려나 생각해봅니다.
물론 구현체가 하나밖에 나올 수없는경우는 인터페이스가 필요없는게 실제로는 맞습니다만...
하지만 협업을 하다보면 큰뼈대를 설계자가 인터페이스를 통해 구현을 하면, 나머지 작업자들은 실제 구현은 그에맞게 구현할 수 밖에 없죠.
함수명이라던가 리턴, 파라메터등....인터페이스에 맞춰 자연스럽게 코딩이 가능한것이 장점이 될수 있겠네요
출처 :
https://multifrontgarden.tistory.com/97
MVC 구조에서 service와 serviceImpl
이제는 JSP 개발시 MVC 패턴으로 작업하는게 당연시 되고있다. MVC패턴이란 화면에 보여줄 view 에 대한 작업, DB에서 조회 혹은 DB에 저장할 내용을 중간에 가공, 처리하는 비즈니스로직, DB에 연결...
multifrontgarden.tistory.com
'java' 카테고리의 다른 글
[코딩테스트] 도움되는 링크 모음 (모으는중...) (1) | 2023.12.04 |
---|---|
[IntelliJ] springboot initializr 가 없을 때 (0) | 2022.01.12 |
댓글