๐Ÿ’ป ๊ฐœ๋ฐœ/Kotlin

[์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๋ณ€์„ฑ

2022. 5. 2. 11:31
๋ชฉ์ฐจ
  1. ๊ฐ€๋ณ€์„ฑ
  2. ๊ฐ€๋ณ€์„ฑ์˜ 3๊ฐ€์ง€ ์œ ํ˜•
  3. ๋ฌด๋ณ€์„ฑ
  4. ๊ณต๋ณ€์„ฑ
  5. ๊ณต๋ณ€์„ฑ์—์„œ ์ž๋ฃŒํ˜• ์ œํ•œํ•˜๊ธฐ

๊ฐ€๋ณ€์„ฑ

๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค? ๊ฐ€๋ณ€์„ฑ์ด ๋ญ์—์š”? ๐Ÿ™„

์ฝ”ํ‹€๋ฆฐ ์—์„œ์˜ ๊ฐ€๋ณ€์„ฑ์€ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํด๋ž˜์Šค ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜•์‹ A์˜ ๊ฐ’์ด ํ•„์š”ํ•œ ๋ชจ๋“  ํด๋ž˜์Šค์— ํ˜•์‹ B์˜ ๊ฐ’์„ ๋„ฃ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด B๋Š” A์˜ ํ•˜์œ„ ํ˜•์‹์ด ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

val integer : Int = 1
val number : Number = integer // Number๋Š” ์ƒ์œ„ ์ž๋ฃŒํ˜•, Int๋Š” ํ•˜์œ„ ์ž๋ฃŒํ˜•

Intํ˜•์œผ๋กœ ์„ ์–ธํ•œ integer ๋ณ€์ˆ˜๊ฐ€ Numberํ˜•์œผ๋กœ ์„ ์–ธํ•œ number ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ด๋„ ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ๊ฐ€๋ณ€์„ฑ์ด๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ๋Š” Int?์™€ Int๊ฐ€ ์žˆ๋‹ค. Int?๋Š” null๋„ ํฌํ•จํ•˜๋ฏ€๋กœ Int?๊ฐ€ Int์˜ ์ƒ์œ„ ์ž๋ฃŒํ˜•์ด ๋œ๋‹ค.

๊ฐ€๋ณ€์„ฑ์˜ 3๊ฐ€์ง€ ์œ ํ˜•

๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๋„ค๋ฆญ์—์„œ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ์ƒ์œ„์™€ ํ•˜์œ„์˜ ๊ฐœ๋…์ด ์—†์–ด์„œ ์„œ๋กœ ๋ฌด๊ด€ํ•˜๋‹ค. ๋งŒ์•ฝ ์ƒ์œ„์™€ ํ•˜์œ„์— ๋”ฐ๋ฅธ ํ˜•์‹์„ ์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ด๋•Œ ๋ณ€์„ฑ ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ์ ์šฉ๋œ๋‹ค. ๊ฐ€๋ณ€์„ฑ์—๋Š” ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๋ณ€์„ฑ 3๊ฐ€์ง€ ์œ ํ˜•์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ฒœ์ฒœํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

๋ณ€์„ฑ, ๋ณ€์„ฑ, ๋ณ€์„ฑ... ๊ฐ‘์ž๊ธฐ ์ง€๊ตฌ๊ณผํ•™ ์ˆ˜์—…์ด ๋œ ๊ฑฐ ๊ฐ™์€๋ฐ์š”? ๐Ÿ˜ฅ

์šฐ์„  Intํ˜•์ด Numberํ˜•์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ธ ๊ฒƒ์€ ๋ช…ํ™•ํ•˜๋‹ค. ์ด ๋•Œ Class Box< Out T >๋กœ ์ •์˜ํ•˜๋ฉด Class Box< Int >๋Š” Class Box< Number >์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด ๋œ๋‹ค. ๊ทธ๋ƒฅ ๊ทธ๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

 

๊ณต๋ณ€์„ฑ์€ ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ƒ, ํ•˜์œ„ ๊ฐœ๋…์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๋А๋‚Œ์ด๋‹ค.

  • ๊ณต๋ณ€์„ฑ - A๊ฐ€ B์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด๋ฉด Class< A >๋Š” Class< B >์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด๋‹ค.
  • ์ƒ์‚ฐ์ž ์ž…์žฅ์˜ Out ์„ฑ์งˆ

๋ฐ˜๊ณต๋ณ€์„ฑ ์€ ๊ณต๋ณ€์„ฑ๊ณผ ๋ฐ˜๋Œ€์˜ ๊ฐœ๋…์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Intํ˜•์ด Numberํ˜•์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋ช…๋ฐฑํ•˜๊ณ , Class Box< In T > ๋กœ ์ •์˜ํ•˜๋ฉด Class Box< Number >๊ฐ€ Class Box< Int >์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด ๋œ๋‹ค.

  • ๋ฐ˜๊ณต๋ณ€์„ฑ - A๊ฐ€ B์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด๋ฉด Class< B >๋Š” Class< A >์˜ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด๋‹ค.
  • ์†Œ๋น„์ž ์ž…์žฅ์˜ In ์„ฑ์งˆ

๋ฌด๋ณ€์„ฑ ์€ ๋‘ ํด๋ž˜์Šค ์‚ฌ์ด์— ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๋„ ์—†๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.

  • ๋ฌด๋ณ€์„ฑ - Class< A >์™€ Class< B >๋Š” ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.
  • ์ƒ์‚ฐ์ž + ์†Œ๋น„์ž

๊ณต๋ณ€์„ฑ๊ณผ ๋ฐ˜๊ณต๋ณ€์„ฑ์ด ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค.

๋ฌด๋ณ€์„ฑ

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•  ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ์ธ์ž๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฃŒํ˜• ์‚ฌ์ด์˜ ์ƒ, ํ•˜์œ„ ๊ด€๊ณ„๋ฅผ ์ž˜ ๋”ฐ์ ธ์•ผ ํ•œ๋‹ค. ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฅผ ์„ ์–ธํ•  ๋•Œ Out In ํ‚ค์›Œ๋“œ ์—†์ด ๊ทธ๋ƒฅ ์„ ์–ธํ•˜๋ฉด ๋ฌด๋ณ€์„ฑ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ์„ ์–ธ๋œ๋‹ค. Nothing, Int, Any ์ž๋ฃŒํ˜•์˜ ๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ณด๋ฉด Nothing โ†” Int โ†” Any ์˜ ์ƒ, ํ•˜์œ„ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ƒํ•˜ ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•ด๋„ ํด๋ž˜์Šค๊ฐ€ ๋ฌด๋ณ€์„ฑ์œผ๋กœ ์„ ์–ธ๋˜๋ฉด ์ž๋ฃŒํ˜• ๋ถˆ์ผ์น˜ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

class Box<T>(val size : Int) // ๋ฌด๋ณ€์„ฑ์œผ๋กœ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ์„ ์–ธ

fun main() {
    val anys : Box<Any> = Box<Int>(10) // ์˜ค๋ฅ˜, ์ž๋ฃŒํ˜• ๋ถˆ์ผ์น˜
    val nothings : Box<Nothing> = Box<Int>(10) // ์˜ค๋ฅ˜, ์ž๋ฃŒํ˜• ๋ถˆ์ผ์น˜

๊ณต๋ณ€์„ฑ

ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ์˜ ์ƒ, ํ•˜์œ„ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•˜๊ณ , ๊ทธ ๊ด€๊ณ„๊ฐ€ ๊ทธ๋Œ€๋กœ ์ธ์Šคํ„ด์Šค ์ž๋ฃŒํ˜•์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ๊ณต๋ณ€์„ฑ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

class BoxOut T>(val size : Int) // ๊ณต๋ณ€์„ฑ์œผ๋กœ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ์„ ์–ธ

fun main() {
    val anys : Box<Any> = Box<Int>(10) // Int๋Š” Any์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ
    val nothings : Box<Nothing> = Box<Int>(10) // ์˜ค๋ฅ˜, ์ž๋ฃŒํ˜• ๋ถˆ์ผ์น˜

Out ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณต๋ณ€์„ฑ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ–ˆ๋‹ค. Any์˜ ๊ฒฝ์šฐ Int์˜ ์ƒ์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ Intํ˜•์œผ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋„ Any์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Nothing์˜ ๊ฒฝ์šฐ Int์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ Intํ˜•์œผ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค.

๊ณต๋ณ€์„ฑ์—์„œ ์ž๋ฃŒํ˜• ์ œํ•œํ•˜๊ธฐ

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž๋ฃŒํ˜• ํƒ€์ž…์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–˜๊ธฐํ–ˆ์—ˆ๋‹ค. ๊ณต๋ณ€์„ฑ์—์„œ๋„ ๋˜‘๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

open class Animal(val size : Int) {
    fun feed() = println("Feeding")
}

class Cat(val jump : Int) : Animal(50)
class Dog(val weight : Int) : Animal(80)

class Box<out T : Animal>(val element : T) {
    // Out ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณต๋ณ€์„ฑ์œผ๋กœ ์„ ์–ธ
    // ๋”ฐ๋ผ์„œ ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด ์ƒ์œ„ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ๋‹ค.
}

fun main() {
    // ๊ฐ์ฒด ์ƒ์„ฑ
    val c1 : Cat = Cat(10)
    val c2 : Dog = Dog(20)

    var a1 : Animal = c1 // ํ•˜์œ„ ์ž๋ฃŒํ˜•์ด ์ƒ์œ„ ์ž๋ฃŒํ˜•์œผ๋กœ์˜ ๋ณ€ํ™˜์€ ๊ฐ€๋Šฅ.
    a1 = s1

    val c3 : Box<Cat> = Box<Animal>(10) // ์ƒ์œ„ ์ž๋ฃŒํ˜•์ด ํ•˜์œ„ ์ž๋ฃŒํ˜•์œผ๋กœ์˜ ๋ณ€ํ™˜์€ ๋ถˆ๊ฐ€๋Šฅ
    val c4 : Box<Any> = Box<Cat>(!0) // ์ž๋ฃŒํ˜•์„ Animal๋กœ ์ œํ•œํ–ˆ์œผ๋ฏ€๋กœ Animal, Cat, Dog๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์€ ์‚ฌ์šฉ๋ถˆ๊ฐ€.
}
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ’ป ๊ฐœ๋ฐœ > Kotlin' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์ œ๋„ค๋ฆญ  (0) 2022.04.25
[์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค  (0) 2022.04.23
[์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค  (2) 2022.04.22
  1. ๊ฐ€๋ณ€์„ฑ
  2. ๊ฐ€๋ณ€์„ฑ์˜ 3๊ฐ€์ง€ ์œ ํ˜•
  3. ๋ฌด๋ณ€์„ฑ
  4. ๊ณต๋ณ€์„ฑ
  5. ๊ณต๋ณ€์„ฑ์—์„œ ์ž๋ฃŒํ˜• ์ œํ•œํ•˜๊ธฐ
'๐Ÿ’ป ๊ฐœ๋ฐœ/Kotlin' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์ œ๋„ค๋ฆญ
  • [์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค
  • [์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
kodo_o
kodo_o
iOS ๊ฟ€์žผ!
kodo_o
๐ŸŽ๐Ÿ
kodo_o
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (149)
    • ๐Ÿ”จ ํ”„๋กœ์ ํŠธ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • ๐Ÿ’ป ๊ฐœ๋ฐœ (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • ์˜ค๋Š˜์˜ ์‚ฝ์งˆ (7)
      • ์—๋Ÿฌ์™€์˜ ๋™์นจ (1)
    • โœ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • ๐Ÿ“š CS (6)
      • Operating System (6)
    • โ›น๏ธ ๋ผ์ดํ”„ (30)
      • 2020 ๊ฒจ์šธ๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (12)
      • 2021 ์—ฌ๋ฆ„๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (6)
      • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (1)
      • ํšŒ๊ณ  (10)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๊นƒํ—ˆ๋ธŒ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
kodo_o
[์ฝ”ํ‹€๋ฆฐ ์™„์ „์ •๋ณต] ๊ณต๋ณ€์„ฑ, ๋ฐ˜๊ณต๋ณ€์„ฑ, ๋ฌด๋ณ€์„ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.