티스토리 뷰

https://www.notion.so/simsimjae/0f630712f62543b9803489d5f07be7b0

아래 글들은 검색엔진 노출을 위한 글입니다. 

노션에서 확인하시면 이미지와 함께 정리된 글을 보실수 있습니다. 궁금하신점은 블로그 댓글이나 노션 코멘트를 이용해주세요(@comment)


제가 직접 만든 프로젝트입니다.

http://pickvs.com : 닥전닥후


 

수학에서의 참조 투명성

x = 2 + (3 * 4) //이 수식을 다음과 같이 변경해도 결과는 똑같다. x = 2 + 12

  • 3 * 4 라는 식이 있고 그 식의 결과인 12가 있다. 식을 그 식의 결과로 모두 치환해도 문제가 없기 떄문에(3 * 4)의 수식은 참조에 투명하다고 할 수 있다.

프로그래밍에서의 참조 투명성

int add(int a, int b) { return a + b } int mult(int a, int b) { return a * b; } int x = add(2, mult(3, 4));

  • mult(3, 4) : 순수함수의 실행부분을 실행결과값인 12로 대체해도 프로그램에 전혀 문제가 없으므로 mult(3, 4)는 참조 투명하다.

참조 투명하지 않은 예

int add(int a, int b) { int result = a + b; System.out.println("Returning " + result); return result; } var result = add(3, 4);

  • add(3, 4); 부분을 12로 바꾸게 되면 로그가 찍히지 않기 떄문에 프로그램의 결과가 달라진다.
  • 따라서 위의 add 함수는 참조 투명하지 않다.

명령형 프로그래밍에서 참조 투명성

명령형 프로그램과 함수형 프로그램 모두에서 함수를 사용한다. 함수형 프로그램에서는 함수만 사용하지만 명령형 프로그램에서는 다음과 같이 3가지 함수를 사용한다.

  1. 순수 함수 : 사이드 이펙트가 없음. (프로그램의 상태 변경X)
  2. 순수 이펙트 : 사이드 이펙트만 일으키는 함수. (프로그램의 상태만 변경함)
  3. 사이드 이펙트가 있는 함수 : 값을 리턴하기도하고 프로그램의 상태도 바꾸는 함수.

3번 사이드 이펙트가 있는 함수는 피하는게 좋다. 프로그램의 상태를 변경해야 한다면 순수 이펙트 함수를 사용해서 바꾸고 값을 리턴하는 함수가 필요하다면 순수 함수만 사용하는것이 좋다.

그래야, 프로그램의 가독성도 높아지고 테스트하기도 좋아진다.

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함