일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 완전탐색
- 백준
- Android
- 백준 퇴사
- 조합
- 오르막수
- 최단경로
- imeOptions
- 순열
- java
- val
- EditorInfo
- Kotlin
- 백준 14501
- 스카이라인 쉬운거
- Parcelize
- dfs
- hilt
- 프로그래머스
- 2501
- BFS
- Parcelable
- 지능형 기차2
- 약수 구하기
- BuildConfig
- 순수함수
- EditText
- 자바
- 시뮬레이션
- SWEA
- Today
- Total
안드 공부를 해볼까?
[Kotlin] 순수함수 본문
1. 개요
코틀린을 공부하며 순수함수라는 개념이 나왔습니다.
지난 프로젝트에서도 순수함수를 사용해 코드 중복을 방지하라고 팀원이 말했는데 이번기회에 공부할려고 합니다.
(본 게시글은 코틀린 인 액션을 기반으로 작성하였습니다.)
2. 본문
1. 순수함수란 무엇일까?
순수함수는 함수형 프로그래밍의 핵심개념 중 하나에 사용됩니다.
- 일급 시민인 함수: 함수를 일반 변수처럼 사용할 수 있습니다.
- 불변성: 일단 만들면 내부 상태가 절대로 바뀌지 않습니다.
- 부수 효과 없음: 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않습니다.
우리는 부수 효과 없음을 위해 순수함수를 사용합니다.
즉, 순수함수는 어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 return 하는 함수입니다.
2. 순수함수 구분하기
fun main(){
val sum1 = sum(10,3)
val sum2 = sum(3, 20)
print(sum(sum1,sum2))
}
fun sum(a : Int, b: Int) = a + b
sum 함수를 한번 보겠습니다. 단순히 인자 2개를 더하고 return 해줍니다.
이런 함수가 외부의 값을 변하게 하나요? 단순히 인자를 받은 2개를 더해줍니다.
이런 함수를 순수함수라고 합니다.
fun main(){
val sum1 = sum(10,3)
val sum2 = sum(10, 2)
c = 1
print(sum(sum1, sum2))
}
var c = 2
fun sum(a : Int, b: Int) = a + b + c
반면에 바뀐 sum 함수는 c라는 변수의 값이 변하면 return값도 달라지게 됩니다.
이런 함수는 순수함수가 아닙니다.(하지만 c가 상수라면 순수함수입니다.)
fun main(){
val sum1 = sum(10,3)
val sum2 = sum(10, 2)
c = 1
print(sum(sum1, sum2))
}
var c = 2
fun sum(a : Int, b: Int) : Int{
c = a
return a + b + c
}
이번 함수 또한 순수함수가 아닙니다. c라는 외부 요인이 변경되기 때문입니다.
data class Person(
val name: String,
var age: Int? = null
)
fun sumAge(a: Person, b: Person) = a.age?.plus(b.age ?: 0)
fun main() {
val person1 = Person("hong", 20)
val person2 = Person("Ryu", 25)
print(sumAge(person1, person2))
}
이 함수는 순수함수입니다.
객체를 참조할뿐 값을 변경하지 않습니다.
이런 순수함수를 사용하면 강력한 추상화를 할 수 있고 코드 중복을 막을 수 있습니다.
물론 꼭 순수함수를 사용하라는건 아니지만 재사용성을 위해 순수함수는 함수형 프로그래밍에서 지향하고 있습니다.
3. 결론
정리하자면 순수함수는 외부 요인을 변경하지 않고 어떤 인자가 들어와도 같은 값을 return 함수입니다.
이는 함수형 프로그래밍의 핵심 개념 중 하나며 사용시, 강력한 추상화 기능을 제공하고 재사용성이 올라갑니다.
※참조
https://jeong-pro.tistory.com/23
'문법 > Kotlin' 카테고리의 다른 글
[Kotlin] 클래스와 프로퍼티 (0) | 2022.12.21 |
---|---|
[Kotlin] 코틀린 함수와 변수 (0) | 2022.12.16 |
[확장함수] 코틀린 확장함수와 확장 프로퍼티 (0) | 2022.09.27 |
[확장함수] 코틀린 함수로 호출하기 쉽게 만들기 (0) | 2022.09.27 |
[Kotlin] 코틀린에서 컬렉션 만들기 (0) | 2022.09.27 |