hans1126
94
2022-06-05 16:32:51
3
229

return 키워드는 정확히 어떤 기능을 가진 건가요?


자바스크립트 함수형 프로그래밍을 공부하면서 문득 의문이 들었습니다.


부수효과가 없는 순수함수 <- 이 파트에서 생긴 의문입니다.


함수 내부에 console.log 함수를 입력해서 값을 출력하면 부수효과가 생기므로

return으로 값만 넘기고 넘긴 값으로 출력하면 부수효과가 없다는 설명이었습니다.


이 파트에서 return은 무엇이길래 부수효과가 없다는 것이지?

이 의문이 들었습니다.


return 키워드의 기능은 무엇일까?

자바면 메소드를 호출한 클래스의 필드에 계산값을 담은 변수를 추가하는 건가?

자바스크립트라면 해당 함수가 참조하고 있는 객체에 프로퍼티를 생성한다는 것일까?

아니면 외부 함수에 계산값을 담은 보이지 않는 변수를 추가한다는 것일까?


이것저것 찾아봐도 뭔가 시원하게 답이 안 나와서 글을 올려봅니다...!!

0
  • 답변 3

  • Hide_D
    1k
    2022-06-05 16:51:00 작성 2022-06-05 17:00:30 수정됨

    1. 순수 함수란 중,고등학교때 배웠던 함수와 같다는 의미입니다.


    y = f(x) 

    y= f(x1, x2, x3)

    (y2, z) = f(x1, x2, y1)

    등등해서 다양한 함수들이 있죠?


    수학에서 f를 프로그램에서 함수라고 할 때,

    좌변에 대입될 값이 무엇인지 정해주는 것이 return의 역할입니다.


    2. 다만 이 순수함수라는 개념에서 쓰는 side-effect는 수학만큼 정밀하진 않습니다.

    일반적으로 프로그래밍에서 순수함수는 (에러 상황이 아니라면) 언제 어떻게 호출하든 같은 인자라면 같은 값을 돌려주는 걸로 충분하다고 보거든요.


    대부분 외부 자료(DB, 파일 내용, 전역변수 등), 혹은 내부 상태값(클래스라면 객체 프로퍼티)에 접근하느냐를 기준으로 하는 경우가 많고,

    꽤 많은 경우에 디버깅, 로깅 용도 등으로 출력하는 행동은 side-effect라고 보지 않는 경우가 많습니다.


    2+. side-effect의 경계가 애매하긴 합니다.

    말씀하신 console.log의 경우가 그렇죠.

    만들고자 하는 프로그램이 결과를 콘솔에 출력해주는 프로그램이라면, console.log로 출력하는 행동은 side-effect가 있는 것이고,

    일반적인 javascript가 하듯이 웹브라우저에 띄워준 html tag가 최종 결과물이라면 console.log로 출력하는 행동은 side-effect까지는 아니라고 보는거죠.

  • hans1126
    94
    2022-06-05 16:54:41 작성 2022-06-05 16:59:29 수정됨

    //Hide_D 답변 감사합니다!

    아앗... 상당히 정의하기 어려운 파트네요 ㅠㅅㅠ [접근]이라는 키워드로 보는 것이 좋겠네요!
    감사합니다!

  • 코지고지
    215
    2022-06-05 20:46:12

    좀더 설명하면,

    우리가 기본적으로 함수에서 기대하는 것은

    "INPUT 을 넣으면 OUTPUT이 나온다." 라는 것입니다.


    만약 함수가 function(a,b) => a +b 라면

    INPUT과  OUTPUT이 존재하고 아무런 사이드 이펙트가 존재하지 않지만,

    result = 0

    function(a,b) {result = a+b \ return result}

    라면 OUTPUT이 있는 것 뿐만이 아니라, result라는 변수에도 변화가 생겼으니

    이 또한 side effect라고 볼 수 있습니다.


    즉, return 값 이외에도 (심지어 브라우저에 출력하거나, alert()를 띄우기 위한 목적만을 갖는 함수더라도), 다른 변경사항을 함수 외부에서 확인할 수 있다면, 이는 모두 side effect라고 표현한다고 생각하시면 될 것 같습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.