What is functional programming? - 1

What is functional programming? - 1

What is functional programming? - 1

함수형 프로그래밍

프로그램을 오직 순수 함수(pure function) 들로만, 부수효과(side effect) 가 없는 함수들로만 구축한다는 것.

부수효과(side effect) 란 그냥 결과를 돌려주는 것 이외의 어떤 일을 수행하는 함수를 말한다. 아래는 부수효과의 예시들이다.

  • 변수를 수정한다
  • 자료구조를 제자리에서 수정한다
  • 객체의 필드를 설정한다
  • 예외를 던지거나 오류를 내면서 실행을 중단한다
  • 콘솔에 출력하거나 사용자의 입력을 읽어들인다
  • 파일에 기록하거나 파일에서 읽어들인다
  • 화면에 그린다

함수형 프로그래밍은 우리가 프로그램을 작성하는 방식에 대한 제약이지 표현 가능한 프로그램의 종류에 대한 제약은 아니다.

순수 함수들로 프로그램을 작성하면 모듈성(modularity)이 증가하고, 이 덕분에 순수 함수는 테스트, 재사용, 병렬화, 일반화, 분석이 쉽고 버그가 생길 여지가 훨씬 적다.

read more

Programming in Scala summary

CH2

  • val var 차이 var 은 재할당

CH3

  • p78 배열을 생성하는 방법 두가지
      new Array[String](3)
    
      Array("a", "b", "c") 
    
  • Array 에서는 팩토리메소드 apply 호출.
  • 배열을 생성 한 후 해당 배열에 대한 apply, update 메소드는 인스턴스 메소드인듯
  • Array 에 있는 apply, update 메소드
  • 임의의 개수 인자 받기 * 사용
  • List 에서
      val twoThree = List(2, 3)
      val oneTwoThree = 1 :: twoThree
    
    • 일반적으로 a * b 의 경우 a.*(b) 와 같이 왼쪽 피연산자의 메소드를 호출하는 것이다.
    • 하지만 메소드 이름이 콜론(:) 으로 끝나는 경우 연산자 방식으로 사용 시 오른쪽 피연산자에 대한 호출을 한다.
    • 따라서 1 :: twoThree 에서 twoThree 를 호출 대상 객체로 1을 인자로 받는 메소드 호출인 twoThree.::(1) 로 해석한다.
    • 그래서 리스트 끝에는 항상 Nil 이 필요하다.
      • 왜냐하면, 1 :: 2 :: 3 만을 사용해서 리스트를 만들었다면 1 :: (2 :: 3) 의 형태가 되는 것인데,
      • 여기서 :: 연산자(함수)는 오른쪽 피연산자에 대한 호출을 하므로 (2 :: 3) 은 3.::(2) 의 호출 형태를 보인다.
      • 3은 Int 이기 때문에 :: 이라는 함수가 없다.
      • :: 함수를 호출하기 위해서는 리스트 타입이 있어야 하는데, 이를 위해 스칼라에서는 Nil 을 List 클래스의 멤버로 둔 것이다.

        read more