์ ๋ค๋ฆญ2 [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. ์ด์ 1 ๋ค์ ๋ฐ์ํ