๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ธฐ๋ก/Beyond SW

Beyond SW 7๊ธฐ 4์ฃผ์ฐจ ํšŒ๊ณ ๋ก

by clean01 2024. 6. 9.

๐Ÿ€ ์ข‹์•˜๋˜ ์ 

DB ํŒ€ํ”Œ ๋

์ด๋ฒˆ ์ฃผ ์›”์š”์ผ์€ DB ํŒ€ํ”Œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐœํ‘œํ•˜๋Š” ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํŒ€์˜ DB ์„ค๊ณ„๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ "์ด๋Ÿฐ ์„ค๊ณ„๊ฐ€ ๋” ์ข‹๋„ค? ์•ž์œผ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด์•ผ์ง€"๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๊ณ , ๋ฐœํ‘œ๋ฅผ ๋“ค์œผ๋ฉด์„œ ์ง„์งœ ๋ฐœํ‘œ๋ฅผ ์ž˜ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ๋งŽ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋Š๋‚€ ๊ฒƒ์€ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋‹ค ๋‚˜์—ดํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค, ํ™•์‹คํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ ํฌ์ธํŠธ๋ฅผ ์ •ํ•ด์„œ ๊ทธ ๊ธฐ๋Šฅ์„ ์ค‘์ ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ๋ฐœํ‘œ๋ฅผ ๋“ฃ๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„œ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ํฅ๋ฏธ๊ฐ€ ์ƒ๊ฒผ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์— ํ˜น์‹œ ๋ฐœํ‘œ๋ฅผ ํ•˜๊ฒŒ ๋˜๊ฑฐ๋‚˜ ๊ฐ™์€ ํŒ€์›๋ถ„์˜ ๋ฐœํ‘œ๋ฅผ ํ”ผ๋“œ๋ฐฑ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ผญ ๊ธฐ์–ตํ•˜๋ฉด์„œ ๋ฐœํ‘œ๋ฅผ ์ค€๋น„ํ•˜๊ฑฐ๋‚˜ ํ”ผ๋“œ๋ฐฑ ํ•ด์ค˜์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œํ—˜์„ ์ž˜ ๋ด„

์–ด์ฉŒ๋‹ค ์‹œํ—˜์„ ์ž˜๋ด์„œ ์ƒํ’ˆ์œผ๋กœ ์ปคํ”ผ ์ฟ ํฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค,,, ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ

๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ๋„ ์Šค๋ฒ… ์ฟ ํฐ์— ์งง์€ ์นด๋“œ๊นŒ์ง€ ์จ์ฃผ์…”์„œ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.. ๐Ÿฅน

์ง€๊ธˆ๊นŒ์ง€๋Š” ํ•œ๋ฒˆ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋Œ€๋ถ€๋ถ„์ด์„œ ๋ณต์Šตํ•˜๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๋Š” ๋‚ด์šฉ๋“ค์ด ๋‚˜์˜ค๋‹ˆ๊นŒ ์ดˆ์‹ฌ ์žƒ์ง€๋ง๊ณ  ์—ด์‹ฌํžˆ ๋ณต์Šตํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜ข ๋ถ€์กฑํ•œ ์ 

๋„ํŒŒ๋ฏผ ์ค‘๋… ๐Ÿ˜ตโ€๐Ÿ’ซ

์ด๋ฒˆ ์ฃผ์— ํฐ์„ ์™œ์ผ€ ๋งŽ์ด ๋ดค๋Š”์ง€,,,

๋””ํ”„๋งŒ ํ™œ๋™์ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘๋ผ์„œ ํ‰์ผ ์ €๋…์— ๊ฝค ๊ธด ์‹œ๊ฐ„ ํšŒ์˜๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ชธ์ด ์ ์‘ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋Š”์ง€, ์ด๋ฒˆ ์ฃผ์— ํ›… ํ”ผ๊ณคํ•˜๋‹ค๊ณ  ๋Š๋‚€ ๋•Œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์™œ์ธ์ง€ ํ”ผ๊ณคํ•˜๋ฉด ์ž๊พธ ์œ ํˆฌ๋ธŒ, ์ธ์Šคํƒ€ ๊ฐ™์€ ๋„ํŒŒ๋ฏผ์„ ์ฃผ์ฒดํ•  ์ˆ˜ ์—†์ด ์ž๊พธ ์ฐพ๊ฒŒ ๋œ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

(๋„ํŒŒ๋ฏผ๋„ค์ด์…˜์—์„  ๊ณ ํ†ต์ด ํฌ๋ฉด ๊ณ ํ†ต-์พŒ๋ฝ์˜ ์ €์šธ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋„ํŒŒ๋ฏผ์„ ์ฐพ๊ฒŒ ๋œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ํ”ผ๊ณคํ•ด์„œ ๊ณ ํ†ต์Šค๋Ÿฌ์›Œ์„œ ๊ทธ๋Ÿฐ ๊ฑธ๊นŒ์š”)

๋ฐ”๋น ์ง -> ์‹œ๊ฐ„์„ ์•„๊ปด ์จ์•ผ ํ•œ๋‹ค๋Š” ์‹ฌ๋ฆฌ์  ๋ถ€๋‹ด๊ฐ -> ์‰ฌ๋ฉด ์ฃ„์ฑ…๊ฐ(?) ๋“ค์–ด์„œ ๋ชป ์‰ผ -> ํ”ผ๊ณคํ•ด์ง -> ํ”ผ๊ณคํ•ด์„œ ํšจ์œจ๋„ ๋–จ์–ด์ง€๊ณ  ์ž๊พธ ์œ ํˆฌ๋ธŒ ๋ณด๊ฒŒ ๋จ -> ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐ„ ๋‚ญ๋น„

์ด๋ฒˆ ์ฃผ๋Š” ์ด๋Ÿฐ ์•…์ˆœํ™˜์„ ๋ฐŸ๊ฒŒ๋œ ๊ฒƒ ๊ฐ™์•„ ์ข€ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.


๐Ÿ“– ๋ฐฐ์šด ์ 

์ด๋ฒˆ์ฃผ๋Š” ์ž๋ฐ”์˜ ๊ธฐ์ดˆ์ ์ธ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋Š”๋ฐ, String๊ณผ ๊ด€๋ จํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šฐ๋Š” ์‹œ๊ฐ„์ด ์œ ์ตํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

StringBuffer์™€ StringBuilder

๋‘˜ ์ค‘ ๋ˆ„๊ฐ€ thread-safe์ด๊ณ , ๋ˆ„๊ฐ€ thread-unsafe์ด์—ˆ์ง€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ, ์ˆ˜์—…์„ ๋“ค์œผ๋ฉด์„œ StringBuffer๊ฐ€ thread-safe, StringBuilder๊ฐ€ thread-unsafe์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€๋•Œ StringBuilder๋ฅผ ์“ฐ๋ฉด append() ๋ฉ”์†Œ๋“œ ์ •๋„๋งŒ ํ™œ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, insert(), delete() ๋ฉ”์†Œ๋“œ์˜ ์กด์žฌ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • insert ๋ฉ”์†Œ๋“œ: StringBuilder์˜ ์ธ๋ฑ์Šค(์ฒซ๋ฒˆ์งธ ์ธ์ž)๋ฒˆ์งธ์— ๋ฌธ์ž์—ด(๋‘๋ฒˆ์งธ ์ธ์ž) ๋ผ์›Œ๋„ฃ๊ธฐ
sb.insert(์ธ๋ฑ์Šค, ๋ฌธ์ž์—ด); sb.insert(5, "python");
  • delete ๋ฉ”์†Œ๋“œ: ์ฒซ๋ฒˆ์งธ ์ธ์ž ~ (๋‘๋ฒˆ์งธ ์ธ์ž - 1) ๋งŒํผ ๋ฌธ์ž์—ด ์‚ญ์ œ
sb.delete(์ธ๋ฑ์Šค1, ์ธ๋ฑ์Šค2); sb.delete(17, sb1.length());

strip() ๋ฉ”์†Œ๋“œ

trim() ๋ฉ”์†Œ๋“œ๋Š” ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๋ฌธ์ž์—ด ์–‘์˜†์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ค‘ strip() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

join() ๋ฉ”์†Œ๋“œ

String ๋ฐฐ์—ด์„ ํ•œ๋ฒˆ์— concatํ•ด์„œ ํ•˜๋‚˜์˜ String์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    String[] sArr = {"java", "python", "C++", "javascript"};
    st = String.join(" ", sArr); // ๊ฒฐ๊ณผ: "java python C++ javascript"

๋ฌธ์ž์—ด์˜ ๋Œ€์†Œ๋ฌธ์ž (๋ฌธ์ž์—ด1.equalsIgnoreCase(๋ฌธ์ž์—ด2), ๋ฌธ์ž์—ด.toUpperCase(), ๋ฌธ์ž์—ด.toLowerCase())

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€ ๋•Œ ๊ฐ€๋” "๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋น„๊ตํ•˜๋ผ"๋Š” ์กฐ๊ฑด์ด ๋‚˜์˜ฌ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ๋•Œ๋งˆ๋‹ค ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ๊ธฐ์–ต์ด ์•ˆ๋‚˜์„œ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ์ˆ˜์—… ๋“ค์œผ๋ฉด์„œ equalsIgnoreCase(), toUpperCase(), toLowerCase()์— ๋Œ€ํ•ด ๋ฐฐ์› ์œผ๋‹ˆ๊นŒ, ๊ผญ ๊ธฐ์–ตํ•ด์„œ ๋ ˆํผ๋Ÿฐ์Šค ๋ณด์ง€ ์•Š๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๊นŒ๋จน์„ ์ˆ˜ ์žˆ์„๊นŒ...

์ •๊ทœ์‹๊ณผ matches(), Patterens.matches() ๋ฉ”์†Œ๋“œ

๋งŽ์ด ์“ฐ์ด๋Š” ์ •๊ทœ์‹์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌผ๋ก  ๋ณต์žกํ•œ ์ •๊ทœ์‹์€ ๋‚˜์ค‘์— gptํ•œํ…Œ ๋ฌผ์–ด๋ณด๊ฒ ์ง€๋งŒ, ๊ฐ„๋‹จํ•œ ์ •๊ทœ์‹์„ ์–ด๋Š์ •๋„ ์ฝ์„ ์ค„ ์•Œ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์œ ์ตํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    //== matches์™€ Pattern.matches() ==//
    String test = "helloA";
    System.out.println(test.matches("[A-Za-z]+")); // ์˜๋ฌธ์ž๋กœ๋งŒ ์ด๋ค„์ ธ์žˆ๋Š”์ง€. true
    boolean b1 = Pattern.matches("[0-9]+", "12345hello"); // ์ˆซ์ž๋กœ๋งŒ ์ด๋ค„์ ธ ์žˆ๋Š”์ง€. false
    System.out.println(b1);

    // ์ „ํ™”๋ฒˆํ˜ธ ํฌ๋งท ๊ฒ€์ฆ
    boolean b2 = Pattern.matches("^\\d{3}-\\d{4}-\\d{4}$", number);

    // ์ด๋ฉ”์ผ ํฌ๋งท ๊ฒ€์ฆ
    boolean b3 = Pattern.matches("^[a-z0-9]+@[a-z]+.com$", email);

๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ์—ญ์ˆœ ์ •๋ ฌํ•˜๊ธฐ with stream

์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ Comparator ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ Comparable์„ ๊ตฌํ˜„ํ•˜๋ฉด ์›ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š”๊ฒŒ ๋น„๊ต์  ์‰ฌ์šด๋ฐ, ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€ ์ข€ ์–ด๋ ต๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. (ex. ์—ญ์ˆœ ์ •๋ ฌ)
๊ทธ๋Ÿฐ๋ฐ ์ˆ˜์—…์‹œ๊ฐ„์— stream์œผ๋กœ ์—ญ์ˆœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. (Integer๋กœ ๋ณ€ํ™˜ ํ›„ ์ •๋ ฌํ•˜๊ณ  ๋‹ค์‹œ int๋กœ ๋ณ€ํ™˜)

์ €๋Š” ์‚ฌ์‹ค ์•„์ง stream์„ ์“ฐ๋Š”๋ฐ ์ต์ˆ™์น˜ ์•Š์€๋ฐ ๋นจ๋ฆฌ ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

    // ๋ฐฉ๋ฒ• 2. stream api์™€ lambda๋ฅผ ํ™œ์šฉํ•œ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
    int[] answer = Arrays.stream(intArr) // intArr์„ ๋Œ€์ƒ์œผ๋กœ stream ๊ฐ์ฒด ์ƒ์„ฑ. stream์ด๋ผ๋Š” ๊ฒƒ์€ int ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
        .boxed() // int ์š”์†Œ๋ฅผ Integer๋กœ ํ˜•๋ณ€ํ™˜ ์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ
        .sorted(Comparator.reverseOrder())
        .mapToInt(a -> a) // Integer๋ฅผ ๋‹ค์‹œ int๋กœ ํ˜•๋ณ€ํ™˜
        .toArray(); // ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

๋ฌธ์ž์—ด ๊ฟ€ํŒ(?)

  • ์ค‘๊ฐ„์— ๊ณต๋ฐฑ ์—ฌ๋Ÿฌ๊ฒŒ ์žˆ์„ ๋•Œ, ์ž˜๋ผ์„œ String ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ธฐ -> ๊ณต๋ฐฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด์Šค์ผ€์ดํ”„์‹œํ€€์Šค \s ๋’ค์— + ๋ถ™์—ฌ์ฃผ๋ฉด ํ•ด๊ฒฐ!("\s+")

      String b = "a b c  d";
      String[] bArr = b.split("\\s+");

๐ŸŒฑ ๊ฐœ์„ ํ•  ์ 

ํ”ผ๊ณคํ•˜์ง€ ์•Š๊ฒŒ ์ž  ๋งŽ์ด ์ž๊ธฐ!

๋ญ”๊ฐˆ ๋” ๋งŽ์ด ํ•˜๊ณ  ์‹ถ์–ด์„œ ๋Šฆ๊ฒŒ ์ž๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋Šฅ๋ฅ ์ด ๋–จ์–ด์ ธ์„œ ๋” ์•ˆ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ž ์ž๋Š” ์‹œ๊ฐ„์„ ๋” ์•ž๋‹น๊ฒจ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋Š˜์€ 10์‹œ ๋ฐ˜์— ์ž๋Š” ๊ฒƒ์— ๋„์ „ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..!

1์ผ 1 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•˜๊ธฐ!

์š”์ฆ˜์€ ์ˆ˜์—…์‹œ๊ฐ„ ํ‹ˆํ‹ˆ์ด ํ’€์–ด์„œ 1์ผ 1๋ฌธ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์•ž์œผ๋กœ๋Š” ์ ์  ํ’€์‹œ๊ฐ„์ด ์—†์–ด์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•„๋ฌด๋ฆฌ ๋ฐ”๋น ์ ธ๋„ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ํ•˜๋ฃจ์— ํ•œ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.