함수형 프로그래밍

  1. 변경 가능한 상태를 Immutab으로 만들어 side effect 최소화가 가능하다.
  2. 동시성 작업을 안전하게 구현할수 있다.

함수형 프로그래밍 - > thread safe

함수를 일반 값처럼 다룰수 있따. 함수를 변수에 저장하고 함수를 인자로 다른 함수에 전달할수 있으며, 함수에서 새로운 함수를 만들어 반환할수 있따

##불변성
내부상태가 적대로 바뀌지 않는 불변객체를 사용에 프로그램을 작성한다

function plus(a,b){
return a+b;
}

plus(1,2) = 3
plus(1,2) = 3

매번 같은 값을 넣어도 같은 결과가 리턴 - > 참조 무결성 또는 순수성

메소드 vs 함수(function)

메소드

- 특정 컨텍스트에 같혀서
- 자기 상태값이 복사되어 수정

함수

- 좀더 포괄적
- 함수 단위로 잘게 쪼개서 조합(심지어 if,else도 함수로)
- 넘어온 객체를 복사함 -> 즉 객체를 참조하는 값이 바뀌기 때문에 데이터의 무결성이 보장

Kotlin 변수

변경 가능한 변수와 별견 불가능한 변수

val (value)

  • 변경이 불가능한 immutable 참조를 저장한 변수. 자바로 말하자면 final

var (variable)

  • 변경 가능한 참조. 자바의 일반변수

val 변수는 블록을 실행할때 정확히 한번만 초기화 해야 한다.

ex)

1
2
3
4
5
6
7
val mag : String
if(check()){
meg = "Succes"

}else{
msg ="Failed"
}

val참조 자체는 불변일지라도 그 참조가 가리키는 객체의 내부 값은 변경 될수 있다!

1
2
ex) val languages = arrayListOf("Eng")
languages.add("Korean")

var 키워드를 사용하면 변수의 값을 변경할수 잇지만 변수의 타입은 고정돼 바뀌지 않는다.

1
2
var answer =42
answer ="no answer"

위와같은 코드는 컴파일할수 없다.

코틀린은 컴파일시 타입추론을 한다. 자바와 마찬가지로 코틀린도 정적 타입 지정 언어(모든 프로그램 구성 요소의 타입을 컴파일 시점에 알수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할때 마다 컴파일러가 타입을 검증)