티스토리 뷰
들어가며
자바 언어를 공부하면서 인터페이싱과 추상화에 대해 이론적으로 공부는 어느정도(많이?) 했다.
처음에 인터페이스 클래스 썼을 때 서비스 클래스를 만들면 그 해당 서비스의 인터페이스 클래스를 만들어서 상속 받아 처리하는 구조로 썼지만 "왜 이렇게 해야하지? 이러면 불필요한 클래스 하나 더 추가하는 게 아닌가?" 생각이 들곤 했다.
이번에 다시 공부하면서 왜 사용하는지? 어떻게 써야 좋은건지? 어떤 경우에 써야하는지?
질문에 대한 답을 찾은 거 같아서 글을 남기기로 하였다.
요구사항
요구사항은 메세지 발송 기능이다. 메세지 발송 종류는 이메일 발송, 카카오 알림톡 발송, 앱 푸쉬 발송 3가지가 있다.
각 메세지 발송마다 여러가지 형태가 존재한다. 예를 들어 카카오 알림톡일 경우 메세지 종류는 자유형식 메세지, 템플릿 메세지 등 고정적인 형태가 아닌 여러 개의 형태로 알림톡을 발송할 수 있다.
이 3가지의 공통적인 부분을 최대한 추상화 및 인터페이스 활용하여 클래스를 구성할 것이다.
일단 공통적인 부분을 생각해보았다.
- 3가지 모두 발송을 해야하므로 발송 기능을 갖고 있는 인터페이스 클래스
- 여러가지 형태 메세지를 가질 수 있고 메세지와 타입을 조회할 수 있는 인터페이스 클래스
- 공통적인 값을 만들어야 하는 추상화 클래스
클래스 다이어그램
1. MessageSender<T>
- 공통적인 발송 메소드를 가진 인터페이스
- 여러 가지 메세지가 들어올 수 있도록 제네렉<T> 사용 함.
- 메서드 : send(T message)
2. KakaoAlimtokMessageSender
- 알림톡 메세지를 담아서 큐로 보내는 클래스
- MessageSender 인터페이스를 상속 받아서 오버라이딩 해서 처리
- 변수 : RabbitTemplate messageRabbitTemplate
- 메서드 : send(KakaoAlimtokMessage message)
3. KakaoAlimtokMessage
- 보내야 하는 큐와 메세지를 공통적으로 조회하는 메서드를 담고 있는 인터페이스
- 메서드 : KakaoAlimtokMessageType getType(), Object getMessage()
4. DefaultKakaoAlimtokMessage<T>
- 템플릿 타입과 메세지를 담고 있는 클래스
- KakaoAlimtokMessage 상속 받아서 템플릿 타입과 여러 형태의 메세지를 보낼 수 있도록 도와주는 클래스
- 변수 : KakaoAlimtokMessageType type, T message
5. TemplateMessage
- 기본 템플릿 메세지를 만들기 위한 클래스
- DefaultKakaoAlimtokMessage 상속 받아서 타입과 템플릿 메세지 정의.
6. FreeMessage
- 자유 형식 메세지를 담고 있는 클래스
- DefaultKakaoAlimtokMessage 상속 받아서 처리 타입과 자유 형식 메세지 정의.
7. KakaoAlimtokMessageBuilderHelper<B>
- 공통적인 값을 담을 수 있도록 도와주는 빌더 클래스
- 변수 : recipient , parameter
- 메서드
- B recipient(Long memberId, String mobileNo)
- B parameter(String key, Object value)
- B parameters(Map<String, Object> parameters)
8. TemplateMessageBuilder
- 템플릿 메세지 빌더 클래스
- KakaoAlimtokMessageBuilderHelper 상속받아서 공통적인 값 처리
- 변수 : String templateType(템플릿 타입) , KakaoAlimtokMessageType(큐 타입)
- 메서드 : build()
9. FreeMessageBuilder
- 자유형식 메세지 빌더 클래스
- KakaoAlimtokMessageBuilderHelper 상속받아서 공통적인 값 처리
- 변수 : String templateType(템플릿 타입) , KakaoAlimtokMessageType(큐 타입)
- 메서드 : build()
10. KakaoAlimtokMessageBuilderFactory
- 빌드 클래스 관리하는 팩토리 클래스
- 메서드 : TemplateMessageBuilder template(String templateType) , FreeMessageBuilder free(String templateCode)
'∙Java & Spring' 카테고리의 다른 글
대량 데이터 조회 시 메모리 최적화 전략(with.OOM) (1) | 2023.11.09 |
---|---|
MessageSource 유틸 클래스 만들기 (0) | 2023.10.21 |
Feign Client 사용하기 (0) | 2022.09.24 |
포인트 신청 시 발생하는 동시성 문제 (0) | 2022.09.24 |
ThreadPoolTaskExecutor 이용하여 성능 개선하기 (2) | 2022.05.29 |