var count = 0
1. 성능 : 실행 시점에 어떤 메소드를 호출 할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠름
2. 신뢰성 : 컴파일러가 정확성을 검증하기 떄문에 프로그램 오류로 중단될 가능성이 적어짐
3. 유지 보수성 : 객체가 어떤 타입인지 알 수 있기 때문에 코드 다룰 때도 쉬워짐
4. 도구 지원 : 도구(IDE,Web)를 통해 정확한 코드 완성을 제공해줘 더 안전하게 리팩토링이 가능하다.
일급객체 함수: 함수를 일반 값처럼 다룰 수 있다.
일급객체 함수 조건 :
1.함수를 변수에 저장할 수 있음.
2.함수를 인자로 다른 함수에 전달 할 수 있어야함
3.함수에서 새로운 함수를 만들어서 변환 가능.
불변성 : 함수가 만들어지면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
부수 효과 없음 : 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않고, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 이용 한다.
함수형 프로그래밍의 장점 :
1. 간결성 : 함수를 값처럼 활용할 수 있으며 더 강력한 추상화를 할 수 있고 이를 사용 해 코드 중복을 막을 수 있다.
2. 다중 스레드를 사용해도 안전하다 : 불변 데이터 구조를 사용하고 순수 함수를 데이터 구조에 적용한다면 같은 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경 할 수 없음. 따라서 복잡한 동기화를 적용하지 않아도 된다.
3. 테스트 용이 : 부가적인 함수 없이 순수함수로 독립적으로 테스트가 가능하다.
-순수 함수 예시-
fun findAlice() = findPerson{it.name =="Alice"}
fun findBob() = findPerson{it.name =="Bob"}