함수형 인터페이스를 이용한 비즈니스 로직 정의

날아올라돼지야·2024년 8월 31일
0

이번 강의에서는 함수형 인터페이스를 사용하여 비즈니스 로직을 정의하는 방법에 대해 다룹니다. 이 과정에서는 Function 인터페이스를 활용하여 이메일 및 SMS를 보내는 로직을 구현합니다. 각 함수는 Spring Cloud Function에서 자동으로 관리되고, 비즈니스 로직을 간단하게 작성할 수 있습니다.

1. 클래스 및 로거 설정

먼저, MessageFunctions라는 클래스를 생성합니다. 이 클래스에서 로깅을 위한 Logger 변수를 설정합니다.

private static final Logger log = LoggerFactory.getLogger(MessageFunctions.class);

2. 함수형 인터페이스 정의

이제 Function 인터페이스를 사용하여 비즈니스 로직을 정의합니다.

  • Function 인터페이스: Function<T, R>는 입력을 받아 출력을 반환하는 함수형 인터페이스입니다. 여기서 T는 입력 타입, R은 출력 타입을 의미합니다.
  • Lambda 표현식: 비즈니스 로직은 람다 표현식을 사용하여 정의되며, 입력을 받아 출력을 생성합니다.
이메일 함수 구현

먼저, 이메일을 보내는 함수 email을 정의합니다.

@Bean
public Function<AccountsMessageDto, AccountsMessageDto> email() {
    return message -> {
        log.info("Sending email with details: {}", message);
        // 실제 이메일 전송 로직 대신 로그 출력
        return message;
    };
}

이 함수는 AccountsMessageDto를 입력받아 같은 타입의 객체를 반환합니다. 함수는 이메일 전송을 시뮬레이션하기 위해 간단히 로그를 출력합니다.

SMS 함수 구현

SMS를 보내는 함수 sms를 정의합니다.

@Bean
public Function<AccountsMessageDto, Long> sms() {
    return message -> {
        log.info("Sending SMS with details: {}", message);
        return message.accountNumber();
    };
}

이 함수는 AccountsMessageDto를 입력받아 Long 타입의 계좌 번호를 반환합니다.

3. 함수 간 연결 (Function Composition)

이메일과 SMS 함수를 별도로 정의한 이유는, 두 함수를 결합하여 하나의 논리적 단위로 작동하도록 하기 위함입니다. 첫 번째 함수 email이 실행된 후 반환된 AccountsMessageDto 객체가 두 번째 함수 sms의 입력으로 사용됩니다.

4. 함수형 인터페이스 개요

  • Supplier 인터페이스: 입력 없이 출력을 생성하는 함수형 인터페이스입니다.
  • Consumer 인터페이스: 입력을 받아 처리하지만 출력을 반환하지 않는 함수형 인터페이스입니다.

5. 예제 코드 정리

비즈니스 로직을 정의한 후, Spring Cloud Function에서 관리되도록 @Bean 어노테이션을 사용하여 각 함수를 정의합니다. 이를 통해 각 함수는 Spring Cloud Function에 의해 자동으로 관리되며, 필요한 경우 다양한 방법으로 호출할 수 있습니다.

@Bean
public Function<AccountsMessageDto, AccountsMessageDto> email() {
    // 이메일 전송 로직
}

@Bean
public Function<AccountsMessageDto, Long> sms() {
    // SMS 전송 로직
}

결론

이번 강의에서는 Spring Cloud Function을 사용하여 함수형 인터페이스를 활용한 비즈니스 로직 구현 방법을 다뤘습니다. 다음 강의에서는 이 함수를 실제로 테스트하고 비동기 통신을 통해 메시지를 처리하는 방법을 살펴보겠습니다.

감사합니다. 다음 강의에서 뵙겠습니다.

profile
무슨 생각하며 사니

0개의 댓글