๋ฒกํฐ ํด๋์ค๋?
์๋ฌธ์์ ์ผ๋ฏ์ด Java Collection Framework์ Vector ํด๋์ค๋ ๋ฐฐ์ด์ ์ ์ ํฌ๊ธฐ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. Java Vector๋ ์ผ์ข ์ ๋์ ๋ฐฐ์ด์ด๋ฉฐ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ฑฐ๋ ์ค์ด๋ค ์ ์์ต๋๋ค. Vector ์ปฌ๋ ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ทธ๋ฃน์ ๊ฐ๋จํ ๊ฐ์ฒด๋ก ์ ์ฅํ๊ณ ๋ค์ํ ๋ฉ์๋๋ฅผ ํตํด ์กฐ์ํ ์ ์์ต๋๋ค. Vector ํด๋์ค๋ java.util ํจํค์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅด๊ฑฐ๋ ํ๋ก๊ทธ๋จ ์๋ช ๋์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ "๋ฐฐ์ด"์ด ํ์ํ ๊ฒฝ์ฐ Java์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Vector ๋ํด๋์ค๋ ์ด๋ฏธ ๊ฝค ์ค๋๋์์ผ๋ฉฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋์ฒดํ ์ ์๋ ๋์ค์ ์ปฌ๋ ์ ์ด ๋ํ๋ฌ์ต๋๋ค. Java Vector์ ์ ๋ช ํ "์๋ ๋ก๊ทธ"๋ ArrayList ํด๋์ค์ ๋๋ค. ์ด๋ฌํ ํด๋์ค ๊ฐ์ ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ ์ Vector๊ฐ ๋๊ธฐํ๋๋ ๋ฐ๋ฉด ArrayList๋ ๋๊ธฐํ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋์ค์ "Vector ํด๋์ค์ ๋ฌธ์ ์ " ์น์ ์์ ์ด ๋ ํด๋์ค์ Vector ํด๋์ค ์ ๋ ํ๋์ ์ธ ์๋ ๋ก๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ์ฐจ์ด์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค .์๋ฐ ๋ฒกํฐ ๋ฉ์๋
Java ๋ฒกํฐ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.-
void add(int index, Object element) ๋ฒกํฐ์ ์ง์ ๋ ์์น์ ์ง์ ๋ ์์๋ฅผ ์ฝ์ ํฉ๋๋ค.
-
boolean add(Object o)๋ ์ง์ ๋ ์์๋ฅผ ๋ฒกํฐ์ ๋์ ์ถ๊ฐํฉ๋๋ค.
-
boolean addAll(Collection c) ์ง์ ๋ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๋ฅผ โโ์ง์ ๋ ์ปฌ๋ ์ ๋ฐ๋ณต์๊ฐ ๋ฐํํ๋ ์์๋๋ก ๋ฒกํฐ์ ๋์ ์ถ๊ฐํฉ๋๋ค.
-
boolean addAll(int index, Collection c) ์ง์ ๋ Collection ๋ด์ ๋ชจ๋ ์์๋ฅผ โโ์ง์ ๋ ์์น์ ๋ฒกํฐ์ ์ฝ์ ํฉ๋๋ค.
-
void addElement(Object obj)๋ ์ง์ ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ด ๋ฒกํฐ์ ๋์ ์ถ๊ฐํ์ฌ ํฌ๊ธฐ๋ฅผ 1์ฉ ๋๋ฆฝ๋๋ค.
-
int capacity()๋ ์ด ๋ฒกํฐ์ ํ์ฌ ์ฉ๋์ ๋ฐํํฉ๋๋ค.
-
void clear()๋ ์ด ๋ฒกํฐ์์ ๋ชจ๋ ์์๋ฅผ โโ์ ๊ฑฐํฉ๋๋ค.
-
๊ฐ์ฒด clone()์ ์ด ๋ฒกํฐ์ ๋ณต์ ๋ณธ์ ๋ฐํํฉ๋๋ค.
-
boolean contains(Object elem) ์ง์ ๋ ๊ฐ์ฒด๊ฐ ์ด ๋ฒกํฐ์ ๊ตฌ์ฑ ์์์ธ์ง ์ฌ๋ถ๋ฅผ ํ ์คํธํฉ๋๋ค.
-
boolean containsAll(Collection c)๋ ๋ฒกํฐ๊ฐ ์ง์ ๋ Collection์ ๋ชจ๋ ์์๋ฅผ โโํฌํจํ๋ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํํฉ๋๋ค.
-
void copyInto(Object[] anArray)๋ ์ด ๋ฒกํฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์ง์ ๋ ๋ฐฐ์ด์ ๋ณต์ฌํฉ๋๋ค.
-
Object elementAt(int index)๋ ์ง์ ๋ ์ธ๋ฑ์ค์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
-
Enumeration elements()๋ ์ด ๋ฒกํฐ ๊ตฌ์ฑ ์์์ ์ด๊ฑฐ๋ฅผ ๋ฐํํฉ๋๋ค.
-
void ensureCapacity(int minCapacity)๋ ํ์ํ ๊ฒฝ์ฐ ์ด ๋ฒกํฐ์ ์ฉ๋์ ๋๋ ค ์ต์ ์ฉ๋ ์ธ์๋ก ์ง์ ๋ ๊ตฌ์ฑ ์์ ์ ์ด์์ ๋ณด์ ํ ์ ์๋๋ก ํฉ๋๋ค.
-
boolean equals(Object o)๋ ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ด ๋ฒกํฐ์ ๋น๊ตํฉ๋๋ค.
-
๊ฐ์ฒด firstElement()๋ ์ด ๋ฒกํฐ์ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ ์์(์ธ๋ฑ์ค 0์ ์์)๋ฅผ ๋ฐํํฉ๋๋ค.
-
Object get(int index)๋ ์ด ๋ฒกํฐ์ ์ง์ ๋ ์์น์ ์๋ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
-
int hashCode()๋ ์ด ๋ฒกํฐ์ ํด์ ์ฝ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
-
int indexOf(Object elem) equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฑ์ฑ์ ํ ์คํธํ๋ฉด์ ์ฃผ์ด์ง ์ธ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฒ์ํฉ๋๋ค.
-
int indexOf(Object elem, int index) index์์ ์์ํ์ฌ equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฑ์ฑ์ ํ ์คํธํ๋ฉด์ ์ฃผ์ด์ง ์ธ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฒ์ํฉ๋๋ค.
-
void insertElementAt(Object obj, int index) ์ง์ ๋ ์ธ๋ฑ์ค์์ ์ด ๋ฒกํฐ์ ๊ตฌ์ฑ์์๋ก ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ฝ์ ํฉ๋๋ค.
-
๋ถ์ธ isEmpty()๋ ๋๋ฝ๋ ๊ตฌ์ฑ์์์ ๋ํด ์ด ๋ฒกํฐ๋ฅผ ํ ์คํธํฉ๋๋ค.
-
๊ฐ์ฒด lastElement()๋ ๋ฒกํฐ์ ๋ง์ง๋ง ๊ตฌ์ฑ ์์๋ฅผ ๋ฐํํฉ๋๋ค.
-
int lastIndexOf(๊ฐ์ฒด ์์)๋ ์ด ๋ฒกํฐ์์ ์ง์ ๋ ๊ฐ์ฒด๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ํ๋๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
-
int lastIndexOf(Object elem, int index) ์ง์ ๋ ์ธ๋ฑ์ค์์ ์์ํ์ฌ ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฒ์ํ๊ณ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
-
Object remove(int index)๋ ์ด ๋ฒกํฐ์ ์ง์ ๋ ์์น์ ์๋ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
boolean remove(Object o)๋ ์ด ๋ฒกํฐ์์ ์ง์ ๋ ์์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค. ๋ฒกํฐ์ ์์๊ฐ ํฌํจ๋์ด ์์ง ์์ผ๋ฉด ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
-
boolean removeAll(Collection c)๋ ์ง์ ๋ Collection์ ํฌํจ๋ ๋ฒกํฐ์์ ๋ชจ๋ ์์๋ฅผ โโ์ ๊ฑฐํฉ๋๋ค.
-
void removeAllElements()๋ ๋ฒกํฐ์์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ํฌ๊ธฐ๋ฅผ 0์ผ๋ก ์ค์ ํฉ๋๋ค.
-
boolean removeElement(Object obj)๋ ์ด ๋ฒกํฐ์์ ์ธ์์ ์ฒซ ๋ฒ์งธ(๊ฐ์ฅ ๋ฎ์ ์ธ๋ฑ์ค) ํญ๋ชฉ์ ์ ๊ฑฐํฉ๋๋ค.
-
void removeElementAt(int index) ์ธ๋ฑ์ค์์ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
-
protected void removeRange(int fromIndex, int toIndex) ์ธ๋ฑ์ค๊ฐ fromIndex(ํฌํจ)์ toIndex(ํฌํจ) ์ฌ์ด์ ์๋ ๋ชจ๋ ์์๋ฅผ โโ์ด List์์ ๋ฐฐํ์ ์ผ๋ก ์ ๊ฑฐํฉ๋๋ค.
-
boolean retainAll(Collection c)๋ ์ง์ ๋ Collection์ ํฌํจ๋ ๋ฒกํฐ์ ์์๋ง ์ ์งํฉ๋๋ค.
-
Object set(int index, Object element)๋ ์ด ๋ฒกํฐ์ ์ง์ ๋ ์์น์ ์๋ ์์๋ฅผ ์ง์ ๋ ์์๋ก ๋ฐ๊ฟ๋๋ค.
-
void setElementAt(Object obj, int index) ์ด ๋ฒกํฐ์ ์ง์ ๋ ์ธ๋ฑ์ค์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ง์ ๋ ๊ฐ์ฒด๋ก ์ค์ ํฉ๋๋ค.
-
void setSize(int newSize) ์ด ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
-
int size()๋ ์ด ๋ฒกํฐ์ ๊ตฌ์ฑ ์์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
-
List subList(int fromIndex, int toIndex)๋ fromIndex(ํฌํจ)์ toIndex(๋ฐฐํ์ ) ์ฌ์ด์์ ์ด ๋ชฉ๋ก ๋ถ๋ถ์ ํํ(๋ณด๊ธฐ)์ ๋ฐํํฉ๋๋ค.
-
Object[] toArray()๋ ์ด ๋ฒกํฐ์ ๋ชจ๋ ์์๋ฅผ โโ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
-
Object[] toArray(Object[] a)๋ ์ด ๋ฒกํฐ์ ๋ชจ๋ ์์๋ฅผ โโ์ฌ๋ฐ๋ฅธ ์์๋ก ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ๋ฐํ๋ ๋ฐฐ์ด์ ์คํ ์ ํ์ ์ง์ ๋ ๋ฐฐ์ด์ ์ ํ์ ๋๋ค.
-
String toString()์ ๊ฐ ์์์ ๋ฌธ์์ด ํํ์ ํฌํจํ๋ ์ด ๋ฒกํฐ์ ๋ฌธ์์ด ํํ์ ๋ฐํํฉ๋๋ค.
-
void trimToSize()๋ ์ด ๋ฒกํฐ์ ์ฉ๋์ ๋ฒกํฐ์ ํ์ฌ ํฌ๊ธฐ๋ก ์๋ฆ ๋๋ค.
์๋ฐ ๋ฒกํฐ ์
import java.util.Vector;
public class VectorExample {
public static void main(String[] args) {
Vector vector = new Vector();
System.out.println("the size of the empty vector = " + vector.size());
//adding some vector elements
vector.add("Johnny");
vector.add("Ivy");
vector.add("Ricky");
System.out.println(vector);
//adding more vector elements
vector.add("Johnny");
vector.add("Paul");
System.out.println(vector);
System.out.println("the size of the vector = " + vector.size());
System.out.println("the first element of the vector = " + vector.firstElement());
//here the program will print out the first appearance of "Johnny" element
System.out.println(vector.indexOf("Johnny"));
//program will print out the first appearance of "Johnny" element starting from the element 1
System.out.println(vector.indexOf("Johnny", 1));
vector.clear(); //deleting all vector elements
System.out.println("the size of the vector after clear method = " + vector.size());
}
}
์ด ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฒกํฐ ํด๋์ค์ ์ด๋ค ๋ฌธ์ ๊ฐ ์์ต๋๊น?
Java Vector ํด๋์ค ์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ํ๋ก๊ทธ๋จ์์ ์ค๋ ๋ ์์ ๊ตฌํ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ Vector (Collection Framework์ ๋ ํจ๊ณผ์ ์ธ ์ฐธ์ฌ์) ๋์ ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Vector ๋์ ArrayList ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์์ ๋ฅผ ์ฝ๊ฐ ๋ณ๊ฒฝํด ๋ณด๊ฒ ์ต๋๋ค .
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List vector = new ArrayList();
//Vector vector = new Vector();
System.out.println("the size of the empty vector = " + vector.size());
vector.add("Johnny");
vector.add("Ivy");
vector.add("Ricky");
System.out.println(vector);
vector.add("Johnny");
vector.add("Paul");
System.out.println(vector);
System.out.println("the size of the vector = " + vector.size());
//System.out.println("the first element of the vector = " + vector.firstElement());
//here the program will print out the first appearance of "Johnny" element
System.out.println(vector.indexOf("Johnny"));
//program will print out the first appearance of "Johnny" element starting from the element 1
//System.out.println(vector.indexOf("Johnny", 1));
vector.clear();
System.out.println("the size of the vector after clear method = " + vector.size());
}
}
Vector.indexOf("Johnny", 1) ๋ก ์ค์ ์ฃผ์ ์ฒ๋ฆฌํ์ต๋๋ค . ArrayList ํด๋์ค ์ ์ด ๋ณํ์๋ ๊ทธ๋ฌํ ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค . ๊ฐ์ ์ด์ ๋ก vector.firstElement() ํ์ด ์ฃผ์ ์ฒ๋ฆฌ๋์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์ธก๋ฉด์์ ํ๋ก๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ ํ๋ก๊ทธ๋จ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฌผ๋ก ์ด๋ฌํ ์์์ ArrayList๊ฐ Vector ๋ณด๋ค ๋์ ์ด์ ๋ ๋ช
ํํ์ง ์์ต๋๋ค . ์ด๋ฅผ ์ํด์๋ ์ค๋ ๋์ ๋ํ ๋ ๋ง์ ์ง์์ด ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ด์ ๋ฅผ ๋์ดํฉ๋๋ค. ์ฒซ์งธ, Vector ํด๋์ค๊ฐ ๋๊ธฐํ๋์ด ์์ง๋ง ์ด์ํ๊ฒ ๋ณด์ด์ง๋ง ์์ ํ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ๋ค๊ณ ํ ์๋ ์์ต๋๋ค. ์ฌ์ค Vector๋ ์ ์ฒด Vector ๊ฐ ์๋๋ผ ๊ฐ ์์
์ ๋๊ธฐํํฉ๋๋ค.์ธ์คํด์ค ์์ฒด. ์ด๋ ๊ฐ๋ณ ์์
์ด ์๋ ์ ์ฒด ์์
์ธํธ๋ฅผ ๋๊ธฐํํด์ผ ํ๋ ํ๋ก๊ทธ๋จ์์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํ ์ค๋ ๋๊ฐ ๋ฒกํฐ๋ฅผ ๋ฐ๋ณตํ๊ณ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฒกํฐ์ ์ธ์คํด์ค๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ์์ ํ๋ ๊ฒฝ์ฐ ๋ฐ๋ณต์๋ ConcurrentModificationException ์ ๋ฐ์ ์ํต๋๋ค . ๋ ์ค๋ ๋๊ฐ ์๋ก ๋ค๋ฅธ ์์
์ ์ํํ๋ ๊ฒฝ์ฐ ๋์์ Vector ์ธ์คํด์ค ์์ ์์
ํ ์ ์์์ด ๋ฐํ์ก์ต๋๋ค . ๋์งธ, ๋ฒกํฐ๊ฐ์ฒด์ ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅํ ๋ฐฐ์ด๊ณผ ๋๊ธฐํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋์ค๊ฐ ์ต์์ ์ฑ๋ฅ์ ๋ฐํํ์ง ๋ชปํฉ๋๋ค. ์ด ์กฐํฉ์ ๋๊ธฐํ๊ฐ ํ์ํ์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ฐจ๋จ ์์
์ ๋ํ ์ถ๊ฐ ์ค๋ฒํค๋๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ํ ๊ฐ ์์
์์ ๋ฒกํฐ๋ฅผ ๋๊ธฐํํ๋ฉด ๊ฐ ์์
์ ๋ํด ๊ณ์ํด์ ์ ๊ธ์ ํ๋ํ๋ฏ๋ก ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ํด๋์ค์ ์ ์ฒด ์ธ์คํด์ค๊ฐ ๋๊ธฐํ๋๋ฉด ์ ๊ธ๋ ํ ๋ฒ ํ๋๋๋ฏ๋ก ํจ์ฌ ๋ ํจ์จ์ ์
๋๋ค. ์
์งธ, ๋ฒกํฐ๋ ์ผ๋ถ ๋ ๊ฑฐ์ ๋ฐฉ๋ฒ์ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์(). ์ด ๋ฉ์๋๋ ๋ฒกํฐ ๊ตฌ์ฑ ์์์ ์ด๊ฑฐํ์ ๋ฐํํฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก Iterator ๋๋ ListIterator๋ฅผ Enumeration์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. ํนํ Enumeration์๋ remove() ๋ฉ์๋๊ฐ ์ ์๋์ด ์์ง ์์ผ๋ฏ๋ก ๋ฐ๋ณต ์ค์ ๋ชฉ๋ก์ ๊ตฌ์กฐ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค. ๋ํ ListIterator์ ๋ฌ๋ฆฌ Enumeration์ ์๋ฐฉํฅ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ณด์ ๋ค์ํผ Vector ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ์ ํ List ์ธํฐํ์ด์ค์ ์ค๋ ๋ ์์ ๊ตฌํ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํฉ๋๊น? ์ด ๊ฒฝ์ฐ ArrayList๋ ๋์์ด ๋์ง ์์ง๋ง ์๋ฅผ ๋ค์ด Vector ๋์ CopyOnWriteArrayList ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค . ArrayList ์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ๋ณํ์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.. ์ปฌ๋ ์
์ synchronizedList() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ArrayList๋ฅผ ๋๊ธฐํํ ์๋ ์์ต๋๋ค .
GO TO FULL VERSION