๐ Kotlin9 [TCP Socket ํต์ ] Okio ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ kotlin socket ํต์ io stream ๊ณผ socket ์ ์ด์ฉํ tcp ํต์ ์ java ๋ฅผ ์ฒ์ ๊ณต๋ถํ ๋, ๊ฐ๋จํ๊ฒ ๋ฉํฐ ์ค๋ ๋ ์ฑํ ์ ๋์ ์์ ๋ก ์ดํดํ๋ฉฐ ๋์ด๊ฐ๋ค.. ์ฌ๋งํ ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ฐ์ ํต์ ์ http ๋ก ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ด๋ฅผ ๋ ๊น๊ฒ ํ๋ฉฐ ๊ณต๋ถํ์๋ค. ์ด๋ฒ์ ์ด์งํ ํ์ฌ์์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋งก๊ฒ ๋ ์ฒซ ๊ณผ์ ๋ TCP ์ ๋ฌธ ํต์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ด๋ค. ์์ผ ํต์ ์ ๊ตฌํํ๋๋ฐ, java socket api ๋ฅผ ์ด์ฉํ์ฌ ์์ ๊ตฌํํ ์ ์์ง๋ง, kotlin ์์๋ okio ๋ผ๋ ํต์ ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๊ณ ํด์ ์ด๋ฅผ ํ๋ฒ ์ฌ์ฉํด์ ์ ๋ฌธ ํต์ ์ ์ํ ์์ผ ํด๋ผ์ด์ธํธ ์ด์์ ๊ตฌํํด๋ดค๋ค. ์ ํด๋ณด์ง ์์ socket ํต์ ์ ์ดํดํ๊ณ ๊ตฌํํ๋ฉฐ ์ดํ๊ฐ ๋ง์ด ๊ณ ํต ๋ฐ์๊ณ , ๊ทธ ๊ณผ์ ์์ ์ข ๋ ํธ๋ฆฌํ kotlin okio ๋ผ์ด๋ธ๋ฌ๋ฆฌ.. 2023. 6. 24. [Effective Kotlin] ์์ดํ 49. ํ๋ ์ด์์ ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ์๋ ์ํ์ค๋ฅผ ์ฌ์ฉํ๋ผ ์ฝํ๋ฆฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก Collection ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ค์ํ ํจ์๋ฅผ ์ง์ํ๋ค. ๋ํ์ ์ผ๋ก iterable ์์๋ filter, map ๋ฑ ๋์ผํ ํจ์๋ฅผ ์ง์ํ๋ฉด์, ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์ง์ฐ ์ฐ์ฐ์ ์ํด์๋ ์๋ฐ์ ๊ฐ์ Stream, ์ฝํ๋ฆฐ์์๋ Sequence๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค. ์ ๋ฆฌํด๋ณด์. Iterable๊ณผ Sequence public inline fun Iterable.filter( predicate: (T) -> Boolean ): List { return filterTo(ArrayList(), predicate) } public fun Sequence.filter( predicate: (T) -> Boolean ): Sequence { return FilteringSeque.. 2023. 2. 4. [Effective Kotlin] ์์ดํ 47. ์ธ๋ผ์ธ ํด๋์ค์ ์ฌ์ฉ์ ๊ณ ๋ คํ๋ผ ์ดํํฐ๋ธ ์ฝํ๋ฆฐ์ ๊ฑฐ์ ๋ค ์ฝ์ด ๊ฐ๋ค. ์ดํํฐ๋ธ ์๋ฐ๋ ์ฝํ๋ฆฐ์ด๋ ๋ฐฑ์๋์์ API๋ฅผ ์ค๊ณํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ํน์ ๋ถ์ผ์ ์ฌ์ฉ์ ๊ตญํ๋์ง ์๊ณ , ์ธ์ด ์์ฒด๋ฅผ ์ด๋ค์์ผ๋ก ์์ฑํด์ผ ํ๋์ง๋ฅผ ์๋ ค์ฃผ๋ ์ฑ ์ด๋ค. ๋๋ ์ฝํ๋ฆฐ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์, ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ์ํ ๋ถ๋ถ์ ๋ฐ๋ก ๋์๊ธฐ๊ณ ์ ํน์ ์ ์ฉํ ์์ดํ ๋ค๋ง ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ค. ๋ฐ๋ก ๊ธ๋ก ์ ๋ฆฌํ์ง ์์ ๋๋จธ์ง ์ฑํฐ๋ ์ฝ์ด๊ฐ๋ฉฐ ์ฝํ๋ฆฐ์ ๋ํด ๋ ๊น์ ์ดํด๋ฅผ ํ๋ ค ๋ ธ๋ ฅํ๋ค. Inline ํ์ ์๊ฐ ์ฐธ ๋ง์ด ๋์๋๋ฐ, ๊ฑฐ์ ๊ณ ์ฐจ ํจ์๋ ํ ๋ ๋ฒจ ํจ์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ํ์ตํ๋ค. ์ฑ๋ฅ์ ๋ถ๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์๊ณ ํจ์ ๋ด๋ถ๋ก ํธ์ ๋๊ธฐ์ ์ฐ์ํ๋ฏ๋ก, ์ธ์ ๊น์ ๊ฐ๋ ์ด์๋ค. ํฑ๋ ๋ฒจ ํจ์๋ ๊ณ ์ฐจ ํจ์๋ฅผ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ์ธํ๋ฉด Inli.. 2023. 2. 3. [Effective Kotlin] ์์ดํ 36. ์์๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ผ [์ดํํฐ๋ธ ์๋ฐ] ๋ฅผ ์ฝ์๋ ๊ธฐ์ต์ ๋ ์ฌ๋ ธ์ ๋ '์์๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ผ' ๋ผ๋ ์์ดํ ์ด ์๋นํ ์ธ์ ๊น์๋ค. ํ์ง๋ง ์ปดํฌ์ง์ ์ ์ฉ์ํค๋ฉด์ ๋คํ์ฑ์ ๋ง์กฑ์ํค๋ ค๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์์ผ ํ๋๋ฐ, ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ฏ๋ก ์ฝ๋๊ฐ ์ฐธ ๋๋ฌ์์ง๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ฝํ๋ฆฐ์ ์ด๋ฅผ ๊ธฐ๊ฐ ๋งํ๊ฒ ํด๊ฒฐํ๋ค. ๋ค์ ์์๊ณผ ์ปดํฌ์ง์ ์ ์๋ฅผ ์ดํด๋ณด๊ณ ์ด๋ฅผ ์ฝํ๋ฆฐ์ด ์ด๋ป๊ฒ ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋์ง ์ดํด ๋ณด์. ์์์ ๋ฌธ์ ์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์ฌ ์๋ฐ์ ์์ ์ํผํด๋์ค์ ์ํ, ๋ฉ์๋, ํ์ ๋ฑ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์จ๋ค. ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ผ ๋ ๊ต์ฅํ ์ข์ ๋๊ตฌ ๊ทธ๋ ๊ธฐ์ ์ผ๋ถ๋ถ๋ง์ ์ฌ์ฉํ๊ธฐ์ ๋ถ์ ํฉํ ๋ฐฉ๋ฒ ์ด๋ฅผ ์ํด์ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ค. ์บก์ํ๋ฅผ ๊นจ๋ ์์ ๋ด๋ถ์ ์ธ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ์บก์ํ๊ฐ ๊นจ์ง๋ค. ์ปดํฌ์ง์ ์ํผํด๋.. 2023. 1. 30. [Effective Kotlin] ์์ดํ 32. ์์ฑ์ ๋์ ํฉํ ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ฐ์ฅ ์๋ฏธ ์๊ฒ ์ฝ์ ์ฑ ์ [์ดํํฐ๋ธ ์๋ฐ]์ด๋ค. ์๋ฐ๋ฅผ ๋ง๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์งํํ ์ฑ ์ด๋ฏ๋ก, ์๋ฐ๋ฅผ ์๋ฐ๋ต๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ฃผ ๋ช ํํ๊ฒ ์ค๋ช ๋์ด ์๋ค. ๊ฐ์ฅ ์ฒซ ์ฑํฐ์ธ '์์ฑ์ ๋์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ผ'๋ผ๋ ์์ดํ ์ ๊ต์ฅํ ์๋ฏธ ์๊ฒ ์ฝ๊ฒ ๋์๊ณ , ๊ทธ ๋ด์ฉ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ ์ฉํ์๋ค. ์ฝํ๋ฆฐ๋ ์๋ฐ์ ์ด์ ์ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ ์ธ์ด์ด๋ฏ๋ก, ๋น์ทํ๊ฒ ์ ์ฉ ๋๋ ๋ถ๋ถ์ด ์์์ง๋ฅผ ์๊ฐํด ๋ดค๋ค. ํ์ฌ์ ๋ค์ด๊ฐ์ ์ฝํ๋ฆฐ์ ๋ฐฐ์ฐ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์, ๊ฐ์ฅ ๋์ ๋์๋ ๋ถ๋ถ์ด dto ๊ฐ์ฒด๋ฅผ ๋งคํํ๋ ๋ถ๋ถ์ด์๊ณ , ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋จ๊น๋ผ๋ ์๊ฐ์ ํ๋ค. ์ฝํ๋ฆฐ์ ์ฌ์ฉํ๋ ๋ถ๋ค๊ณผ ๊ตฌ๊ธ๋ง์ ํตํด ์๋ฐ์ ๋์ผํ๊ฒ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ง์ด๋ค ์ฌ์ฉํ๋ค๋ ์ ๋ณด๋ฅผ ์ป์๊ณ , ๊ทธ๋๋ก ์ ์ฉํ์๋ค. ์ดํํฐ๋ธ.. 2023. 1. 29. [Effective kotlin] ์์ดํ 27. ๋ณํ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํ๋ ค๋ฉด ์ถ์ํ๋ฅผ ์ฌ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ฐ์ฒด์งํฅ์ ์ ๋๋ก ๊ณต๋ถํ๊ธฐ ์์ํ๊ณ , ๊ฐ์ฒด์งํฅ์ 4๋ ํน์ฑ ์ค '์ถ์ํ'์ ์ฐธ๋ ์๋ฏธ๋ฅผ ์๊ธฐ๊น์ง ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ๊ฒฐ๋ก ์ ๋ง์ด ๊ณต๋ถํ๊ณ ์๊ฐํ๋ฉฐ ํ์ฅํ๊ณ ์ ์ฉํด ๋ด์ผ ๊ทธ ์๋ฏธ๋ฅผ ๋น๋ก์ ์ดํดํ๋ฆฌ๋ผ ์๊ฐํ๋ค. ์์ const val NAME_PREFIX = "prefix" fun getName() : String = NAME_PREFIX + this.name ๊ฐ์ฅ ๊ฐ๋จํ ์ถ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๋ณธ ์ฝ๋์์ String ๋ฆฌํฐ๋ด ๊ฐ์ ๋ฐ๋ก ๋นผ์ ์์ํ๋ฅผ ์ํค๋ฉด ์ดํด๋ ์ฌ์ธ ๋ฟ ์๋๋ผ. ๋ณ๊ฒฝํ๊ธฐ๋ ํจ์ฌ ์์ํ๋ค. ๋ฆฌํฐ๋ด ๊ฐ์ ์๋ฏธ ์๋ ์ด๋ฆ์ ๋ถ์ผ ์ ์๊ณ , ๋ณ๊ฒฝ์ด ์ฝ๋ค. ํจ์ ํน์ ํ์๋ฅผ ํจ์๋ก ์ ์ธํ๋ฉด, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฝํ๋ฆฐ์์๋ ๊ฐ๋จํ ํ์ฅ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์์ด, ์ถ์.. 2023. 1. 29. [Effective Kotlin] ์์ดํ 24. ์ ๋ค๋ฆญ ํ์ ๊ณผ variance ํ์ ์๋ฅผ ํ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๊ณ ์ ์ฉํ๋ฉด์ ์ถ์ํ๋ฅผ ํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ทน ํ์ฉํ์๊ณ , ๊ฐํ์ ์ธ์ด์๊ธฐ์ ํนํ ํ์ ์ ์ ํ์ฉํ์ด์ผ ํ๋ค. ๊ทธ ๊ณผ์ ์์ ์ ๋ค๋ฆญ์ ๋ค์ ํ๋ฒ ๊ณต๋ถํ๊ฒ ๋์๊ณ , ๊ณต๋ณ, ๋ฐ๊ณต๋ณ ์ฑ ๋ฑ์ ํน์ง์ ์ ๋ค๋ฆญ์ด ์ด๋ป๊ฒ ํ์ด๋๋์ง ๊ณต๋ถํ๋ค. extend, super ๋ฑ์ ํ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ ์ ์ ํ ์ ์ดํ์๋ ๊ธฐ์ต์ด ์๋ค. ์ฝํ๋ฆฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ค๋ฆญ์ ํ์ ์๋ฅผ ์ ๊ณตํ๋ค. ์๋ฐ์ ๊ฒฐํจ์ ๊ฐ์ ํ๋ฉด์ ๋ง์ด์ง. Out ํ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณต๋ณ์ผ๋ก ๋ง๋ ๋ค. class University open class Student class FreshMan : Student() fun main(args: Array) { val b: University = University() // OK val a: Universi.. 2023. 1. 27. [Effective Kotlin] ์์ดํ 23. ํ์ ํ๋ผ๋ฏธํฐ์ ์๋์์ ํผํ๋ผ ์๋์์ด๋ ๋ฌด์์ธ๊ฐ? class Person(val name : String) { fun addPerson(name : String) { // ... } } addPerson() ํจ์์ ํ๋ผ๋ฏธํฐ๊ฐ Person class์ ํ๋กํฐํฐ ์ด๋ฆ๊ณผ ๊ฐ์์ง๋ค. ์ธ๋ถ ์ค์ฝํ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ฆฌ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋์์ด๋ผ ํ๋ค. ์ด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์์์ฐจ๋ฆฌ๊ธฐ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ํ์ ํ๋ผ๋ฏธํฐ์์๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. interface Payment class KakaoPay: Payment class NaverPay: Payment class PaymentHistory { fun addPayment(payment: T) { // ... } } ์ด๋ฌํ ๊ฒฝ์ฐ๋ PaymentHistory์ ์ ๋ค๋ฆญ ํ์ ๊ณผ addPayment()์ ํ์ .. 2023. 1. 25. [๊ฐ์๋ฌธ] Kotlin In Action์ ์ฝ๊ณ ํ์ฌ ์ ์ฌํ ํ์ฌ์์ ๋ฐฑ์๋ ์ธ์ด๋ ์ฝํ๋ฆฐ ๊ธฐ๋ฐ์ด๋ค. ์ฝํ๋ฆฐ์ ๋น ๋ฅด๊ฒ ์ ์ํด์ผ ํ๊ธฐ์, ์ ์ฌ ์ ๋ถํฐ ํํํ ๊ฐ๋ ์ ๊ณต๋ถํ์๋ค. ํ์ง๋ง ๊ตฌ๊ธ๊ณผ ์ ํ๋ธ๋ ์ ๋ณด์ ๋์กํจ๊ณผ ํ๊ณ, ๊ทธ๋ฆฌ๊ณ ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง๋ค. ํ์คํ ์ธ์ด ๋ฐ ๋ฐฑ์๋ ๊ณต๋ถ๋ ์ฑ ์ด ์ง๋ฆฌ๋ผ๋ ๊ฒ์ด ๋ด ์ ๋ก ์ด๋ค..ใ ใ ์ ์ฌ ์ฒซ ๋ ์ฌ์ ๋ถ๊ป ์ฝํ๋ฆฐ ๊ด๋ จ ์์ ์ด ์๋์ง ์ฌ์ญค๋ดค๊ณ , ๊ฐ์ฌํ๊ฒ๋ ํ์พํ [์ฝํ๋ฆฐ ์ธ ์ก์ ] ์ฑ ์ ๋น๋ ค์ฃผ์ จ๋ค. ์ฑ ์ ๋ค๊ณ ํด๊ทผํ๊ณ , ๊ทธ ๋ ๋ฐค๋ถํฐ ๋ฐ๋ก ์ฝ๊ธฐ ์์ํ๋ค. ์ผ์ด ๋ง์ ๋ , ๋๋ฌด ํผ๊ณคํ ๋ ๊ณผ ์ผ์ ์ด ์๋ ๋ ์ ์ ์ธํ ๋ฐค 11์์๋ 1์๊ฐ ๊ผญ ๋ ์๋ฅผ ํ๊ณ ์์๋ ๋ค์ง๊ณผ ํจ๊ป. ์ ์ฝํ์ง ์์ ๊ฒ์ ์ผ๋ คํ์ง๋ง, ๋คํํ ์ด ์ฑ ์ด ์งํฅํ๊ณ ์ ํ๋ ๋ฐ๋ ๊ธฐ์กด ์๋ฐ ๊ฐ๋ฐ์์๊ฒ ์ด์ ์ด ๋ง์ถฐ์ ธ ์๋ ๊ฒ์ด ์ฐธ ์ธ์ ๊น์๋ค. ์ฑ ์ ๊ธฐ์กด ์.. 2023. 1. 17. ์ด์ 1 ๋ค์ ๋ฐ์ํ