단일 책임 원칙

Stormi·2022년 4월 13일
0

Bug reporting

목록 보기
2/4

https://velog.io/@cokkum113/%EA%B0%9C%EB%B0%9C-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-%EC%BD%94%EB%93%9C-%EC%A4%91%EB%B3%B5-%EB%AC%B8%EC%A0%9C

제가 다뤘던 컨트롤러 코드의 중복 문제를 해결하고자 어댑터 패턴을 사용하려던 부분입니다.

<하고자 하는 일>
OAuth 부분의 컨트롤러와 서비스 코드가 동일하고 겹쳐서 Interface로 뺀 다음에 그것을 상속 받게해서 Kakao, Naver 등 Oauth들이 추가 될때 관련된 WebClient 속성들만 다르게 하고 싶었습니다.

이런식으로 인터페이스를 만들어주고

이렇게 상속받은 구현클래스들을 만듭니다.
저번에 Appconfig에 따로 @Bean으로 등록했던 코드를 지우고
@Component를 사용해서 빈으로 등록합니다!!!

여기 까지가 지난번 문제의 해결 방법이라면!! 이제 서비스 코드를 수정할 텐데 여기 부분에 단일 책임원칙이 들어갑니다.

단일 책임 원칙

자기가 콜되는것을 인터페이스가 아닌 자기가 책임져야함. 즉 자신(클래스)이 어디로 가야할 지는 자신이 메소드를 가지고 있어야함. 따라서 interface에 checkProviderType을 넣어줘서 Naver인지 Kakao인지 확인할수있도록 넣었습니다. 저는 Provider 는 Enum클래스 입니다.

후에 이 인터페이스를 콜하는 Service클래스에

이런식으로 AuthApiCaller를 리스트 값으로 넣어줍니다. 그러면 빈으로 등록된 모든 AuthApiCaller를 상속받은 클래스들이 리스트에 저장이되어있습니다.


이제 이런식으로 provider값을 확인해서 어떤 구현클래스를 가져올지 정하면 됩니다!

이렇게하면 변경과 확장에 열린 코드가 완성이 됩니다. 만약 구글OAuth를 추가한다면 AuthService는 건들일 필요 없고, Enum클래스인 Provider에 GOOGLE을 추가하고, 구글의 웹속성들만 추가해주면 됩니다!!!

0개의 댓글