CodeGym/Java Course/All lectures for KO purposes/์ธ๋ฑ์Šค: ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค: ์ธ๋ฑ์Šค

์‚ฌ์šฉ ๊ฐ€๋Šฅ

7.1 ์ง€์ˆ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์ด์œ 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†๋Š” ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค.

user ํ…Œ์ด๋ธ”์— ์ฒœ๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๊ณ  ๋ ˆ๋ฒจ์ด 90 ์ด์ƒ์ธ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋Š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ด ์ฟผ๋ฆฌ๋Š” ์ž‘์„ฑํ•˜๊ธฐ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

SELECT * FROM user WHERE level > 90

1๋ถ„๋„ ์•ˆ ๋˜์–ด ์š”์ฒญ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SQL ์„œ๋ฒ„์—์„œ ์ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฝ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด 1000๋งŒ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๊ณ  ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์–ด๋„ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.

Java์—์„œ ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๊นŒ? ๋จผ์ € ๋ ˆ๋ฒจ๋ณ„๋กœ ์‚ฌ์šฉ์ž ๋ชจ์Œ์„ ์ •๋ ฌํ•œ ๋‹ค์Œ ์ด์ง„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ ๋“ฑ๋ก ๋‚ ์งœ๊ฐ€ 2020๋…„ ์ด์ „์ธ ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋“ฑ๋ก ๋‚ ์งœ๋ณ„๋กœ ๋‹ค์‹œ ์ •๋ ฌํ•˜๊ณ  ์ด์ง„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ, ํ•œ ๋ฒˆ์ด ์•„๋‹ˆ๋ผ ์ž์ฃผ ์ผ๋ถ€ ํ•„๋“œ์— ๋Œ€ํ•ด ํ•„ํ„ฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ด ํ•„๋“œ๋ณ„๋กœ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ํ•„๋“œ๋กœ ๋™์‹œ์— ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋Œ€๋‹ต์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ๋ฑ์Šค๋ฅผ ์ผ๋ถ€ ์ „์—ญ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

id: ๋ฅผ ๊ฐ€์ง„ 10๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

๊ทธ๋ฆฌ๊ณ  ๋ ˆ๋ฒจ๋ณ„๋กœ ์ •๋ ฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ID ๋ฐฐ์—ด์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}.

๋‚ ์งœ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค {10, 1, 8, 7, 2, 3, 5, 9, 6}.

์ด๋Ÿฌํ•œ ID์˜ ๋ฐฐ์—ด์„ indexes ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ์š”์†Œ ์ž์ฒด๋Š” ํฌ๋ฏ€๋กœ ๋งŒ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ SQL์—์„œ๋Š” ์‹ค์ œ ๋ฌธ์ž์—ด์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ Java ์ฝ”๋“œ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y");  //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically

List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length

์ปฌ๋ ‰์…˜ ์ •๋ ฌ์€ ์‹ค์ œ ์š”์†Œ๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ์‹ค์ œ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. SQL ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์‹ค์„ ์€ ์Šค์Šค๋กœ์—๊ฒŒ ๊ฑฐ์ง“๋ง์„ ํ•˜๊ณ  ๊ฑฐ์ง“๋ง์„ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ํ•„๋“œ์— ๋Œ€ํ•ด ์ž์ฃผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ด๋ธ”์— ๋‹ค๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  (Java์˜ ์ƒˆ ์ปฌ๋ ‰์…˜๊ณผ ์œ ์‚ฌ) ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ์ •๋ ฌํ•˜๊ณ  ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ํŠน์ˆ˜ ์ธ๋ฑ์Šค ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Java ๋น„๊ต๊ฐ€ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์—ฐ์Šต - ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ™•์‹คํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

7.2 ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค ์ถ”๊ฐ€

์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์ฆ‰์‹œ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‘ ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ณ  ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง์ด ๋Š๋ ค์ง€๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

ALTER TABLE table
    ADD INDEX index_name (column);

๋™์‹œ์— ์—ฌ๋Ÿฌ ์—ด์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SQL์€ ์—ฌ๋Ÿฌ ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

ALTER TABLE table
    ADD INDEX index_name (column 1, column 2, column 3, ...);

์ธ๋ฑ์Šค๋Š” ๋งŽ์€ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ALTER TABLE table
    DROP INDEX index_name;

์ธ๋ฑ์Šค ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ˆจ๊ฒจ์ง„ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ฟผ๋ฆฌ ์ž‘์„ฑ ํ˜•์‹์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์กด์žฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง ์†๋„๋ฅผ ๋†’์ด๊ณ  ์ถ”๊ฐ€ ๋ฐ ๋ฐฑ์—… ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜๋‚  ์„ธ๊ณ„์—์„œ ์†๋„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€์™€ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ์ €๋ ดํ•œ์ง€๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ธ๋ฑ์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋‹˜ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค...

์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค