-
JAVA ์๋ฐ ์ปฌ๋ ์ Set๊ณ์ด HashSetJAVA 2020. 8. 12. 23:43
๐ฏ ์๋ฐ ์ปฌ๋ ์ ์ ์ข ๋ฅ๋ฅผ ์์๋ณด๊ณ HashSet์ ์ฐ์ตํด๋ณธ๋ค.
์ปฌ๋ ์ (Collection)
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์๋ ๋ณ์, ๋ฐฐ์ด ๊ทธ๋ฆฌ๊ณ ์ปฌ๋ ์ ์ด ์๋ค. ์ปฌ๋ ์ ์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ๋ฐฐ์ด๋ณด๋ค ํจ์จ์ ์ด๋ค. ํ๋์ ์ปฌ๋ ์ ์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ๋๋ง๋ค ์๋์ผ๋ก ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฐฐ์ด์ฒ๋ผ ๋ฐฉ ํฌ๊ธฐ์ ๋ฐ์ดํฐํ์ ์ ์ง์ ํ ํ์ ์์ด 100๊ฐ๊ฑด 200๊ฐ๊ฑด ๊ทธ๋ฅ ๋ค ๋ฃ์ ์ ์๋ค.
์ปฌ๋ ์ ์ ์ต์์ ํด๋์ค๋ Collection ์ธํฐํ์ด์ค๋ค. ์ปฌ๋ ์ ์ Set๊ณผ List ๊ณ์ด๋ก ๋๋๋ฉฐ ํจ์ ์ ์๋ง ๋์ด์๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๊ตฌํ์ ์์๋ฐ๋ ์๋ ํด๋์ค๋ค์ด ํ๋ค. Set๊ณ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๋ค. List ๊ณ์ด์ ๋ฐ์ดํฐ ์ ์ฅ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค. ์ด ๋ ๊ณ์ด์ ๋ชจ๋ ์ค์ ๋ฐ์ดํฐ๋ง ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ํํ์ด๋ฉฐ, Map ์ธํฐํ์ด์ค๋ key-value ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ํํ์ด๋ค. key๋ ์ค๋ณต์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ value๋ ์ค๋ณต์ ์ฅ์ด ๊ฐ๋ฅํ๊ณ ์ ์ฅ ์์๊ฐ ์๋ค.
์ปฌ๋ ์ ์ธํฐํ์ด์ค์ ๋ํ์ ์ธ ์ถ์๋ฉ์๋์ด๋ค. Set๊ณ์ด๊ณผ List๊ณ์ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ํ์ ํด๋์ค๋ค์ ํตํด ๊ตฌํํ ์ ์๋ค. size๋ ๋ฐฐ์ด์ length์ ๊ฐ์ ๊ธฐ๋ฅ์ด๋ค. contains() ๋ฉ์๋๋ ์ปฌ๋ ์ ์์ ์ด๋ค ์์๋ฅผ ํฌํจํ๊ณ ์๋์ง ๋ถ๋ฆฌ์ธ ํ์ ์ผ๋ก ๋ฐํํ๋ค. iterator() ๋ฉ์๋๋ ๋ฐ๋ณต๋ฌธ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด๋ค.
HashSet ํด๋์ค ์ฌ์ฉํ๊ธฐ
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Ex10_6 { public static void main(String[] args) { Set<String> s = new HashSet<String>(); s.add("ํ๊ธธ๋"); s.add("์ด์์ "); s.add("์ ๊ด์"); s.add("ํ๊ธธ๋"); s.add("ํ๊ธธ๋"); System.out.println("toString() ์ ์ฒด ์ถ๋ ฅ:" +s ); for(String data : s) { System.out.println("forEach ์ ์ฒด ์ถ๋ ฅ:"+data); } System.out.println("Set์ ๋ฐ์ดํฐ ๊ฐฏ์? "+ s.size()); System.out.println("Set์ด ๋น์ด์๋? "+ s.isEmpty()); System.out.println("Set์ ์ด์์ ํฌํจ์ฌ๋ถ? "+s.contains("์ด์์ ")); System.out.println("์ด์์ ์ญ์ ์คํ"); s.remove("์ด์์ "); for (String data : s) { System.out.println("forEach: "+data); } Iterator<String> ite = s.iterator(); while(ite.hasNext()) { String data = ite.next(); System.out.println("Iterator: "+data); } System.out.println("์ ์ฒด ์ญ์ ์คํ"); s.clear(); System.out.println("toString() ์ ์ฒด์ถ๋ ฅ: "+s); } }
Set๊ณ์ด์ ์ ์ฅ ์์๊ฐ ์์ด์ ์ค๋ณต์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๊ณ ์ ์ฅ๋ ์์น๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์์น๊ฐ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ๋ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉํ๋ค. Set์ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ Setํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋์ ํ์ํด๋์ค์ธ HashSet์ ํตํด ๊ตฌํํด์ผ ํ๋ค.
๋จผ์ HashSet ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. Set์ ์ธํฐํ์ด์ค๋ผ ์ง์ ๊ฐ์ฒด์์ฑ์ ํ ์ ์์ง๋ง ๋คํ์ฑ์ ์ ์ฉํด ๋ฐ์ดํฐํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ <String>ํ์ ์ผ๋ก ์ ๋ค๋ฆญ์ ์ง์ ํด์ฃผ์๊ธฐ ๋๋ฌธ์ HashSet ๊ฐ์ฒด๋ Stringํ์ ๋ง ๋ฐ์ ์ ์๋ค.
๊ฐ์ฒด์์ฑํ ํด์ฌ์ ์ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฉ์๋์ธ add()๋ฅผ ์ฌ์ฉํด ์คํธ๋งํ์ ์ ๋ฐ์ดํฐ๊ฐ์ ์ ์ฅํ๋ค. ์ฌ๊ธฐ์ ํ๊ธธ๋์ด ์ธ ๋ฒ์ด๋ ๋ฑ์ฅํ์ง๋ง setํน์ง์ ๋ฐ๋ผ ์ค๋ณต์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ๊ธธ๋์ ํ๋ฒ๋ง ์ ์ฅ๋๋ค.
์ปฌ๋ ์ ์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ iterator() ๋ฉ์๋๋ ์ธํฐํ์ด์ค Iterator ํ์ ์ด๋ค. while๋ฌธ ์กฐ๊ฑด์ ์์ hasNext() ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต ๋๋ฆฌ๋ฉด์ ๋ค์์ ๋ ํ์ธํ ์์๊ฐ ์๋์ง ๋ฌผ์ด๋ณด๊ณ , ์กฐ๊ฑด์ด true์ด๋ฉด ์ฝ๋๋ฅผ ์คํํ๋ค. next() ๋ฉ์๋๋ ์ฆ๊ฐ์์ฒ๋ผ ๋ค์ ์์๋ก ์ด๋ํ๋ค๋ ๋ป์ด๋ค.
Object [] xxx = s.toArray(); for(Object o : xxx) { System.out.println(o); }
Object [] ํ์ ์ toArray() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ณํํ ์ ์๋ค. HashSet์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด๋ก ๋ณํํด์ forEach ๋ฐ๋ณต๋ฌธ์ ์คํํ๊ณ ์๋ค. ์ปฌ๋ ์ ์์ ๋ฐฐ์ด๋ก ๋ณํ๋๋ฉด ์ด์ index๊ฐ ์๊ธฐ๊ณ ์ค๋ณต์ ์ฅ์ด ๋๋ ๋ฑ ์ ์ฅํ๊ฐ ๋ฐ๋๋ค.
Person ํด๋์ค๋ก Set ์ฐ์ตํ๊ธฐ
public class Person { private String name; private int age; private String address; public Person() {} public Person(String name, int age, String address) { this.name = name; this.age = age; this.address = address; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", address=" + address + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
Person ํด๋์ค๋ฅผ ๋ง๋ค๊ณ private๋ณ์, ์์ฑ์, private ๋ณ์์ ์ ๊ทผํ ์ ์๋ get, set ํจ์๋ฅผ ๋ง๋ค๊ณ toString()ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ค. toString()์ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๋ฉ์๋์ด๋ค.
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetTest3 { public static void main(String[] args) { Set<Person> set = new HashSet<Person>(); Person kkkk = new Person("์ ๊ด์", 17, "์์ธ"); set.add(new Person("ํ๊ธธ๋", 20, "์์ธ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(kkkk); set.add(kkkk); System.out.println(set); for(Person x : set) { System.out.println(x.getName()); } Iterator<Person> iterator = set.iterator(); while(iterator.hasNext()) { Person p = iterator.next(); System.out.println(p.getName()); } } }
Person ํด๋์ค๋ฅผ Set๊ณ์ด ์ปฌ๋ ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ์์ํด๋์ค Set์ <Person>ํด๋์คํ์ ์ ๋ค๋ฆญ์ผ๋ก HashSet ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. Person ํด๋์ค ์์ฒด์ ๊ฐ์ฒด๋ ์์ฑํ๋ค. kkkk์ด๋ฆ์ผ๋ก ๊ฐ์ฒด์์ฑํ๋ฉฐ ์ด๊ธฐ๊ฐ์ ํจ๊ป ๋ฃ์ด์คฌ๋ค.
Personํด๋์ค์ 3๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ํด์ฌ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ด ์ค์์ ์ด์์ ๋ฐ์ดํฐ์ ๋ด์ฉ์ ์ค๋ณต๋๋ค. ๋ด์ฉ์ ๋์ผํ์ง๋ง ๊ฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ Set์ ์ค๋ณต ์ ์ฅ์ด ๊ฐ๋ฅํด์ง๋ค. ๋ฐ๋ณต๋ฌธ์ผ๋ก set์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์ฐธ์กฐ๋ณ์ kkkk์ ๋ฐ์ดํฐ๋ ์ค๋ณต์ ์ฅ์ด ์๋๋ ๊ฑธ ๋ณผ ์ ์๋ค. kkkk๋ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์์ด์ set์ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
ํ๋ผ๋ฏธํฐ๋ก ์ปฌ๋ ์ ์ฃผ๊ณ ๋ฐ๊ธฐ
import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetTest3 { public Set<Person> getPersonSet(Set<Person> set) { Person kkkk = new Person("์ ๊ด์", 17, "์์ธ"); set.add(new Person("ํ๊ธธ๋", 20, "์์ธ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(kkkk); set.add(kkkk); return set; } public static void main(String[] args) { SetTest3 test = new SetTest3(); // ๋ฉ์ธ์์ set์ ์์ฑํด์ getPersonSet์๊ฒ ๋๊ฒจ์ฃผ๊ธฐ Set<Person> set = new HashSet<Person>(); // ๋น์ด์๋ set์์ฑ Set<Person> set2 = test.getPersonSet(set); // ๋น set์ ํจ์์ ๋๊น, ํจ์์์ ๊ฐ์ฒด๋ฅผ ๋ด์์ ๋ฆฌํด System.out.println(set2); for (Person x : set2) { System.out.println(x.getName()); } Iterator<Person> iterator = set2.iterator(); while (iterator.hasNext()) { Person p = iterator.next(); System.out.println(p.getName()); } } }
mainํจ์์์ Set์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํด์ getPersonSet ๋ฉ์๋๋ฅผ ๋ง๋ค์ด๋ณธ๋ค. main์์ HashSet ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ getPersonSet ๋ฉ์๋์ HashSet ๊ฐ์ฒด์ ์ฐธ์กฐ๋ณ์์ธ set ์ปฌ๋ ์ ์ ์ธ์๋ก ๋ด์์ ํธ์ถํ๋ค.
getPersonSet ๋ฉ์๋๋ set์ ์ธ์๋ก ๋ฐ์์ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ์ฅ์๋ฃ๋ ์ปฌ๋ ์ ์ ๋ฐํํ๋ค. ๋ฐํ๋ฐ์ ์ปฌ๋ ์ ์ set2 ๋ณ์์ ๋ฃ๊ณ set2์ ๋ฐ์ดํฐ๋ค์ ์ถ๋ ฅํ๋ค. ์ปฌ๋ ์ ์ ๋ด๊ธด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด๋ณด๊ณ , forEach์ Iterator ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ์ด๋ฆ๋ง ๋ชจ๋ ์ถ๋ ฅํด๋ณธ๋ค.
getPersonSet(), printPerson() ๋ฉ์๋๋ฅผ ๊ฐ์ง setService ํด๋์ค ๋ง๋ค๊ธฐ
import java.util.HashSet; import java.util.Set; public class SetService { public Set<Person> getPersonSet() { Set<Person> set = new HashSet<Person>(); Person kkkk = new Person("์ ๊ด์", 17, "์์ธ"); set.add(new Person("ํ๊ธธ๋", 20, "์์ธ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(kkkk); return set; } public void printPerson(Set<Person> set) { for (Person person : set) { System.out.println(person); } } }
์์์ ๋ง๋ getPersonSet ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์๋ก์ด SetService ํด๋์ค๋ฅผ ๋ง๋ ๋ค. Set์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์๋ ๋ฐ๋ณต๋ฌธ๋ ๊ฐ์ ธ์์ printPerson ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค.
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetTest4 { public static void main(String[] args) { SetService test = new SetService(); Set<Person> set = test.getPersonSet(); //์๋ฃ๋ด๊ธด set๋ฐ์์ค๊ธฐ test.printPerson(set); //set์ ๋ด์ฉ ์ถ๋ ฅ ์์ฒญ } }
mainํจ์์์๋ setService ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํจ์๋ง ํธ์ถํ๋ฉด ๋๋ค. ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ก๋ค.
DAO์ฐ์ต
package com.dao; public class Person { private String name; private int age; private String address; public Person() {} public Person(String name, int age, String address) { super(); this.name = name; this.age = age; this.address = address; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", address=" + address + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
Person ํด๋์ค๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ค.
package com.dao; import java.util.HashSet; public class OracleDAO { //select ํธ์ถ์ ๋ฐ์ดํฐ ์ ์ฅ๋ set๋ฐํ public HashSet<Person> select() { HashSet<Person> set = new HashSet<Person>(); set.add(new Person("ํ๊ธธ๋", 20, "์์ธ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); set.add(new Person("์ด์์ ", 44, "์ ๋ผ")); return set; } }
OracleDAO ํด๋์ค์ select ๋ฉ์๋์ <Person> ์ ๋๋ฆญ ํ์ ๋ง ์ ์ฅํ ์ ์๋ HashSet ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ค ๊ฐ์ด ๋ค์ด์๋ ํด์ฌ์ ์ ๋ฐํํ๋ค.
package com.service; import java.util.HashSet; import com.dao.OracleDAO; import com.dao.Person; public class OracleService { OracleDAO dao; public OracleService() { dao = new OracleDAO(); } public HashSet<Person> select() { HashSet<Person> xxx = dao.select(); return xxx; } }
OracleService ํด๋์ค์ ์์์ ๋ง๋ OracleDAO ํ์ ์ ๋ณ์ dao๋ฅผ ๋ง๋ค๊ณ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ง๋ ๋ค. ๋ฉ์ธํจ์์์ OracleService ๊ฐ์ฒด ์์ฑ์ OracleDAO๋ฅผ ์์ฑ ํ ๋ฉค๋ฒ๋ณ์๋ก ์ง์ ํ๊ฒ๋๋ค. <Person>ํด๋์ค ํ์ ๋ง ๋ฐ์ ์ ์๋ HashSetํ์ ์ select ํจ์๋ OracleDAO์ ์ ๋ ํธ ํจ์๋ฅผ ํธ์ถํด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ ๋ฐ์ ๋ค ๊ทธ๊ฑธ xxx๋ณ์์ ์ ์ฅํด์ ๋ฆฌํดํ๋ค.
import java.util.HashSet; import com.dao.Person; import com.service.OracleService; public class OracleMain { public static void main(String[] args) { OracleService service = new OracleService(); HashSet<Person> xxx = service.select(); for (Person s : xxx) { System.out.println(s); } } }
์ด์ ๋ฉ์ธํจ์ ์์์๋ OracleService์ ๊ฐ์ฒด๋ง ์์ฑํ๋ฉด ๋๋ค. ๊ฐ์ฒด์์ฑ ์ ์์์ ์ง์ ํ ๊ธฐ๋ณธ์์ฑ์์ ๋ฐ๋ผ OracleDAO์ ๊ฐ์ฒด๋ ์์ฑ๋๋ค. OracleService ํด๋์ค์ select ํจ์์์ ๋ฆฌํด๋ฐ์ ํด์ฌ์ ๋ฐ์ดํฐ๋ค์ xxx ๋ณ์์ ๋ด๊ณ forEach ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ NEXT : List, MAP ๊ณต๋ถํ๊ธฐ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ์๋ฐ Map ๋งต HashMap (0) 2020.08.15 JAVA ์๋ฐ List๊ณ์ด ArrayList (0) 2020.08.13 JAVA ์๋ฐ ์ ๋ค๋ฆญ (Generic) (0) 2020.08.11 JAVA ์๋ฐ ์์ธ์ฒ๋ฆฌ, throws, ์ฌ์ฉ์์ ์ ์์ธํด๋์ค (2) 2020.08.10 JAVA ์๋ฐ ์ค์ฒฉํด๋์ค, comparator ์ธํฐํ์ด์ค (2) 2020.08.09