μ½”ν‹€λ¦°

findViewById & 데이터 λ°”μΈλ”©μ—¬νƒœκΉŒμ§€ findViewById 둜 xml νŒŒμΌμ— μžˆλŠ” μš”μ†Œλ“€μ„ μ½”ν‹€λ¦° νŒŒμΌμ— 가져와 ν•΄λ‹Ή μš”μ†Œλ₯Ό μ œμ–΄ν•΄ μ™”μ—ˆμ§€λ§Œλ°μ΄ν„° 바인딩을 μ΄μš©ν•˜μ—¬ xml 파일의 μš”μ†Œλ“€μ„ κ°€μ Έμ˜¨λ‹€λ©΄ μ½”ν‹€λ¦° νŒŒμΌμ—μ„œ 더 직관적이고 가독성 μ’‹κ²Œ μ½”λ“œλ₯Ό 짜며 μ œμ•„ν•  수 μžˆλ‹€.λͺ‡λͺ‡κ°œμ˜ μš”μ†Œλ“€μ„ κ°€μ Έμ˜¬λ•Œ findViewById둜 가져와도 상관 μ—†μ–΄ λ³΄μ΄μ§€λ§Œ, μš”μ†Œλ“€μ΄ λŠ˜μ–΄λ‚ μˆ˜λ‘ κ΄€λ¦¬ν•˜κΈ° κΉŒλ‹€λ‘­κ³  μ½”λ“œμ˜ 가독성도 많이 λ–¨μ–΄μ§ˆκ²ƒμ΄λ‹€.findViewByIdλ₯Ό λŒ€μ²΄ν•˜λŠ” 기술이라고 μƒκ°ν•˜λ©΄ λœλ‹€. λ°μ΄ν„° 바인딩 μ‚¬μš© 방법1. build.gradle(Module: ...) 파일둜 μ΄λ™ν•œλ‹€. 2. android{}의 맨 λ§ˆμ§€λ§‰μ— dataBinding{enabled = true}λ₯Ό 적고 μƒλ‹¨μ˜ Sync Nowλ₯Ό 눌..
코루틴(coroutine)λΉ„λ™κΈ°λ‘œ μ—¬λŸ¬κ°œμ˜ 루틴을 λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆλ‹€.메인 루틴은 λ”°λ‘œλ‘κ³ , λ³„λ„λ‘œ 진행이 κ°€λŠ₯ν•œ 루틴이닀.κ°œλ°œμžκ°€ μ‹€ν–‰, μ’…λ£Œλ₯Ό λ§ˆμŒλŒ€λ‘œ μ œμ–΄ν•  수 μžˆλ‹€.코루틴을 μ‚¬μš©ν•˜κΈ°μ „ μ΅œμƒλ‹¨μ— "import kotlinx.coroutines.*" 을 μ¨μ€˜μ•Όν•œλ‹€. μ½”λ£¨ν‹΄μ˜ scopeμ œμ–΄λ²”μœ„ 및 μ‹€ν–‰ λ²”μœ„λ₯Ό 지정할 수 μžˆλ‹€.GlobalScope와 CoroutineScope둜 λ‚˜λ‰œλ‹€.GlobalScopeν”„λ‘œκ·Έλž¨ μ–΄λ””μ—μ„œλ‚˜ μ œμ–΄μ™€ λ™μž‘μ΄ κ°€λŠ₯ν•œ μ½”λ£¨ν‹΄μ˜ κΈ°λ³Έ λ²”μœ„λ‹€.CoroutineScopeνŠΉμ •ν•œ λͺ©μ μ˜ Dispatcherλ₯Ό μ§€μ •ν•˜μ—¬ μ œμ–΄ 및 λ™μž‘μ΄ κ°€λŠ₯ν•œ μƒˆλ‘œμš΄ μ½”λ£¨ν‹΄μ˜ λ²”μœ„λ‹€.CoroutineScopeλ₯Ό λ§Œλ“€ λ•Œ 적용 κ°€λŠ₯ν•œ DispatcherλŠ” 세가지가 μžˆλ‹€. Dispatchers.Default..
λΉ„νŠΈμ—°μ‚°μ •μˆ˜ν˜• λ³€μˆ˜λ₯Ό 10μ§„λ²•μœΌλ‘œ μ—°μ‚°ν•˜λŠ” λŒ€μ‹  2μ§„λ²•μœΌλ‘œ κ³„μ‚°ν•œλ‹€.μ‹€λ¬΄μ—μ„œ λΉ„νŠΈμ—°μ‚°μ€ 거의 계산에 μ‚¬μš© ν•˜μ§€ μ•ŠμœΌλ©° μ •μˆ˜ν˜•μ˜ 값을 λΉ„νŠΈλ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ 데이터λ₯Ό μ’€ 더 μž‘μ€ λ‹¨μœ„λ‘œ λ‹΄μ•„ κ²½μ œμ„±μ„ 높이기 μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©λœλ‹€.μ˜ˆμ‹œ32λΉ„νŠΈμ˜ 2μ§„μˆ˜ μ •μˆ˜ν˜• λ³€μˆ˜ μ•ˆμ— 0λ˜λŠ” 1이 32개 λ‹΄κΈΈ 수 μžˆλŠ” λ³€μˆ˜κ°€ μžˆλ‹€.32개의 값을 ν•˜λ‚˜μ˜ μ •λ³΄λ§Œ λ‚˜νƒ€λŠ”λ° μ“°μ§€μ•Šκ³ , μ•žμ— 5λΉ„νŠΈμ™€ 뒀에 27λΉ„νŠΈμ— μ„œλ‘œ λ‹€λ₯Έ 정보λ₯Ό λ‹΄λŠ” 값을 넣을 수 μžˆλ‹€.μ΄λ ‡κ²Œ λ³€μˆ˜ ν•˜λ‚˜μ— μ—¬λŸ¬κ°œμ˜ 값을 λ‹΄μ•„ μ‚¬μš©ν•  수 μžˆλ‹€.λΉ„νŠΈμ—°μ‚°μ„ μ‚¬μš©ν•˜λŠ” λΆ€ν•˜λ„ λ¬΄μ‹œν•  수 μ—†μœΌλ―€λ‘œ 주둜 ν”Œλž˜κ·Έ κ°’(μ—¬λŸ¬κ°œμ˜ μƒνƒœκ°’μ„ 0κ³Ό 1둜 λ‹΄λŠ” 방법)을 μ²˜λ¦¬ν•˜κ±°λ‚˜ λ„€νŠΈμ›Œν¬μ—μ„œ ν”„λ‘œν† μ½œμ˜ 데이터 양을 쀄이기 μœ„ν•΄ 자주 μ‚¬μš©λœλ‹€.2μ§„μˆ˜ μ •μˆ˜ν˜• λ³€μˆ˜λŠ” 쒌츑으둜 갈수둝 μƒμœ„λΉ„νŠΈ, ..
varν•œλ²ˆ μ„ μ–Έν•΄λ‘” λ³€μˆ˜μ˜ 값을 λ°”κΏ€ 수 μžˆλ‹€. valν•œλ²ˆ μ„ μ–Έν•΄λ‘” λ³€μˆ˜μ˜ 값을 λ°”κΏ€ 수 μ—†λ‹€.val은 ν• λ‹Ήλœ 객체λ₯Ό λ°”κΏ€ 수 없을 뿐이지 객체 λ‚΄λΆ€μ˜ 속성을 λ³€κ²½ν•  수 μ—†λŠ”κ²ƒμ€ μ•„λ‹ˆλ‹€. μƒμˆ˜ν•œλ²ˆ μ„ μ–Έν•΄λ‘” λ³€μˆ˜μ˜ κ·Έ 무엇도 λ°”κΏ€ 수 μ—†λ‹€. 컴파일 μ‹œμ μ— κ²°μ •λ˜λŠ” μ ˆλŒ€ λ°”κΏ€ 수 μ—†λŠ” 값이닀.μ„ μ–Έν• λ•Œ valμ•žμ— constλ₯Ό 뢙이면 λœλ‹€.μƒμˆ˜λ‘œ μ„ μ–Έν•  수 μžˆλŠ”κ²ƒμ€ κΈ°λ³Έ μžλ£Œν˜•λ§Œ κ°€λŠ₯ν•˜λ‹€.(Stringμžλ£Œν˜• 포함) λŸ°νƒ€μž„μ— 생성될 수 μžˆλŠ” 일반적인 λ‹€λ₯Έ 클래슀의 객체듀은 담을 수 μ—†λ‹€.μƒμˆ˜λŠ” 클래슀의 μ†μ„±μ΄λ‚˜ μ§€μ—­λ³€μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.λ°˜λ“œμ‹œ companion object에 μ„ μ–Έν•˜μ—¬ 객체의 생성과 상관없이 ν΄λž˜μŠ€μ™€ κ΄€κ³„λœ 고정적인 κ°’μœΌλ‘œλ§Œ μ‚¬μš©ν•˜κ²Œ λœλ‹€.μƒμˆ˜μ˜ 이름을 λ§Œλ“€λ•ŒλŠ” κ΄€λ‘€μ μœΌλ‘œ λŒ€λ¬Έμžμ™€ 언더바λ₯Ό μ‚¬μš©ν•˜..
μ»¬λ ‰μ…˜μ„ λ°˜λ³΅λ¬Έμ„ μ΄μš©ν•˜μ—¬ ν¬ν•¨λœ μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© κΊΌλ‚΄μ„œ μ‚¬μš©ν–ˆλ‹€.ν•˜μ§€λ§Œ 코틀린은 ν•¨μˆ˜ν˜• μ–Έμ–΄μ˜ νŠΉμ§•μ„ 가지고 있기 λ•Œλ¬Έμ— μ’€ 더 νŽΈλ¦¬ν•˜κ²Œ μ»¬λ ‰μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€. μ»¬λ ‰μ…˜ ν•¨μˆ˜list, set, mapκ³Ό 같은 μ»¬λ ‰μ…˜ λ˜λŠ” 배열에 일반 ν•¨μˆ˜ λ˜λŠ” λžŒλ‹€ ν•¨μˆ˜ ν˜•νƒœλ₯Ό μ‚¬μš©ν•˜μ—¬ 반볡문 없이도 μš”μ†Œλ₯Ό μ°Έμ‘°ν•˜μ—¬ μˆœνšŒν•˜κ±°λ‚˜ 쑰건을 κ±Έκ³  ꡬ쑰의 λ³€κ²½κΉŒμ§€ κ°€λŠ₯ν•œ μ—¬λŸ¬κ°€μ§€ ν•¨μˆ˜λ₯Ό μ§€μΉ­ν•œλ‹€. forEachμ»¬λ ‰μ…˜ 객체에 μ‚¬μš©ν•˜λ©΄ μ€‘κ΄„ν˜Έ μ•ˆμ—μ„œ μ»¬λ ‰μ…˜μ— ν¬ν•¨λœ λͺ¨λ“  μš”μ†Œλ₯Ό itμ΄λΌλŠ” λ³€μˆ˜λ‘œ μˆœμ„œλŒ€λ‘œ μ°Έμ‘°ν•  수 μžˆλ‹€.collection.forEach{ println(it)}  filterμ»¬λ ‰μ…˜ 객체에 μ‚¬μš©ν•˜λ©΄ μ€‘κ΄„ν˜Έ μ•ˆμ—μ„œ it에 쑰건을 κ±Έμ–΄ 쑰건에 λ§žλŠ” 객체만 λ‹€μ‹œ μ»¬λ ‰μ…˜μœΌλ‘œ λ§Œλ“€μ–΄ λ°˜ν™˜ν•œλ‹€.collection.forEach..
SetList와 달리 μˆœμ„œκ°€ μ •λ ¬λ˜μ§€ μ•ŠμœΌλ©° 쀑볡이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ΄λ‹€.인덱슀둜 μœ„μΉ˜λ₯Ό μ§€μ •ν•˜μ—¬ 객체λ₯Ό μ°Έμ‘°ν•  수 μ—†μœΌλ©° contains()둜 객체가 setμ•ˆμ— μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” μ‹μœΌλ‘œλ§Œ μ‚¬μš©ν•œλ‹€.Set도 List처럼 MutableSetκ°€ μ‘΄μž¬ν•œλ‹€.객체의 μΆ”κ°€, μ‚­μ œκ°€ κ°€λŠ₯ν•œμ§€ 여뢀에 따라 μ‚¬μš©ν•˜κ²Œ λœλ‹€.μš”μ†Œμ˜ μΆ”κ°€λŠ” add(), μš”μ†Œμ˜ μ‚­μ œλŠ” remove() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. μ˜ˆμ œfun main(){ val a = mutableSetOf("μ—°ν•„", "달λ ₯", "μ§€μš°κ°œ") for(item in a){ println("$item") } a.add("ν˜•κ΄‘νŽœ") println(a) a.remove("달λ ₯") println(a) println(a.con..
Data Class데이터λ₯Ό λ‹€λ£¨λŠ” 데에 μ΅œμ ν™”λœ ν΄λž˜μŠ€μ΄λ‹€.5가지 κΈ°λŠ₯을 λ‚΄λΆ€μ μœΌλ‘œ μžλ™μœΌλ‘œ 생성해쀀닀.equals()λ‚΄μš©μ˜ 동일성을 νŒλ‹¨ν•œλ‹€.hashcode()클래슀의 λ‚΄μš©μ—μ„œ 고유의 ν•΄μ‰¬μ½”λ“œλ₯Ό λ°˜ν™˜ν•΄μ€€λ‹€.객체의 λ‚΄μš©μ—μ„œ κ³ μœ ν•œ μ½”λ“œλ₯Ό μƒμ„±ν•œλ‹€.toString()ν¬ν•¨λœ 속성을 λ³΄κΈ°μ‰½κ²Œ λ‚˜νƒ€λ‚Έλ‹€.copy()객체λ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ˜‘κ°™μ€ λ‚΄μš©μ˜ μƒˆ 객체λ₯Ό λ§Œλ“ λ‹€.copy() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ μƒˆ 객체λ₯Ό 생성할 λ•ŒλŠ” λ˜‘κ°™μ€ λ‚΄μš©μ˜ 객체λ₯Ό 생성할 μˆ˜λ„ μžˆμ§€λ§Œ μƒμ„±μžμ™€ λ˜‘κ°™μ€ ν˜•νƒœμ˜ νŒŒλΌλ―Έν„°λ₯Ό μ£Όμ–΄  일뢀 속성을 λ³€κ²½ν•΄ 쀄 μˆ˜λ„ μžˆλ‹€.아무 νŒŒλΌλ―Έν„°κ°€ μ—†μœΌλ©΄ λ˜‘κ°™μ€ λ‚΄μš©μœΌλ‘œ μƒμ„±ν•œλ‹€.νŒŒλΌλ―Έν„°κ°€ μžˆλ‹€λ©΄ ν•΄λ‹Ή νŒŒλΌλ―Έν„°λ₯Ό κ΅μ²΄ν•˜μ—¬ μƒμ„±ν•œλ‹€.componentX()속성을 μˆœμ„œλŒ€λ‘œ λ°˜ν™˜ν•œλ‹€.component1(), component2..
코틀린이 μ§€μ›ν•˜λŠ” 클래슀 μœ ν˜• 쀑 클래슀 μ•ˆμ— ν΄λž˜μŠ€κ°€ μ€‘μ²©λ˜λŠ” μœ ν˜•μ€ 쀑첩 ν΄λž˜μŠ€μ™€ λ‚΄λΆ€ 클래슀 두가지닀. μ€‘첩 클래슀(Nested Class)ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀의 κΈ°λŠ₯κ³Ό κ°•ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ μžˆλ‹€λŠ” 의미λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν• λ•ŒλŠ” "(μ™ΈλΆ€ν΄λž˜μŠ€ 이름).(μ€‘μ²©ν΄λž˜μŠ€ 이름)" 으둜 μ‚¬μš©ν•œλ‹€.ν˜•νƒœλ§Œ 내뢀에 μ‘΄μž¬ν•  뿐 μ‹€μ§ˆμ μœΌλ‘œλŠ” 외뢀와 쀑첩 클래슀 μ„œλ‘œ λ‚΄μš©μ„ κ³΅μœ ν•  수 μ—†λŠ” λ³„κ°œμ˜ ν΄λž˜μŠ€λ‹€. λ‚΄λΆ€ ν΄λž˜μŠ€μ€‘μ²© 클래슀 λŒ€μ‹  λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.쀑첩 ν΄λž˜μŠ€μ— "inner"λΌλŠ” ν‚€μ›Œλ“œλ₯Ό 뢙이면 λœλ‹€.ν˜Όμžμ„œ 객체λ₯Ό λ§Œλ“€ 수 μ—†κ³  μ™ΈλΆ€ 클래슀의 객체가 μžˆμ–΄μ•Όλ§Œ 생성과 μ‚¬μš©μ΄ κ°€λŠ₯ν•œ ν΄λž˜μŠ€λ‹€.κ·Έλž˜μ„œ μ™ΈλΆ€ 클래슀의 속성과 ν•¨μˆ˜μ˜ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. μ˜ˆμ œfun main(){ Outer..
overloading같은 μŠ€μ½”ν”„ μ•ˆμ—μ„œ 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€ 수 μžˆλŠ” κΈ°λŠ₯이닀.ν•¨μˆ˜ 이름이 같아도 νŒŒλΌλ―Έν„°μ˜ μžλ£Œν˜•μ΄ λ‹€λ₯΄κ±°λ‚˜ νŒŒλΌλ―Έν„°μ˜ κ°―μˆ˜κ°€ λ‹€λ₯΄λ‹€λ©΄ μ„œλ‘œ λ‹€λ₯Έ ν•¨μˆ˜λ‘œ λ™μž‘ν•  수 μžˆλ‹€.fun hello(x: Int)fun hello(x: Int, text: String)fun hello(x: Int, y: Int)ν•˜μ§€λ§Œ νŒŒλΌλ―Έν„°μ˜ μ΄λ¦„λ§Œ λ‹€λ₯΄κ³  μžλ£Œν˜•μ΄ κ°™λ‹€λ©΄ μ˜€λ²„λ‘œλ”©μ„ ν•  수 μ—†λ‹€.fun hello(x: Int, y: Int)fun hello(a: Int, b: Int)  μ˜ˆμ œfun main(){ read(24) read("홍길동")}fun read(x: Int){ println("숫자 $x μž…λ‹ˆλ‹€")}fun read(x: String){ println("문자 $x ..
null μƒνƒœ 확인nullμƒνƒœλ‘œ μ†μ„±μ΄λ‚˜ ν•¨μˆ˜λ₯Ό μ“°λ €κ³  ν•˜λ©΄ null pointer exception이 λ°œμƒν•œλ‹€.null pointer exception : null인 객체λ₯Ό μ°Έμ‘°ν•˜λ©΄ λ°œμƒν•˜λŠ” 였λ₯˜κ·Έλž˜μ„œ nullable λ³€μˆ˜λ₯Ό μ‚¬μš©ν• λ•ŒλŠ” null확인 μ—†μ΄λŠ” μ½”λ“œκ°€ 컴파일 λ˜μ§€ μ•ŠλŠ”λ‹€.var sample: String? = null// if문으둜 nullalbe 확인if(sample != null) println(sample.toUpperCase())null 체크λ₯Ό ν•˜κΈ° μœ„ν•΄ 일일히 if문으둜 쑰건을 ν™•μΈν•˜λŠ” λŒ€μ‹  μ—¬λŸ¬κ°€μ§€ 방법을 μ“Έ 수 μžˆλ‹€.?. (null safe operator)?: (elvis operator)!!. (non-null assertion operator)  ?. (null safe o..
μ œλ„ˆλ¦­μ΄ ν•„μš”ν•œ 이유클래슀 A와 이λ₯Ό 상속받은 클래슀 Bκ°€ μžˆλ‹€.두 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 곡용으둜 μ‚¬μš©ν•˜λŠ” ν•˜λ‚˜μ˜ ν•¨μˆ˜μ— νŒŒλΌλ―Έν„°λ‘œ λ°›μœΌλ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?슈퍼클래슀의 μžλ£Œν˜•μΈ A의 μžλ£Œν˜•μœΌλ‘œ λ°›μœΌλ©΄ BλŠ” μžλ™μœΌλ‘œ A둜 μΊμŠ€νŒ… λœλ‹€. ➑️ 두 클래슀 λͺ¨λ‘ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.ν•˜μ§€λ§Œ μΊμŠ€νŒ… 연산을 κ±°μΉ˜λŠ”κ²ƒμ€ ν”„λ‘œκ·Έλž¨μ˜ 속도λ₯Ό μ €ν•˜μ‹œν‚¨λ‹€. 이λ₯Ό μ œλ„ˆλ¦­μ΄ 보완해 쀄 수 μžˆλ‹€.fun castingExam(var a: A) // Bλ₯Ό 넣어도 A둜 μΊμŠ€νŒ…λœλ‹€.  μ œλ„ˆλ¦­ν΄λž˜μŠ€λ‚˜ ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•˜λŠ” μžλ£Œν˜•μ„ μ™ΈλΆ€μ—μ„œ 지정할 수 μžˆλŠ” κΈ°λŠ₯이닀.ν•¨μˆ˜λ‚˜ 클래슀λ₯Ό μ„ μ–Έν•  λ•Œ 고정적인 μžλ£Œν˜• λŒ€μ‹  μ‹€μ œ μžλ£Œν˜•μœΌλ‘œ λŒ€μ²΄λ˜λŠ” νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„ μ‚¬μš©ν•˜λŠ” 방법이닀.νƒ€μž… νŒŒλΌλ―Έν„°μ— νŠΉμ • μžλ£Œν˜•μ΄ ν• λ‹Ήλ˜λ©΄ μ œλ„ˆλ¦­μ„ μ‚¬μš©ν•˜λŠ” ..
λΉ„μœ λ₯Ό ν†΅ν•œ λ‹€ν˜•μ„±μ˜ κ°œλ…μŒλ£Œμ—λŠ” μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆλ‹€. 콜라, 주슀, 컀피 λ“±..이 쀑 콜라λ₯Ό κ³ λ₯Ό λ•Œ 콜라λ₯Ό 콜라 μžμ²΄λ‘œλ„ λ³Ό 수 μžˆμ§€λ§Œ, μŒλ£ŒλΌλŠ” νŠΉμ„±μœΌλ‘œλ„ λ³Ό 수 μžˆλ„λ‘ λ§Œλ“œλŠ”κ²ƒμ΄ λ‹€ν˜•μ„±μ˜ κ°œλ…μ΄λ‹€. μ½”ν‹€λ¦°μ˜ λ‚΄λΆ€ λ™μž‘μŒλ£ŒλΌλŠ” μŠˆνΌν΄λž˜μŠ€μ™€ 이λ₯Ό μƒμ†λ°›λŠ” μ½œλΌλΌλŠ” μ„œλΈŒ ν΄λž˜μŠ€κ°€ μžˆλ‹€μ½œλΌ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€λ•Œ 슈퍼클래슀의 곡간에 음료의 λ‚΄μš©μ„ λ‹΄λŠ” 객체곡간에 콜라의 λ‚΄μš©μ„ λ‹΄λŠ” μΆ”κ°€ 곡간이 μƒμ„±λœλ‹€.μ΄λ ‡κ²Œ λ§Œλ“€μ–΄μ§„ 콜라의 μΈμŠ€ν„΄μŠ€λŠ” 음료의 곡간을 λ‹΄λŠ” λ³€μˆ˜μ— μ €μž₯ν•˜λ©΄ 음료의 κΈ°λŠ₯만 μ‚¬μš©ν•˜κ²Œ 되고, 콜라의 κΈ°λŠ₯을 λ‹΄λŠ” λ³€μˆ˜μ— μ €μž₯ν•˜λ©΄ 콜라의 κΈ°λŠ₯κΉŒμ§€ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλ‹€.var a: Drink = Cola() // μ—…μΊμŠ€νŒ…. 음료의 κΈ°λŠ₯만 μ‚¬μš©. 콜라의 좔가곡간은 μ‚¬μš© λΆˆκ°€var b: Cola = Cola()..
λ•‘λ•‘πŸ‘©πŸ»‍πŸ’»
'μ½”ν‹€λ¦°' νƒœκ·Έμ˜ κΈ€ λͺ©λ‘