[TIL] 2025-01-23_StringUtils

Yuriยท2025๋…„ 1์›” 23์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
35/59
post-thumbnail

๐Ÿ“• Today I Learned - ์˜ค๋Š˜ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ•™์Šต๋…ธํŠธ

replace() / replaceAll()

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ replace()์™€ replaceAll()์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๋˜‘๊ฐ™์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ ๋‘ ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์•˜๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
String replace(CharSequence old, CharSequence new)๋ฌธ์ž์—ด ์ค‘์˜ ๋ฌธ์ž์—ด(old)์„ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด(new)๋กœ ๋ชจ๋‘ ๋ฐ”๊พผ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
String replaceAll(String regex, String replacement)๋ฌธ์ž์—ด ์ค‘์—์„œ ์ง€์ •๋œ ๋ฌธ์ž์—ด(regex)๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด(replacement)๋กœ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • charSequence: String, StringBuffer ๋“ฑ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค

replace()์™€ replaceAll() ๋ชจ๋‘ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฌธ์ž์—ด์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
์ฐจ์ด์ ์€ replaceAll()์€ ์ •๊ทœ ํ‘œํ˜„์‹(regular expression = regex)์— ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ „๋ถ€ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•œ๋‹ค.

๐Ÿ‘‰ replace(): old์˜ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ์ง€ ํ™•์ธ
replaceAll(): regex์˜ ์ •๊ทœ์‹์— ์ผ์น˜ํ•˜๋Š” ์ง€ ํ™•์ธ

StringUtils.hasText()

์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌ

  • ๋ฌธ์ž์—ด์ด null ์ด ์•„๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด์ด "" ์ด ์•„๋‹ˆ๋‹ค.
    • ๋ฌธ์ž์—ด์ด ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ด๋‹ค.

์กฐ๊ฑด๋ฌธ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด !(str == null || "".equals(str)) ์™€ ๊ฐ™๋‹ค.
์œ„์™€ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฒฐ๊ตญ "๋ฌธ์ž์—ด์ด ์œ ํšจํ•œ๊ฐ€?" ๋ผ๋Š” ์กฐ๊ฑด์„
null ์ฒดํฌ || ๊ณต๋ฐฑ ์ฒดํฌ ๋กœ ์—ฎ์–ด ๋†“์€ ํ˜•ํƒœ์™€ ๊ฐ™๋‹ค.

๋ฌธ์ž์—ด์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
(ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ๊ฐ’์ด null ์ด๋‚˜ "" ์œผ๋กœ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.)
springframework ์—์„œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ util ํŒจํ‚ค์ง€ ์•ˆ์— ๋‹ด์•„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ ์ค‘ StringUtils ๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ๋œ ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

StringUtils.hasText()

	@Contract("null -> false")
    public static boolean hasText(@Nullable CharSequence str) {
        if (str == null) {
            return false;
        } else {
            int strLen = str.length();
            if (strLen == 0) {
                return false;
            } else {
                for(int i = 0; i < strLen; ++i) {
                    if (!Character.isWhitespace(str.charAt(i))) {
                        return true;
                    }
                }

                return false;
            }
        }
    }

    @Contract("null -> false")
    public static boolean hasText(@Nullable String str) {
        return str != null && !str.isBlank();
    }
  • @Contract: ์ฝ”๋“œ ์ž‘๋™ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•  ๋ฟ ์ฝ”๋“œ ์ƒ์„ฑ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    "null -> false" : ์ธ์ˆ˜๋กœ null ์ด ๋“ค์–ด์˜ค๋ฉด false ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

hasText() ๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ช…์œผ๋กœ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์—ญํ• ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ์˜๋ฏธ ์ „๋‹ฌ์ด ๋” ์ž˜ ๋œ๋‹ค.
๊ฐœ๋ฐœ์ž๋Š” ๋ฌธ์ž์—ด ์œ ํšจ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์กฐ๊ฑด์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  SpringUtils์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ํผ์‚ฌ๋“œ ํŒจํ„ด(Facade Pattern)

๊ณผ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํผ์ง€ํ† ๋ฆฌ๋ฅผ ์˜์กดํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์˜€๊ณ , ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์—ญ์‹œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•œ ํ”์ ์ด ๋งŽ์ด ์žˆ์—ˆ๋‹ค. ๊ณผ์ œ์—์„œ๋Š” ์•„์ง ๋‘ ๊ฐœ ์ด์ƒ์˜ ์˜์กด์ด ์—†์ง€๋งŒ, ๋งŒ์•ฝ ๊ทธ๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜์˜ ์˜์กด๊ด€๊ณ„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์„œ๋น„์Šค์˜ ์—ญํ• ์ด ๊ณผํ•ด์ง„๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์„œ๋ธŒ ์‹œ์Šคํ…œ์€ ๋ชจ๋ฅธ์ฒด Facade ๊ฐ์ฒด์—๋งŒ ์˜์กดํ•˜๊ณ  Facade ๊ฐ์ฒด ์•ˆ์—์„œ ์‚ฌ์šฉํ•  Repository๋ฅผ ์ฃผ์ž…ํ•˜๋„๋ก ํ•˜์—ฌ ์ผ์ข…์˜ ์กฐํ•ฉ ์ „์šฉ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๐Ÿ”— ์ฐธ๊ณ ์ž๋ฃŒ
[Spring] ํ•œ Service๋Š” ์—ฌ๋Ÿฌ Repository๋ฅผ ์˜์กดํ•ด๋„ ๋ ๊นŒ?


๐Ÿ’ญ ์˜ค๋Š˜์€ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด์„œ TIL์— ์ž‘์„ฑํ•  ํ•™์Šต๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค! ๋‚จ์€ ๋‚ด์šฉ์€ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•  ์˜ˆ์ •์ด๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š” :)

0๊ฐœ์˜ ๋Œ“๊ธ€