์ค๋ธ์ ํธ
- ์์ฑ์ ์์ด ์ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
- ์ค๋ธ์ ํธ ๊ทธ ์์ฒด๊ฐ ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ค. ๊ทธ๋์ ์์ฑ์๊ฐ ํ์ ์๋ค.
- ํด๋์ค๋ ๋ด๋ถ์ ์๋ ์์ฑ์ด๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์ฑ์๋ฅผ ํตํด ์ค์ฒด๊ฐ ๋๋ ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผํ๋ค.
- ํ์ง๋ง ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค ๊ฐ์ฒด๊ฐ ํ์ํ์ง ์๊ณ ํ๋์ ๊ฐ์ฒด๋ง์ผ๋ก ๊ณตํต์ ์ธ ์์ฑ๊ณผ ํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ฝ๋์์๋ ํด๋์ค๋ฅผ ์ธ ํ์ ์์ด ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์ฑ๊ธํค ํจํด์ ์ธ์ด์ฐจ์์์ ์ง์ํ๋๊ฒ์ด๋ค.
- ์ฑ๊ธํค ํจํด : ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋จ ํ๋๋ง ๋ง๋ค์ด ์ฌ์ฉํ๋๋ก ํ๋ ๋์์ธ ํจํด
์ค๋ธ์ ํธ ์์
- ์๋ฌด๊ณณ์๋ ํธ์ถํ์ฌ ํธ์ถํ ํ์๋ฅผ ์ธ๊ฑฐ๋ ์ด๊ธฐํ ํ ์ ์๋ Counter๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด์.
- ์ค๋ธ์ ํธ๋ ๋ณ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ธ์ ํธ ์ด๋ฆ์ ์ง์ ์ฐธ์กฐ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
fun main(){
println(Counter.count)
Counter.countUp()
Counter.countUp()
println(Counter.count)
Counter.clear()
println(Counter.count)
}
object Counter{
var count = 0
fun countUp(){
count++
}
fun clear(){
count = 0
}
}
์ถ๋ ฅ
0
2
0
- ์ค๋ธ์ ํธ๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ๋งจ์ฒ์ ์ฌ์ฉํ ๋๋ถํฐ ์๋์ผ๋ก ์์ฑ๋๋ค.
- ์ดํ์๋ ์ฝ๋ ์ ์ฒด์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ๋ด์ฉ๋ค์ ๋ฌถ์ด ๋ง๋๋๊ฒ์ด ์ข๋ค.
์ปดํจ๋์ธ ์ค๋ธ์ ํธ(Companion Object)
- ํด๋์ค ์์์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
- ํด๋์ค์ ์ธ์คํด์ค ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ , ์ธ์คํด์ค๊ฐ์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ ์์ฑ๊ณผ ํจ์๋ฅผ ๋ณ๋๋ก ๋ง๋ ๋ค.
- ์คํํฑ(Static) ๋ฉค๋ฒ๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- Static ๋ฉค๋ฒ : ํด๋์ค ๋ด๋ถ์์ ๋ณ๋์ ์์ญ์ ๊ณ ์ ์ ์ผ๋ก ์กด์ฌํ๋ค. ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ๊ณต์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์์ฑ์ด๋ ํจ์๋ค.
- ์คํํฑ(Static) ๋ฉค๋ฒ๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ปดํจ๋์ธ ์ค๋ธ์ ํธ ์์
๋ญ๋ฐ๊ณผ ๊ณฐ์ฅ์ด ์ค ์ด๋๊ฒ์ด ์ข์์ง ์ ํํ๋ ์ค๋ฌธ์กฐ์ฌ๋ฅผ ํด๋ณด์. ๊ฐ๊ฐ์ ํฌํ์์ ์ด ํฌํ์๊ฐ ๋์์ ์ง๊ณ๋๋๋ก ํ ๊ฒ์ด๋ค.
fun main(){
var chicken_feet = FoodPoll("๋ญ๋ฐ") // ๋ญ๋ฐ ์ธ์คํด์ค ์์ฑ
var hagfish = FoodPoll("๊ณฐ์ฅ์ด") // ๊ณฐ์ฅ์ด ์ธ์คํด์ค ์์ฑ
chicken_feet.vote()
chicken_feet.vote()
chicken_feet.vote()
hagfish.vote()
hagfish.vote()
chicken_feet.vote()
println("${chicken_feet.name} : ${chicken_feet.count}")
println("${hagfish.name} : ${hagfish.count}")
println("์ด๊ณ : ${FoodPoll.total}")
}
class FoodPoll(val name : String){
companion object{
var total = 0 // ์ด ํฌํ์
}
var count = 0 // ๊ฐ๋ณ ํฌํ์
fun vote(){
count++
total++
}
}
์ถ๋ ฅ
๋ญ๋ฐ : 4
๊ณฐ์ฅ์ด : 2
์ด๊ณ : 6
๋ญ๋ฐ๊ณผ ๊ณฐ์ฅ์ด๋ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค ์์๋ ์ปดํจ๋์ธ ์ค๋ธ์ ํธ์ ์๋ total์ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ญ๋ฐ๊ณผ ๊ณฐ์ฅ์ด ๋์ ์ธ์คํด์ค์์ ๋์์ ํฌํ์๋ฅผ ๋์ ํ ์ ์๋ค.
์ต์ ๋ฒ ํจํด
- ์ต์ ๋ฒ๋ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๋ ๊ฒ์ ๊ฐ์ํ๋ ์ญํ ์ ํ๋ค.
- ์๋๋ก์ด๋์์์ ์ด๋ฒคํธ๋ ํจ์๋ก ์ง์ ์์ฒญํ์ง ์์์ง๋ง ์์คํ
์ ์ํด์ ๋ฐ์ํ๊ฒ ๋๋ ๋์๋ค์ด๋ค.
- ex ) ํค ์ ๋ ฅ, ํฐ์น ๋ฐ์, ๋ฐ์ดํฐ ์์
- ์ด ์ด๋ฒคํธ๋ค์ด ๋ฐ์ํ ๋๋ง๋ค ์ฆ๊ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ง๋๋ ํ๋ก๊ทธ๋๋ฐ ํจํด๋ค์ ์ต์ ๋ฒ ํจํด์ด๋ผ๊ณ ํ๋ค.
์ต์ ๋ฒ ๋์ ๋ฐฉ์
- ์ต์ ๋ฒ ํจํด์ ๊ตฌํํ ๋๋ ๋๊ฐ์ ํด๋์ค๊ฐ ํ์ํ๋ค.
- ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ํด๋์ค
- ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์ ๋ฌํด์ฃผ๋ ํด๋์ค
- ๋ ํด๋์ค ์ฌ์ด์๋ ์ธํฐํ์ด์ค๊ฐ ์์ด์ผํ๋ค.
- ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์ ๋ฌํด์ฃผ๋ ํด๋์ค์์๋ ์์ ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ๊ณต๊ฐํ๊ณ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ํด๋์ค๋ ์ด๋ฅผ ๊ตฌํํ์ฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผ ์ ๋ฌํด์ฃผ๋ ํด๋์ค์๊ฒ ๋๊ฒจ์ค๋ค.
- ์ด๋ฌ๋ฉด ์ธํฐํ์ด์ค๋ง ์์๋ ์ด๋ฒคํธ๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.
- ์ด ๋ ์ด ์ธํฐํ์ด์ค๋ฅผ '์ต์ ๋ฒ' ๋๋ ์ฝํ๋ฆฐ์์๋ '๋ฆฌ์ค๋' ๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ด๋ ๊ฒ ์ด๋ฒคํธ๋ฅผ ๋๊ฒจ์ฃผ๋ ํ์๋ฅผ '์ฝ๋ฐฑ' ์ด๋ผ๊ณ ํ๋ค.
์ต์ ๋ฒ ํจํด ์์ 1
- ์ด๋ฒคํธ๋ฅผ ์์ ํด์ ์ถ๋ ฅํ๋EventPrinter ํด๋์ค์
- ์ซ์๋ฅผ ์ธ๋ฉฐ 5์ ๋ฐฐ์๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ Counter ํด๋์ค์
- ์ด ๋ ํด๋์ค๋ฅผ ์ฐ๊ฒฐ์ํฌ ์ธํฐํ์ด์ค์ธ EventListener์ ๊ตฌํํ ๊ฒ์ด๋ค.
fun main(){
EventPrinter().start()
}
// ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ซ์๋ฅผ ๋ฐํํ๋ค.
interface EventListener{
fun onEvent(count: Int) // ์ถ์ํจ์
}
// ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ Counter ํด๋์ค
class Counter(var listener: EventListener){ // ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด ์์ฑ์์์ EventListener๋ฅผ ์์ฑ์ผ๋ก ๋ฐ๋๋ค.
fun count(){
for(i in 1..100){
if(i % 5 == 0)
listener.onEvent(i) // 5์ ๋ฐฐ์๊ฐ ๋ ๋๋ง๋ค EventListner์ onEvent() ํธ์ถ
}
}
}
// ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅํ EventPrinter ํด๋์ค
class EventPrinter: EventListener{ // EventListener์ ์์๋ฐ๋๋ค
override fun onEvent(count: Int) { // onEvent ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๋ฐ์์จ ์ซ์์ ๋์๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
print("${count}-")
}
fun start(){
// Counter์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ thisํค์๋๋ก EventListener ๊ตฌํ๋ถ๋ฅผ ๋๊ฒจ์ค๋ค.
// this๋ EventPrinter ๊ฐ์ฒด ์์ ์ ๋ํ๋ด์ง๋ง ๋ฐ๋ ์ชฝ์์ EventListener๋ง ์๊ตฌํ๊ธฐ ๋๋ฌธ์ EventListener ๊ตฌํ๋ถ๋ง ๋๊ฒจ์ค๋ค.
// ์ด๋ฅผ ๊ฐ์ฒด์งํฅ์ ๋คํ์ฑ ์ด๋ผ๊ณ ํ๋ค.
// ์์๋ฐ์ ๋ง๋ ํด๋์ค๋ ์ํผ ํด๋์ค์ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ์ ์๋์์ผ๋ฏ๋ก ์ํผํด๋์ค์์ ์ ์ํ ๋ถ๋ถ๋ง ๋ฐ๋ก ๋๊ฒจ์ค ์ ์๋ค.
var counter = Counter(this)
counter.count()
}
}
์ถ๋ ฅ
5-10-15-20-25-30-35-40-45-50-55-60-65-70-75-80-85-90-95-100-
Counter๊ฐ 5์ ๋ฐฐ์๋ง๋ค ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ ๊ฒ์ EventPrinter ๋ด์์ ๊ตฌํ๋ EventListener์์ ์ถ๋ ฅํ๊ณ ์๋ค.
์ต์ ๋ฒ ํจํด ์์ 2
- EventPrinter๊ฐ EventListener๋ฅผ ์์๋ฐ์ ๊ตฌํํ์ง ์๊ณ ์์๋ก ๋ง๋ ๋ณ๋์ EventListener ๊ฐ์ฒด๋ฅผ ๋์ ๋๊ฒจ์ค ์ ๋ ์๋ค.
- ์ด๊ฒ์ ์ด๋ฆ ์๋ ๊ฐ์ฒด๋ผ๊ณ ํ์ฌ '์ต๋ช ๊ฐ์ฒด' ๋ผ๊ณ ํ๋ค.
- ์ด๋ฒ์๋ EventListener๋ฅผ ์์๋ฐ์ง ์๊ณ ๋ฐ๋ก startํจ์๋ฅผ ๋ง๋ค์ด ๋ณด์.
- Counter ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ํ๋ผ๋ฏธํฐ์ ์ต๋ช
๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋๊ธธ๊ฑด๋ฐ ์ฌ๊ธฐ์ object ํค์๋๊ฐ ์ฌ์ฉ๋๋ค.
- object๋ผ๊ณ ์ฐ๊ณ ์ด๋ฆ์์ด ๋ฐ๋ก ์ฝ๋ก ์ ์ด ํ EventListener๋ฅผ ์์๋ฐ๋๋ก ํ๊ณ ์ค๊ดํธ๋ฅผ ์น ํ onEventํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ๋ฉด ๋๋ค.
- ์ด๋ ๊ฒ ๋ง๋ค๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์ฝ๋ ์ค๊ฐ์๋ ์ฆ์ ์์ฑํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
fun main(){
EventPrinter().start()
}
// ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์ซ์๋ฅผ ๋ฐํํ๋ค.
interface EventListener{
fun onEvent(count: Int) // ์ถ์ํจ์
}
// ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ Counter ํด๋์ค
class Counter(var listener: EventListener){ // ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด ์์ฑ์์์ EventListener๋ฅผ ์์ฑ์ผ๋ก ๋ฐ๋๋ค.
fun count(){
for(i in 1..100){
if(i % 5 == 0)
listener.onEvent(i) // 5์ ๋ฐฐ์๊ฐ ๋ ๋๋ง๋ค EventListner์ onEvent() ํธ์ถ
}
}
}
class EventPrinter{
fun start(){
val counter = Counter(object:EventListener{
override fun onEvent(count: Int) {
print("${count}-")
}
})
counter.count()
}
}
์ถ๋ ฅ
5-10-15-20-25-30-35-40-45-50-55-60-65-70-75-80-85-90-95-100-
๐ก์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ธ๊ฐ์ง๋ค. ์์ฑ์ ์์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ, ํด๋์ค ์์์์ ์ปดํจ๋์ธ ์ค๋ธ์ ํธ, ์ต์ ๋ฒ ํจํด์์์ ์ต๋ช ๊ฐ์ฒด
๐ก์ต์ ๋ฒ ํจํด์ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๋ชจ๋ ์ฝ๋์์ ๊ด๋ฒ์ํ๊ฒ ์ฐ์ธ๋ค.
'์๋๋ก์ด๋๐ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฝํ๋ฆฐ] ์ ๋๋ฆญ (0) | 2024.07.02 |
---|---|
[์ฝํ๋ฆฐ] ํด๋์ค ๋คํ์ฑ (0) | 2024.07.02 |
[์ฝํ๋ฆฐ] ์ค์ฝํ ํจ์ (0) | 2024.06.27 |
[์ฝํ๋ฆฐ] ๊ณ ์ฐจํจ์ & ๋๋คํจ์ (0) | 2024.06.26 |
[์ฝํ๋ฆฐ] ์ค์ฝํ & ์ ๊ทผ์ ํ์ (0) | 2024.06.26 |