ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Collection] ArrayList ๊ด€๋ จ ๊ผฌ๋ฆฌ ์งˆ๋ฌธ ๋‹ต๋ณ€ ๊ณต๋ถ€ ๊ธฐ๋ก
    ๊ฐœ๋ฐœ/Java 2022. 4. 18. 23:55

     

    ๐Ÿ’ก์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋•Œ, ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ ์€ ๋ฌด์—‡์ผ๊นŒ?

    - ๋ฐฐ์—ด์€ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค

    - ์„ฑ๋Šฅ์ƒ์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ๋ฉด์—์„œ ๊ฐ€์žฅ ์ข‹๋‹ค.

     

    ๐Ÿ’ก๊ทธ๋Ÿผ ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ์—๋Š”?

    - int์˜ ์ตœ๋Œ€๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

    -> ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค.

     

    - ํ•„์š”ํ•œ ๊ฐœ์ˆ˜๋งŒํผ ๋” ํฐ ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ๋‹ค ๋ณต์‚ฌํ•ด๋ฒ„๋ฆฐ๋‹ค.

    ->๊ตณ์ด ์ด๋ ‡๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ๐Ÿ’ก๋‹ค์Œ ๊ทธ๋ฆผ์„ ๊ผญ ์™ธ์šฐ์ž.

    ์ปฌ๋ ‰์…˜ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค

     

    ๋ฆฌ์ŠคํŠธ, ์…‹, ํ๋Š” Collection์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. Collection ์ธํ„ฐํŽ˜์ด์Šค๋Š” java.util ํŒจํ‚ค์ง€์— ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. ๋ชจ๋‘ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋‹ด์•„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋“ค์„ ์„ ์–ธํ•ด ๋†“์•˜๋‹ค.

    ์—ฌ๊ธฐ์„œ ๋งต ๋งŒ์ด Collection๊ณผ ๊ด€๋ จ ์—†๋Š” ๋ณ„๋„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

     

    Collection ์ธํ„ฐํŽ˜์ด์Šค๋Š” Iterable<E>๋ฅผ ํ™•์žฅํ•˜๋Š”๋ฐ, ์ด Iterable<E> ํด๋ž˜์Šค์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋Š” iterator() ๋”ฑ ํ•˜๋‚˜๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” Iterator๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. Iterator ์ธํ„ฐํŽ˜์ด์Šค๋Š” hasNext(), next(), remove()๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค. 

     

    ๊ฒฐ๋ก ์ ์œผ๋กœ, Collection ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” Iterator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

     

    List์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ "์ˆœ์„œ"๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค ์ค‘, java.util ํŒจํ‚ค์ง€์—์„œ๋Š” ArrayList, Vector, Stack, LinkedList๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

     

    ๐Ÿ’กArrayList์™€ Vector์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

    ์ผ๋‹จ Vector๋Š” JDK 1.0๋ถ€ํ„ฐ ์žˆ์—ˆ๊ณ , ArrayList๋Š” JDK 1.2์—์„œ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ๋ฒ•์ด ๊ฑฐ์˜ ๋™์ผํ•˜๊ณ , ๊ธฐ๋Šฅ๋„ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‹ค.  ํ•˜์ง€๋งŒ ArrayList๋Š” Thread safeํ•˜์ง€ ์•Š๊ณ , Vector๋Š” Thread safeํ•˜๋‹ค. ์ฆ‰, ArrayList์˜ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ๋ช…์ด ๋‹ฌ๋ ค๋“ค์–ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , Vector๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

     

    cf) ArrayList๋ฅผ Thread safeํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

    List list = Collections.synchronizedList(new ArrayList(...));

     

    ๐Ÿ’กArrayList์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ธ๊ฐ€?

    ์ž๋ฐ” 7๊นŒ์ง€๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์‹œ์— ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๋ฐ”๋กœ 10๊ฐœ์˜ ๊ณต๊ฐ„์ด ์ƒ๊ธด๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ” 8๋ถ€ํ„ฐ๋Š” ์ƒ์„ฑ ์‹œ์—๋Š” ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ , addํ•˜๋Š” ์‹œ์ ์— 10๊ฐœ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

     

    ๐Ÿ’กArrayList์™€ LinkedList์˜ ์ฐจ์ด?

    LinkedListํด๋ž˜์Šค๋Š” List๋„ ๋˜๊ณ , Queue๋„ ๋œ๋‹ค. ๋˜ํ•œ List์™€ ๋‹ฌ๋ฆฌ AbstractList๋ฅผ ํ™•์žฅํ•œ AbstractSequentialList๊ฐ€ ๋ถ€๋ชจ์ด๋‹ค. ์ž๋ฐ” 6์—์„œ๋ถ€ํ„ฐ๋Š” Deque์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ๋“ค์ด ์•ž ๋’ค๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด ๋†“์„ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

     

    ArrayList

    java.lang.Object
      ใ„ด java.util.AbstractCollection<E>
        ใ„ด java.util.AbstractList<E>
          ใ„ด java.util.ArrayList<E>

     

    LinkedList

    java.lang.Object
      ใ„ด java.util.AbstractCollection<E>
        ใ„ด java.util.AbstractList<E>
          ใ„ด java.util.AbstractSequentialList<E>
            ใ„ด java.java.util.LinkedList<E>

     

    ๐Ÿ’กArrayList<String> list2 = new ArrayList<String>(list); ์™€ ArrayList<String>list2 = list; ์˜ ์ฐจ์ด๋Š”?

    1๋ฒˆ์€ ArrayList์—๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์–ด๋– ํ•œ ํด๋ž˜์Šค๋„ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, list์— ์žˆ๋Š” ๋‚ด์šฉ์„ list2์— ๋ณต์‚ฌํ•ด์•ผ ํ•  ์ผ์ด ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, 2๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” list2๊ฐ€ list์˜ ๊ฐ’๋งŒ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, list๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊นŒ์ง€๋„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ฆ‰, ArrayListlist2 = list; ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•˜๊ณ  list์— A๋ผ๋Š” ๊ฐ’์„ add์‹œํ‚ค๋ฉด list2๋ฅผ ํ™•์ธํ•ด๋ดค์„ ๋•Œ, ๋™์ผํ•˜๊ฒŒ A๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋”ฐ. 

     

    ๐Ÿ’กString[] strList = list.toArray(new String[0]); "new String[0]" ์ด๋ ‡๊ฒŒ ์“ด ์ด์œ ๋Š”?

    ArrayList ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด๊ฐ„ ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์ด null๋กœ ์ฑ„์›Œ์ง„๋‹ค. ์ž‘์„ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‘ null๋กœ ์ฑ„์›Œ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, toArray() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ๊ฐ€์žฅ ์ฒ˜์Œ์— ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ํฌ๊ธฐ๊ฐ€ 0์ธ ๋ฐฐ์—ด์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค.

     

     

    ๐Ÿ’กStack์€ ์™œ ์•ˆ์ข‹์€ ๊ตฌํ˜„์ผ๊นŒ?

    ์ผ๋ฐ˜์ ์œผ๋กœ ์›น์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋ณ„๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ์ฒ˜์Œ์— ๊บผ๋‚ด๋Š” LIFO ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋‹ค. ํ•˜์ง€๋งŒ LIFO ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ ์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ํด๋ž˜์Šค๋ณด๋‹ค ๋” ๋น ๋ฅธ ArrayDeque๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, ArrayDeque๋Š” ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•˜๋‹ค. ์•ฝ๊ฐ„ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€์ง€๋งŒ, ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•œ LIFO ๊ธฐ๋Šฅ์„ ์›ํ•œ๋‹ค๋ฉด ์ด Stack ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

     Stack ํด๋ž˜์Šค์˜ ์ƒ์†๊ด€๊ณ„

    java.lang.Object
      ใ„ด java.util.AbstractCollection<E>
        ใ„ด java.util.AbstractList<E>
          ใ„ด java.util.Vector<E>
            ใ„ด java.util.Stack<E>

    Stack ํด๋ž˜์Šค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” Vector์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, Vector ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ , Stack ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess๋กœ ArrayList ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

    Stack ํด๋ž˜์Šค๋Š” ์ž๋ฐ”์—์„œ ์ƒ์†์„ ์ž˜๋ชป ๋ฐ›์€ ์˜ˆ์ด๋‹ค. ์ด ํด๋ž˜์Šค๊ฐ€ JDK 1.0๋ถ€ํ„ฐ ์กด์žฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜์˜ ์ทจ์ง€์ธ LIFO๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด Vector์— ์†ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์ž๋ฐ”์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ด ์ƒ์†๊ด€๊ณ„๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

     

    ๐Ÿ’กArrayList์˜ ๋™์ž‘์›๋ฆฌ?

    ArrayList๋Š” elementData๋ผ๋Š” ๋‚ด๋ถ€์˜ Object ๋ฐฐ์—ด ๊ฐ์ฒด์— ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ, ํ•ด๋‹น ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ํ•ญ์ƒ ์—ฌ์œ ๋ถ„์˜ ์ธ๋ฑ์Šค๋ฅผ ๋‘๊ณ  ์žˆ๋‹ค. (๋ถ€์กฑํ•˜๋ฉด grow๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.) ๊ฒฐ๊ตญ์€ ๋‚ด๋ถ€์˜ ๋ฐฐ์—ด๋กœ ๋™์ž‘ํ•˜๋Š”๊ฑด๋ฐ, ์‚ฌ์ด์— ๊ฐ’์„ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ System.arraycopy๋ฉ”์†Œ๋“œ ๋•๋ถ„์ด๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ๋ฐฐ์—ด์„ ๋ฐ›์•„์„œ ํŠน์ • ์œ„์น˜์—์„œ ์ž๋ฅด๊ณ , ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์— ๋ณต์‚ฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ๋ณต์‚ฌํ•˜๋ฉด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ํ•œ ์ž๋ฆฌ๋ฅผ ๋„์šฐ๊ณ  ํ•ด๋‹น ์ž๋ฆฌ์— ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. 

    System.arraycopy(elementData, index, elementData, index + 1, size - index);
    elementData[index] = element;
    size++;

    remove๋„ ๋˜ํ•œ ๋™์ผํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ๋’ค์˜ ๋‚ด์šฉ์„ ํ•œ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹น๊ฒจ์„œ index ์ž๋ฆฌ๋ฅผ ๋ฎ์–ด๋ฒ„๋ฆฌ๊ณ , ๋งˆ์ง€๋ง‰์˜ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์„ null๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

    if(numMoved > 0 ) System.arraycopy(elementData, index + 1, elementData, index, numMoved);
    elementData[--size] = null;

    ์ถœ์ฒ˜ https://matdulgi.tistory.com/69

     

    [java] ArrayList

    ArrayList์˜ ๋™์ž‘ ์›๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์‹ถ์–ด์„œ ํฌ์ŠคํŒ…ํ•œ๋‹ค ArrayList๋Š” ๋‚ด๋ถ€์— ๋ฐฐ์—ด ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌ๋œ๋‹ค Array์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž๋ฃŒ์˜ ์ถ”๊ฐ€, ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ๋ฐ ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ์›๋ฆฌ๋กœ ๋™์ž‘ํ•˜๋Š”

    matdulgi.tistory.com

     

     

    ๋Œ“๊ธ€

Designed by Tistory.