• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

선생님 안녕하세요.

22.09.23 20:18 작성 조회수 177

1

좋은 ~ 강의 잘 봤습니다.

다름아니라 질문이 적절한지는 모르겠으나,

서칭하다 막혀서 문의드려봅니다..ㅜㅜ

현업에서도 실제로 람다와 함수를 이용한 코딩을 주로 하는지 궁금합니다..

람다가 편한것도 있고 가독성도 좋은 부분은 알겠으나,

재사용하기에 힘든부분도 있는것 같아서 그나마 재활용 가능하게 람다를 고차함수 형태로 만들어서, 함수 프로그래밍 방식으로 하는지 궁금합니다..ㅜㅜ(맞는 표현인지...;;)

이러한걸 고민하는 이유는, 항상 객체지향 방식으로 코딩하다, 코틀린을 공부하면서, 1급객체와, 고차함수 에 람다식을 섞었 쓰는 부분에 매력을 느끼게되어서, 해당 스킬들을 공부하여, 적용하고싶은데, 막상 적용시키려니, 생각보다 어려운 부분이 많아서..

공부를 따로하여, 실제 적용할만한 값어치가 있는지 고민하게되었습니다..

순수함수까지는 아니더라도, 공부를 하여, 1급함수형 프로그래밍을 객체지향과 섞어쓸 매력이 있는지 궁금합니다.

답변 1

답변을 작성해보세요.

2

안녕하세요 인진님!! 😊 크으~~ 좋을 질문이십니다!!

우선 결론부터 말씀드리면! 함수형 프로그래밍과 객체지향형 프로그래밍은 서로를 보완하는 관계라고 생각합니다!!

이 함수형 프로그래밍이란 것 자체가 <자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)> 의 17강에서 다루었던 것처럼 '객체만 일급시민으로 간주하려고 했을 때 나타나는 불필요한 반복'을 제거하기 위해 사용되거든요!!

예를 들어 제가 직접 List<Book> 중 A로 시작하는 책들만 담으려고 한다면, 1) 빈 리스트를 만들고 2) 제가 원하는 로직 (A로 시작하면 true, 그렇지 않으면 false) 을 작성하고 3) 로직에 따라 빈 리스트에 Book을 넣어주어야 하는데요!

1번, 3번이라는 반복 라이브러리화 하고 2번만 작성할 수 있게 해준 것이 filter 기능인거죠!

또한 여러 데이터를 서로 혼합해야 한다거나, 그룹핑을 해야 한다거나 이럴 때도 다양한 함수형 기능들을 사용하게 됩니다!

 

그래서 이제 질문 주신 부분들에 대해 하나씩 답변을 드려보면,

  • 현업에서도 실제로 람다와 함수를 이용한 코딩을 주로 하는지 궁금합니다..

    • 넵넵! 매우 자주 코딩을 합니다! 물론 함수형 프로그래밍 언어를 사용하지 않는 이상, 모든 기능을 함수형으로 작성하는 것은 절대 아니고요!

    • 예시로 들어드렸던 것처럼 컬렉션을 가공할 때 주로 사용하게 됩니다! 😊

  • 람다가 편한것도 있고 가독성도 좋은 부분은 알겠으나, 재사용하기에 힘든부분도 있는것 같아서 그나마 재활용 가능하게 람다를 고차함수 형태로 만들어서, 함수 프로그래밍 방식으로 하는지 궁금합니다

    • 사실 함수를 파라미터로 넣는다는 것 부터 벌써 '고차함수'라는 의미입니다!

    • https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%B0%A8_%ED%95%A8%EC%88%98

    • 아까 말씀드렸던 경우처럼 개발 과정에서 반복되는 부분을 템플릿화하여 재사용하고 개발자가 직접 작성해야 하는 로직만을 집중해 작성하기 위해 함수형 API들이 나오게 된 것이죠!

  • 공부를 따로하여, 실제 적용할만한 값어치가 있는지 고민하게되었습니다.. 순수함수까지는 아니더라도, 공부를 하여, 1급함수형 프로그래밍을 객체지향과 섞어쓸 매력이 있는지 궁금합니다.

    • 사실 함수형 프로그래밍이라 하더라도 컬렉션을 가공하는 상황에서 제한적으로 사용되는 경우가 많습니다!! (혹은 데이터를 가공할 때 chaning 형식으로 사용하거나요~) 때문에 저 역시도 별도로 깊게 함수형 프로그래밍 언어를 공부한다거나, FP 원리를 공부한다거나 하지는 않았고, 사용하는 언어에서 제공하는 함수형 기능들을 이해하고 활용하는 쪽으로 공부했습니다 ㅎㅎㅎㅎㅎ

    • 결국 언어에소 제공하는 함수형 기능들은 boiler template 코드가 줄어들고 개발을 쉽게 만들어주는 친구들이라 확실히 편하더라고요~

 

제 답변이 도움이 되었으면 좋겠네요~ 😊 혹시나 궁금한 점 또 있으시다면, 편하게 남겨주세요~!!!

감사합니다!!! 🙏