[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. (Comparable ๊ตฌํ˜„ ๋ฐฉ๋ฒ• #2)

2023. 2. 6. 14:58ใ†JAVA/Effective JAVA

728x90

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ.

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. (Comparable ๊ตฌํ˜„ ๋ฐฉ๋ฒ• #1) (tistory.com)

 

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. (Comparable ๊ตฌํ˜„ ๋ฐฉ๋ฒ• #1)

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. (compareTo ๊ธฐ๋ณธ ๊ทœ์•ฝ) (tistory.com) [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ผ. (co

hyejin.tistory.com

์ €๋ฒˆ ๊ธ€์—์„œ๋Š” Comparable์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฒซ๋ฒˆ์งธ๋กœ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  compareTo ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. 

 

 

 

๐Ÿ‘พ ์ž๋ฐ”8์—์„œ๋Š” Comparator ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ผ๋ จ์˜ ๋น„๊ต์ž ์ƒ์„ฑ ๋ฉ”์„œ๋“œ(comparator construction method)์„ ์‚ฌ์šฉํ•ด ๋ฉ”์„œ๋“œ ์—ฐ์‡„ ๋ฐฉ์‹์œผ๋กœ ๋น„๊ต์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

-> ์ž๋ฐ”8๋ถ€ํ„ฐ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค, ๋žŒ๋‹ค, ๋ฉ”์„œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค์™€ Compartor๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ์™€ static ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Comparator๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

Compartor๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• 

1๏ธโƒฃ Compartor์˜ static ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Comparator ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ 

private static final Comparator<PhoneNumber> COMPARATOR =

 

2๏ธโƒฃ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด default ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ด์–ด๊ฐ€๊ธฐ (๋ฉ”์„œ๋“œ ์ฒด์ด๋‹) 

private static final Comparator<PhoneNumber> COMPARATOR =
      Comparator.comparingInt((PhoneNumber pn) -> pn.areaCode)
      .thenComparing(pn -> pn.prefix)
      .thenComparing(pn -> pn.lineNum);

-> ์ด ์ฝ”๋“œ๋Š” ๋น„๊ต์ž ์ƒ์„ฑ ๋ฉ”์„œ๋“œ 2๊ฐœ๋ฅผ ์ด์šฉํ•ด ๋น„๊ต์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

๋จผ์ € comparingInt๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ int ํƒ€์ž… ํ‚ค์— ๋งคํ•‘ํ•˜๋Š” ํ‚ค ์ถ”์ถœ ํ•จ์ˆ˜(key extractor function)๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›์•„, ๊ทธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๋น„๊ต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ๋‹ค. 

 

์—ฌ๊ธฐ์„œ๋Š” PhoneNumber์—์„œ ์ถ”์ถœํ•œ ์ง€์—ญ ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” Compartor<PhoneNumber>๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๋‘ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ง€์—ญ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋น„๊ต ๋ฐฉ์‹์„ ๋” ๋‹ค๋“ฌ๊ธฐ ์œ„ํ•ด์„œ ๋‘๋ฒˆ์งธ ๋น„๊ต์ž ์ƒ์„ฑ ๋ฉ”์„œ๋“œ thenComparingInt๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค. thenComparingInt๋Š” Comparator์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋กœ,  int ํ‚ค ์ถ”์ถœ์ž ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์‹œ ๋น„๊ต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

 

 

3๏ธโƒฃ  static ๋ฉ”์„œ๋“œ์™€ default ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

@Override
public int compareTo(PhoneNumber pn)
{
   return COMPARATOR.compare(this, pn);
}

 

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๊ฒฐ๋ก  

์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ฐ’ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๊ผญ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ทธ ์ธ์Šคํ„ด์Šค๋“ค์„ ์‰ฝ๊ฒŒ ์ •๋ ฌํ•˜๊ณ , ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋น„๊ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ปฌ๋ ‰์…˜๊ณผ ์–ด์šฐ๋Ÿฌ์ง€๋„๋ก ํ•ด์•ผํ•œ๋‹ค!! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90