๐ŸŽฎ

3์žฅ ์ •๋ฆฌ

 

3.3 ์ธ์ž์˜ ๊ฐ’์œผ๋กœ NULL์„ ์ ˆ๋Œ€ ํ—ˆ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”

๐Ÿค”
์ฝ”๋“œ ์–ด๋”˜๊ฐ€์— NULL์ด ์กด์žฌํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ปค๋‹ค๋ž€ ์‹ค์ˆ˜๋ฅผ ์ €์ง€๋ฅด๊ณ  ์žˆ๋‹ค?
  • NULL์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋” ํŽธ๋ฆฌํ•˜๊ณ  ๊ฒฝ์ œ์ ์ธ ์ ‘๊ทผ๋ฐฉ๋ฒ• ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๊ณ , ๋…ผ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์˜ ํ–‰๋™์„ ์˜จ์ „ํžˆ ์ฑ…์ž„์ง„๋‹ค๋Š” ๊ฐ์ฒด ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ๋Š” ์ƒ๋ฐ˜๋˜๋Š” ์•„์ด๋””์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
public Iterable<File> find(String mask) { if (mask == null) { // ๋ชจ๋“  ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. } else { // ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. } } // ๊ฐœ์„ ์ฝ”๋“œ 1 public Iterable<File> find(Mask mask) { if(mask.empty()) { // ๋ชจ๋“  ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. } else { // ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. } } // ๊ฐœ์„ ์ฝ”๋“œ 2 public Iterable<File> find(Mask mask) { Collection<File> files = new LinkedList<>(); for (File file : //๋ชจ๋“ ํŒŒ์ผ) { if(mask.matches(file)) { file.add(file); } } return files; }
  • Mask ๊ฐ์ฒด๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์กด์ค‘ํ–ˆ๋‹ค๋ฉด Mask ๊ฐ์ฒด ์Šค์Šค๋กœ ์กฐ๊ฑด์กด์žฌ์˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.
  • ๊ฒ‰๋ชจ์Šต๋งŒ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ํŒ๋‹จํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. โ€œ์ง„์งœ"๊ฐ์ฒด๋ผ๋ฉด ๋Œ€ํ™”์— ์‘ํ•  ๊ฒƒ์ด๋ฉฐ NULL์ด๋ฉด ๋Œ€์‘ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์‹์œผ๋กœ ๊ฐ์ฒด์™€ ์˜์‚ฌ์†Œํ†ตํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • ์ธ์ž ๊ฐ’์œผ๋กœ NULL์„ ํ—ˆ์šฉํ•˜๋ฉด mask==null๊ณผ ๊ฐ™์€ ๋น„๊ต๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ณ , ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ์ฒด์˜ โ€œ์‹ค์ฒด"๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” NULL์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
  • ๋˜ํ•œ NULL ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•จ์œผ๋กœ์จ ๊ฐ์ฒด๊ฐ€ ๋งก์•„์•ผ ํ•˜๋Š” ์ƒ๋‹น๋Ÿ‰์˜ ์ฑ…์ž„์„ ๋นผ์•—๊ฒŒ ๋œ๋‹ค.
 

๊ฒฐ๋ก 

  • ์ด ๋ถ€๋ถ„์€ ๋‹จ์ง€ NULL์„ ์ฒดํฌํ•ด์„œ ๋ฐฉ์ง€ํ•˜์ง€๋ง๊ณ  NULL์„ ๋นจ๋ฆฌ ์ฐพ์•„์„œ ๋Œ€์‘ํ•ด์„œ NULL์ฐธ์กฐ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋ผ๋Š” ๋ง์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
 

3.4 ์ถฉ์„ฑ์Šค๋Ÿฌ์šฐ๋ฉด์„œ ๋ถˆ๋ณ€์ด๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ์ƒ์ˆ˜์ด๊ฑฐ๋‚˜

  • ์„ธ์ƒ์€ ๊ฐ€๋ณ€์  ์ด์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ์„ธ์ƒ์„ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ์ƒํƒœ์™€ ๊ฐœ๋…์— ๋Œ€ํ•ด ์งš๊ณ  ๋„˜์–ด๊ฐˆ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
class WebPage { private final URI uri; WebPage(URI path) { this.uri = path; } public String content() { // HTTP GET ์š”์ฒญ์„ ์ „์†กํ•ด์„œ // ์›น ํŽ˜์ด์ง€์˜ ์ปจํ…์ธ ๋ฅผ ์ฝ์€ ํ›„ // ์ฝํ˜€์ง„ ์ปจํ…์ธ ๋ฅผ UTF-8 ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. } }
 
  • ๋ถˆ๋ณ€๊ฐ์ฒด๋ฅผ ์ƒ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.
    • ์ผ๋‹จ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•จ
  • ํ•˜์ง€๋งŒ ์ด ๊ทธ๋ฆผ์€ ๋ถˆ์™„์ „ํ•œ ๊ทธ๋ฆผ์ด๋‹ค. ์ƒ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๊ฐ์ฒด๋Š” ๋‹จ์ง€ ๋ถˆ๋ณ€์„ฑ์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋ถˆ๋ณ€๊ฐ์ฒด๋Š” ๊ทธ ์ด์ƒ์ด๋‹ค. ๋น„๋ก content() ๋ฉ”์„œ๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋”๋ผ๋„ WebPage๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์— ์†ํ•œ๋‹ค.
  • WebPage ํด๋ž˜์Šค๋Š” ์‹ค์ œ ์›น ํŽ˜์ด์ง€์™€ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด ๊ฐ์ฒด๊ฐ€ ๋ฌด์—‡์„ ๋Œ๋ ค์ค„์ง€ ์•Œ ์ง€ ๋ชปํ•œ๋‹ค.
  • ์ด๋Ÿฐ ์ธก๋ฉด์—์„œ WebPage๊ฐ€ String ํด๋ž˜์Šค์™€ ๋‹ค๋ฅด์ง€๋งŒ WebPage ์—ญ์‹œ String์ฒ˜๋Ÿผ ๋ถˆ๋ณ€์ด๋‹ค.
  • ๊ฐ์ฒด์˜ ํ–‰๋™์„ ์˜ˆ์ธกํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ด ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€์ด๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ฐ์ฒด๊ฐ€ ๋Œ€ํ‘œํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์— ์ถฉ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
 

๊ฒฐ๋ก