๐ผ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค์ ๋๋ค ํํ์
์๋ ํ์ธ์ ! ์ค๋์ RxJava๋ฅผ ๊ณต๋ถํ๋ค๊ฐ, ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ๋ lambda์ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค ์ฌ์ฉ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค. RxJava์ ๊ฐ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฑฐ๋, ์ฝํ๋ฆฐ๋ต๊ฒ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด์ , ๋๋ค ์๊ณผ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋, ์ ๊ธฐ์ตํ์ฌ ํจ์จ์ ์ธ ์ฝ๋ฉ์ ํ๋๋ก ํฉ์๋ค ! ๊ทธ๋ผ ์ค๋๋ ํ์ดํ ์ ๋๋ค ๐ฟ
1๏ธโฃ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค
๋ฉค๋ฒ ๋ ํผ๋ฐ์ค ๋ฌธ๋ฒ
- ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๋จ ํ๋๋ง ํธ์ถํ๋ ํจ์ ๊ฐ์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธ์ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ ๊ณต์ ๋ฌธ์์ callable ๋ ํผ๋ฐ์ค๋ผ๋ ์ฉ์ด๋ก ๋์ฒด๋ ์ ์์ผ๋ฉฐ, ๋ฉ์๋ ๋ ํผ๋ฐ์ค, ํ๋กํผํฐ ๋ ํผ๋ฐ์ค ๋ฑ์ ํฌํจํ๊ณ ์์ต๋๋ค.
- ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ ::๋ฅผ ์ฌ์ฉํ๋ ์์ผ๋ก, ::๋ก ํด๋์ค ์ด๋ฆ๊ณผ ๋ฉค๋ฒ๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
- ๋ฉ์๋ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์ ๋ฉ์๋ ์ด๋ฆ ๋ค์ () ๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค.
๋๋ค์ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค
val getAge = {person: Person -> person.age} // ByLambda
val getAge = Person::age // ByMemberReference
์ต์์ ๋ฉค๋ฒ ์ฐธ์กฐ
(๋ค๋ฅธ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ ์๋ ํ์ฌ ํ์ผ) ์ต์์์ ์ ์ธ๋ ํจ์๋ ํ๋กํผํฐ๋ฅผ ๋ฉค๋ฒ์ฐธ์กฐํ ์ ์์ต๋๋ค.
fun salute() = println("Salute!")
>>> run(::Salute) // run(::Salute()) (x)
Salute!
DisplayMessageActivity::class.java ์ด๊ฒ๋ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค ์ธ๊ฐ์ ?
DisplayMessageActivity::class.java ์ ๊ฐ์ ๊ตฌ๋ฌธ์ ๋ถ๋ช ์๋๋ก์ด๋ ๊ฐ๋ฐํ๋ฉด์ ํ ๋ฒ์ฏค์ ๋ง์ฃผ์ณ๋ณด์ จ์๊ฒ๋๋ค. ํด๋น ๊ตฌ๋ฌธ ๋ํ ํน์ ํด๋์ค ์ด๋ฆ๊ณผ :: ์ด ์์ชฝ์ ๊ตฌ๋ถํด์ค๋ค๋ ์ ์์ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๊ฐ ์ธ๊ฐ? ํ๊ณ ๊ถ๊ธํ์ค ์๋ ์์ผ์คํ ๋ฐ์. (์ ๊ฐ ๊ทธ๋ฌ์ต๋๋ค.) ํด๋น ๊ตฌ๋ฌธ์ ํด๋์ค ๋ ํผ๋ฐ์ค๋ฅผ ํ๊ณ ์๋ ๊ตฌ๋ฌธ์ ๋๋ค. (์ฌ์ค ๋ฑ๋ด๋ ์ด๋ค ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ๊ณ ์์ง ์์ฃ ?)
์ด์ ๊ด๋ จํ์ฌ ๋๋ฃ๋ค๋ก๋ถํฐ Reflection์ด๋ผ๋ ํํธ๋ฅผ ์ป๊ธฐ๋ ํ์ต๋๋ค. ๋ฆฌํ๋ ์ ์, ์ด ๊ธ์์ ๋ค๋ฃจ๊ณ ์๋, ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค(๊ณต์ ๋ฌธ์์์ Callable references๏ปฟ๋ผ๊ณ ๋ถ๋ฅด๋๊ตฐ์)๋ฟ๋ง ์๋๋ผ ์์ ์ธ๊ธํ ํด๋์ค ๋ ํผ๋ฐ์ค ๋๊ฐ์ง๋ก ๋ถ๋ฅ๋์ด์์ต๋๋ค. ํ์ฌ๋ ๋๋ค์ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค์ ๋ํด ์์๋ณด๋ ์๊ฐ์ด๋ฏ๋ก, ๋ฆฌํ๋ ์ ์ ๋ํด์ ๋ ๊ณต๋ถํด๋ณด๊ณ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
2๏ธโฃ ๋๋ค ํํ์
๋๋ค ์์ ๋ค๋ฅธ ํจ์์ ๋๊ธธ ์ ์๋ ์์ ์ฝ๋ ์กฐ๊ฐ์ ๋ปํฉ๋๋ค. ์ฝํ๋ฆฐ๋ต๊ฒ ์ฝ๋ฉ์ ํ๋๋ฐ ์์ด์ ๋๋ค ์์ ์ ๊ทน ํ์ฉ๋๊ณค ํฉ๋๋ค. ์ด ๋จ๋ฝ์์ ๋จผ์ ๋๋ค ์์ ๋ฌธ๋ฒ์ ๋ํด ์์๋ณด๊ณ , ํด๋น ๋๋ค ์์ด ์ด๋ป๊ฒ ์ถ์ฝ๋๊ณ ์๋ต๋ ์ ์๋์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋๋ค ์ ๋ฌธ๋ฒ
-
์ฝํ๋ฆฐ ๋๋ค ์์ ์ค๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์์ต๋๋ค.
-
-> ๋ก ํ๋ผ๋ฏธํฐ์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํฉ๋๋ค.
-
๋๋ค๋ ์์ด๋ฏ๋ก, ๋ณ์์ ์ ์ฅํ ์ ์์ต๋๋ค. ๋๋ค ์์ด ์ ์ฅ๋ ๋ณ์๋ ์ผ๋ฐ ํจ์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
val sum = {x: Int, y: Int -> x + y} val answer = sum(1,2)
-
๋๋ค๋ ์ฌ๋ฌ ๋ฌธ๋ฐฉ์ผ๋ก ์ด๋ค์ง ์๋ ์์ต๋๋ค. ๋ณธ๋ฌธ์ด ์ฌ๋ฌ ๋ฌธ์ฅ์ผ ๊ฒฝ์ฐ, ๋ณธ๋ฌธ์ ๋งจ ๋ง์ง๋ง ์์ด ๋๋ค์ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.
-
val sum = {x: Int, y: Int -> println("the answer is ${x+y}") x + y} val answer = sum(1,2)
์ด๋ป๊ฒ ๋ฐ๋ก ๋ฐํ ํ์ ์ ์ ์ง ์์๋ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฐํ๋ ์ ์๋์ ?
์ปดํ์ผ๋ฌ๊ฐ ๋๋ค ์์ ์คํํ๋ฉด์ ํ์ ์ ์ถ๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
๋๋ค ์์ ์ถ์ฝ๊ณผ ์๋ต
-
๊ธฐ๋ณธ ๋๋ค ์์ ๋๋ค.
people.maxBy({ p: Person -> p.age})
-
๋๋ค๊ฐ ๋ง์ง๋ง ์ธ์๋ผ๋ฉด, ๋๋ค๋ฅผ ๊ดํธ ๋ฐ์ผ๋ก ๋บ ์ ์์ต๋๋ค.
people.maxBy() { p: Person -> p.age}
-
ํด๋น ๋๋ค๊ฐ ์ ์ผํ ์ธ์๋ผ๋ฉด, ๋ฌด์๋ฏธํ ( )๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
people.maxBy { p: Person -> p.age}
-
์ปดํ์ผ๋ฌ๊ฐ ๋๋ค ์์ ํ๋ผ๋ฏธํฐ ํ์ ์ ์ถ๋ก ํ ์ ์๋ค๋ฉด, ํ๋ผ๋ฏธํฐ ํ์ ์ ์๋ตํ ์ ์์ต๋๋ค.
people.maxBy({ p -> p.age})
์ปดํ์ผ๋ฌ๊ฐ ๋๋ค ์์ ํ๋ผ๋ฏธํฐ ํ์ ์ ์ถ๋ก ํ ์ ์๋ ๊ฒฝ์ฐ
- ๋๋ค๋ฅผ ๋ณ์์ ์ ์ฅํ๋ ๊ฒฝ์ฐ
-
ํ๋ผ๋ฏธํฐ๊ฐ ํ๋๋ผ๋ฉด, ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ง์ ํ์ง ์๊ณ , ๋ํดํธ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ธ it์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
people.maxBy({ it.age})
์ง๊ธ๊น์ง ์์๋ณธ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค์ ๋๋ค ํํ์์ผ๋ก ๊ฐ์ ๋ด์ฉ์ ํํํ๋ค๋ฉด ?
// ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค (property reference) people.maxBy(Person::age) // ๋๋ค people.maxBy() {person: Person -> person.age} people.maxBy {p -> p.age} people.maxBy {it.age} ,,,
๋ค์ ๋จ๋ฝ์์ ๋ ์ด์ผ๊ธฐํ๊ฒ ์ง๋ง, ๋๋ค๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๋ ์ชฝ๋ณด๋ค, ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ก ์ถ์ฝํ๋ ํํํ๋ ์ชฝ์ด ๋ ๊ฐ๊ฒฐํด๋ณด์ ๋๋ค :>
3๏ธโฃ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค์ ๋๋ค ํํ์ ๊ถ์ฅ ์ฐ์ ์์
RxJava์ ๊ฐ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ฑฐ๋, ์ฝํ๋ฆฐ๋ต๊ฒ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด์ , ๋๋ค ์๊ณผ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํนํ ๋๋ค ์๊ณผ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ฅผ ์ฌ์ฉํ ๋, ์๋์ ๊ฐ๋จํ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ฌ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๋ ์ฑ ์ข์ ์ฝ๋๊ฐ ๋ ์ ์์ต๋๋ค.
- ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค๋ก ์ถ์ฝํ ์ ์๋์ง ํ์ธ
- ๋๋ค ํํ์์ ํ์ฉํ ์ ์๋์ง ํ์ธ
- ์ต๋ช ๊ฐ์ฒด๋ ๋ฉค๋ฒ ๋ณ์๋ก ํํ
#๏ธโฃ Reference
- kotlinlang : Reflection๏ปฟ
- Jemerov, Dmitry: Kotlin in Action
- ์ ๋ํ, ๋ฐ์ ์ค : RxJava ํ๋ก๊ทธ๋๋ฐ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ผ ๋ฉค๋ฒ ๋ ํผ๋ฐ์ค์ ๋๋ค ํํ์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@sery270/๋ฉ์๋-๋ ํผ๋ฐ์ค์-๋๋ค-ํํ์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค