Service와 ServiceImpl

Ruinak·2021년 12월 20일
0

Glossary

목록 보기
20/26

다형성

Service와 ServiceImpl

  • 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

  • 자바에서는 보통 부모 클래스를 자식이 상속받아 기능을 확장하거나 변경하는 방식으로 쓴다.

  • 이걸 오늘의 주제인 Service와 ServiceImpl에 대입해서 본다면, Service라는 부모를 ServiceImpl이라는 자식이 상속받게 되는 것이다.

Impl의 의미

  • 근데 왜 이름들이 Service와 ServiceImpl인걸까? 그건 부모인 Service를 interface로 만들고, 자식인 ServiceImpl 클래스가 부모를 상속받아 implement하는 구현체이기 때문이다.

  • 이렇게 직관적으로 자식 클래스의 이름을 ~Impl로 짓는 것은 해외의 개발자들도 따르는 naming convention이다.

  • 이제 부모와 자식이라고 부르는 대신에 interface인 Service를 역할, 이걸 상속받는 자식 클래스인 ServiceImpl을 구현이라고 나눠서 생각하면 쉽게 이해할 수 있다.

예시

  • 방금 전에 “키보드”에 대한 예시를 들었다.

  • 이걸 역할과 구현으로 나눠보면, “타자를 치는” 역할을 구현하기 위해 사용자는 빨간색 빛이 나는 키보드 A를 쓸 수도 있고, 무지개색 키보드 B를 쓸 수도 있다. 바꿔도 키보드의 역할에는 영향이 없다.

  • 이걸 Service와 ServiceImpl로 생각하면 KeyboardService라는 interface를 implement하는 AkeyboardServiceImpl과 BkeyboardServiceImpl class들이 “타자를 치는” 기능을 구현하는 것이다.

결론

  • 이렇게 역할과 구현으로 나누게 되면 역할 부분을 새로운 방식으로 구현해야 할 때 구현하는 부분만 손쉽게 바꿀 수 있게 되기 때문에 Service라는 interface를 만든 후 해당 역할을 구현하는 ServiceImpl class를 만들게 되는 것이다!

출처 : https://itzjamie96.github.io/2021/01/24/spring-service-and-serviceimpl/

profile
Nil Desperandum <절대 절망하지 마라>

0개의 댓글