[Functional Programming]

원민관·2024년 5월 22일
0

Functional Programming

목록 보기
3/3
post-thumbnail

✅ 쿠폰독 서비스 구현, part: 1

원민관님 친구 추천 수를 확인해 보자는 것이다. 친구가 없기로 유명하기에 good 쿠폰을 받을 가능성이 높다. 객체 형식의 데이터로부터 문자열로 이루어진 쿠폰 랭크를 리턴하는 단순한 구조의 함수이다. 핵심은, 해당 로직은 '데이터'와 '계산'으로만 이루어졌다는 것이다.

뻥 안치고 우리 할머니도 이해할 수 있는 파트이기에 가볍게 넘어간다.

✅ 쿠폰독 서비스 구현, part: 2

쿠폰 목록이 몇 개 있다고 가정하자. 만 원 할인(best), 오천 원 할인(good), 3회 무료(best), 1회 무료(good) 등.

한마디로, rank에 맞는 쿠폰 목록을 꺼내오자는 것이다. coupons는 배열의 데이터 구조일 것이고, 전체 쿠폰을 톺아보다가 내가 원하는 rank와 일치하는 쿠폰 요소가 있으면 빈 배열인 ret에 추가하자는 로직이다.

쉽다 쉬워, 오늘부터 나도 함수형 프로그래머?!

✅ 쿠폰독 서비스 구현, part: 3

✍️ 구독자가 받을 이메일을 계획하는 함수 - emailForSubscriber

subCouponRank 함수에 원민관을 전달하면 rank는 good 일 것이다. 왜냐면 처음에 친구가 없을 것이라고 얘기했기에 rec_count가 10미만일 것이기 때문이다. 따라서 emailForSubscriber 함수는, else 문에서 작성한 이메일 데이터를 반환하게 될 것이다.

✍️ 보낼 이메일 목록을 준비하는 함수 - emailForSubscriber's'

일단 구독자 배열을 인자로 설정한다. 배열에 원민관, 홍길동, 브라이언 이런 식으로 있다고 치자고. 동시에 subscriber라는 변수에 해당 인자의 데이터를 인덱싱한다. for 문에서 선언한 subscriber 변수에 가장 처음 원민관이 들어갈 것이다.

위에서 만든 emailForSubscriber에 구독자를 한 마리씩 한 분씩 대입해 본다. 참고로 selectCouponsByRank 함수를 돌리면 랭크에 맞는 쿠폰 목록이 반환된다. 다시 말하자면 var email = emailForSubscriber(원민관, 굿쿠폰 목록, 베스트 쿠폰 목록) 이런 상황이다. 길동이랑 브라이언 형님에 대한 이메일도 만들어질 테니, 모든 이메일을 이메일s라는 배열에 넣어주겠다는 것이다.

✍️ 이메일을 실제로 전송하는 함수 - sendIssue

  1. DB에서 모든 쿠폰 정보를 가져온다.
  2. 가져온 쿠폰에서 good 쿠폰을 선택한다.
  3. 가져온 쿠폰에서 best 쿠폰을 선택한다.
  4. DB에서 모든 구독자 정보를 가져온다.
  5. emailsForSubscribers(구독자 목록, good 쿠폰 목록, best 쿠폰 목록) -> emailForSubscriber(원민관, good 쿠폰 목록, best 쿠폰 목록) -> emails 배열 매핑하며 이메일 보내기 반복

✅ 쿠폰독 서비스 구현, part: Advanced

깐깐징어 사수 등장!

네~ 구독자 정보 한 번에 안 가져오면 그만이죠? 0페이지, 1페이지, 2페이지... 페이지마다 구독자 정보를 20명씩 가져온다고 가정하면 호들갑 떨 일 없죠?

✅ 회고

필자가 심신미약 시절 제주도에서 직접 촬영한 날씨 알려주는 돌멩이다. 적중률 100%는 무의미하다는 것을 잘 보여주는 사진이다. 뻔한 말은 하지 않는 것이 좋고, 뻔한 길은 애써 무시해 보는 것도 괜찮다. 누군가가 젊은 날의 치기라고 비난할지라도, 당연히 뻔해질 필요는 없다. 어차피 고민하고 한 말이 아닐 가능성이 높으니까. 100%는 아무것도 고민하지 않겠다는 뜻과 동일하다.

profile
Write a little every day, without hope, without despair ✍️

0개의 댓글