본문 바로가기

백엔드/개발과 설계 원칙

Impl 분류하는 이유

반응형

Loose Coupling 


- 객체 간의 결합도를 낮추어 변화에 유연한 개발을 하기 위해서

- 하나의 인터페이스를 구현하는 여러 구현체가 있고 기능에 따라 적절한 구현체가 들어가서 다형성을 주기 위함이다. 또 하나의 인터페이스만 바라보니 의존관계도 줄일 수 있다.

 

예시

 


회원 비밀번호 인증을 한다고 생각해보자.

 

public interface PasswordRepository extends JPARepository<Password, Long>{
	public void changePw(Long userId){}
}

비밀번호를 변경하는 역할을 하는 레포지토리라고 가정하자.

 

 

비밀번호를 변경하는 로직이 2개라고 생각해보자.

- 현재 비밀번호로 바꾸기

- 다른 인증 수단으로 바꾸기

public class ByCurrentPw implements PasswordRepository{
public void ChangePw(){}
}

 

public class ByOtherMethod implements PasswordRepository{
public void ChangePw(){}
}

 

각각 하나의 인터페이스에서 파생된 구현체들이고, 각각이 비밀번호 변경에 대한 다양한 로직을 가지게 된다.

하나의 인터페이스에 너무 많은 책임을 지게하는 것은 문제가 된다. Impl을 활용하여 분류를 한다면 변화에 유연하고, 의존도가 줄어든 형태에서 각각의 기능을 개발할 수 있다.

따라서 다형성을 줄 수 있다는 말의 근거가 된다.

 

 

 

**출처

https://jeonyoungho.github.io/posts/spring%EC%97%90%EC%84%9C-Service-ServiceImpl%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%ED%95%98%EB%82%98/

 

[개발자 블로그] Spring에서 Service ServiceImpl 사용해야하는지

스프링 코드를 보면 Service인터페이스를 두고 ServiceImpl로 이를 구현하는 경우를 자주 볼 수 있다. 이 전에 정리했던 ‘스프링 의존성 주입과 인터페이스’에 이어 다시 한 번 더 정리를 하고 싶어

jeonyoungho.github.io

 

반응형

'백엔드 > 개발과 설계 원칙' 카테고리의 다른 글

MSA  (1) 2022.09.01
객체지향 설계 5원칙  (0) 2022.06.12
객체지향이란  (0) 2022.06.12
디자인 패턴 - 빌더 패턴  (0) 2022.03.07
Spring 예외처리  (0) 2022.03.03