[Kotlin] ๋ฒ์ฉ ํจ์: with, let, apply, run, also
์ด ํจ์๋ค์ ์ ๋ถ ๊ฐ์ฒด์ ๋๋ค๋ฅผ ๋ฐ์ ๋ฌธ๋ฒ์ ํ์ฅํ๋ ๋๋์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํธ๋ฆฌํ ๋ ์๋ค์ด๋ค.
with ํจ์
์ด๊ฑด ๊ฐ์ฒด๋ฅผ ๋ฐ์, ํด๋น ๊ฐ์ฒด์ ๋ฉค๋ฒ๋ฅผ ์ค์ฝํ ์ง์ ์์ด ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฐ ์ฝ๋์

with์ ์ฌ์ฉํ๋ค๋ฉด

์ ๋ฒ์์ง์ obj. ๋ฅผ ์๋ตํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ฒ๋ ๊ฒฐ๊ตญ ๊ทธ๋ฅ ํจ์๋ผ์, ์๋ต์ ํ๋ฉด ๊ทธ๋ฅ ํจ์์ฒ๋ผ ๋ณด์ธ๋ค.

์ด๊ฒ ์ํ์ด๋ค.
with(๊ฐ์ฒด, ํจ์)
๊ทธ๋ฆฌ๊ณ , ๋ง์ง๋ง ํํ์์ ๊ฐ์ ๋ฐํํ๋ค.
์๋์ ํจ์๋ค๋ ๊ฐ์ ๊ธฐ๋ณธ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋, ์คํ์ผ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๋ค.
also ํจ์
์ด๊ฑด ์ฒซ๋ฒ์งธ ์ธ์ ๊ฐ์ฒด์ ํ์ฅํจ์ ํํ๋ก ํธ์ถํ๋ค.
๊ฐ์ฒด๋ก obj๋ฅผ ๋๊ธด๋ค๋ฉด obj.also{ ... }๋ก ํํํ๋ค๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด๋ฅผ ์์์ ์ผ๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ it์ผ๋ก๋ง ์ ๊ทผํ๋ฉฐ, ์ต์ข
์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ฐํํ๋ค.
๋ง์ฝ ๊ตฌ๋ฌธ ๋ด์์ it์ผ๋ก ๋ณ๊ฒฝ์ ๊ฐํ๋ค๋ฉด ๊ทธ๊ฒ๋ ํจ๊ป ์ ์ฉํด์ ๋ฐํํ๋ค...


apply ํจ์
์ด๊ฒ๋ also์ ๊ฐ์ด ํ์ฅํจ์์ฒ๋ผ ๋์ํ๋ค.
๋ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ๋ ๋์ผํ๋ฐ,
with์ฒ๋ผ ์ด๋ฆ์ด ๋ฒ๊ฒจ์ง๋ค๋๊ฑด ๋ ๋ค๋ฅด๋ค. ๊ฒ๋ค๊ฐ ๋ฒ์๋ ํ์ ๋ผ์๋ค. ํจ์๋ ํธ์ถํ์ง ๋ชปํ๊ณ , ํ๋กํผํฐ๋ง ์ด๋ฆ์ ๋ฒ๊ฒจ์ ํธ์ถํ ์ ์๋ค.
๊ทธ๋์ ๋ณดํต ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ ๋ค์ ์ด๊ธฐํํ ๋ ์ข
์ข
์ฌ์ฉํ๋ค.


let ํจ์
์ด๊ฒ๋ ์ฒซ๋ฒ์งธ ์ธ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋, ํด๋น ๊ฐ์ฒด์ ํ์ฅํจ์์ฒ๋ผ ๋์ํ๋ค.
์ ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ ๊ทธ๋ฐ๊ฑด ์๋ค. ๋ง์ง๋ง ํํ์์ด ๋ฐํ๊ฐ์ด ๋๋ค.
๊ทธ๋ฅ ๊ฐ์ฒด๋ฅผ it์ผ๋ก ์ ๊ทผํ ์ ์๋ ๋ธ๋ญ์ ํ๋ ๋ง๋ค ๋ฟ์ด๋ค.

์ฌ์ค ์ด๊ฒ๋ง์ด๋ฉด ์ด๊ฑธ ์ด๋ฐ์ฐ๋ ์ถ์๋ฐ
?.์ ํจ๊ป null ์ ํจ์ฑ์ด ๊ฒ์ฆ๋ ๊ฒฝ์ฐ์ ๊ตฌ๋ฌธ์ ๋ง๋ค๋ ์์ฃผ ์ข๋ค.


run ํจ์
์ด๊ฒ๋ ์ฒซ๋ฒ์งธ ๊ฐ์ฒด์ ํ์ฅํจ์์ฒ๋ผ ๋์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด์ ์ด๋ฆ์ ๋ฒ๊ฒจ๋ด๊ณ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค๋ ์ง ํ๋ ๊ทธ๋ฐ ์ง์ ์ํ๋ค. ์ด๊ฒ๋ ๋ง์ง๋ง ํํ์์ ๊ฐ์ ๋ฐํํ๋ค.


๊ทธ๋ ๋ค.
์ฐธ์กฐ
https://medium.com/@limgyumin/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%9D%98-apply-with-let-also-run-%EC%9D%80-%EC%96%B8%EC%A0%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-4a517292df29
https://www.androidhuman.com/lecture/kotlin/2016/07/06/kotlin_let_apply_run_with/