๐ Today I Learned - ์ค๋ ๋ด๊ฐ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํฉ๋๋ค.
์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ์นํํ๋ ๋ฉ์๋ replace()์ replaceAll()์ ๊ฒฐ๊ณผ๊ฐ์ด ๋๊ฐ์ด ๋์ค๋ ๊ฒ์ ํ์ธํ์ฌ ๋ ๋ฉ์๋์ ์ฐจ์ด์ ์ ์์๋ณด์๋ค.
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
| String replace(CharSequence old, CharSequence new) | ๋ฌธ์์ด ์ค์ ๋ฌธ์์ด(old)์ ์๋ก์ด ๋ฌธ์์ด(new)๋ก ๋ชจ๋ ๋ฐ๊พผ ๋ฌธ์์ด์ ๋ฐํํ๋ค. |
| String replaceAll(String regex, String replacement) | ๋ฌธ์์ด ์ค์์ ์ง์ ๋ ๋ฌธ์์ด(regex)๊ณผ ์ผ์นํ๋ ๊ฒ์ ์๋ก์ด ๋ฌธ์์ด(replacement)๋ก ๋ชจ๋ ๋ณ๊ฒฝํ๋ค. |
replace()์ replaceAll() ๋ชจ๋ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ฌธ์์ด์ ๋ฐ์ ์ ์๋ค.
์ฐจ์ด์ ์ replaceAll()์ ์ ๊ท ํํ์(regular expression = regex)์ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ ๋ถ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ์นํํ๋ค.
๐ replace(): old์ ๋ฌธ์์ด๊ณผ ๋น๊ตํ์ฌ ์ผ์นํ๋ ์ง ํ์ธ
replaceAll(): regex์ ์ ๊ท์์ ์ผ์นํ๋ ์ง ํ์ธ
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ด ์ ํจํ์ง ๊ฒ์ฌ
์กฐ๊ฑด๋ฌธ์ผ๋ก ํํํ๋ฉด !(str == null || "".equals(str)) ์ ๊ฐ๋ค.
์์ ๊ฐ์ด ์ธ ์ ์์ง๋ง, ๊ฒฐ๊ตญ "๋ฌธ์์ด์ด ์ ํจํ๊ฐ?" ๋ผ๋ ์กฐ๊ฑด์
null ์ฒดํฌ || ๊ณต๋ฐฑ ์ฒดํฌ ๋ก ์ฎ์ด ๋์ ํํ์ ๊ฐ๋ค.
๋ฌธ์์ด์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์์ ์์ฃผ ์ฌ์ฉํ๋ค.
(ํด๋ผ์ด์ธํธ์์ ์
๋ ฅํ์ง ์์ ๊ฐ์ด null ์ด๋ "" ์ผ๋ก ์ฌ ์ ์๋ค.)
springframework ์์๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ util ํจํค์ง ์์ ๋ด์ ์ ๊ณตํ๋ค. ๊ทธ ์ค StringUtils ๋ ๋ฌธ์์ด๊ณผ ๊ด๋ จ๋ ํธ๋ฆฌํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
@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();
}
"null -> false" : ์ธ์๋ก null ์ด ๋ค์ด์ค๋ฉด false ๊ฐ ๋ฐํ๋๋ค.hasText() ๋ผ๋ ๋ฉ์๋๋ช
์ผ๋ก ๋ฌธ์๋ฅผ ํฌํจํ๊ณ ์๋ ์ง ๊ฒ์ฌํ๋ ์ญํ ์์ ์ ์ ์์ด ์ฝ๋์ ์๋ฏธ ์ ๋ฌ์ด ๋ ์ ๋๋ค.
๊ฐ๋ฐ์๋ ๋ฌธ์์ด ์ ํจ์ฑ๊ณผ ๊ด๋ จ๋ ์กฐ๊ฑด์ ์ง์ ์์ฑํ์ง ์๊ณ SpringUtils์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ณผ์ ๋ฅผ ๊ตฌํํ๋ฉด์ ํ๋์ ์๋น์ค์์ ์ฌ๋ฌ ๊ฐ์ ๋ ํผ์งํ ๋ฆฌ๋ฅผ ์์กดํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ์๊ณ , ๊ฒ์ํด๋ณด๋ ์ญ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด์ ๊ฐ์ ๊ณ ๋ฏผ์ ํ ํ์ ์ด ๋ง์ด ์์๋ค. ๊ณผ์ ์์๋ ์์ง ๋ ๊ฐ ์ด์์ ์์กด์ด ์์ง๋ง, ๋ง์ฝ ๊ทธ๋ณด๋ค ๋ ๋ง์ ์์ ์์กด๊ด๊ณ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์๋น์ค์ ์ญํ ์ด ๊ณผํด์ง๋ค.
ํด๋ผ์ด์ธํธ๋ ๋ณต์กํ๊ฒ ์ฝํ ์๋ธ ์์คํ ์ ๋ชจ๋ฅธ์ฒด Facade ๊ฐ์ฒด์๋ง ์์กดํ๊ณ Facade ๊ฐ์ฒด ์์์ ์ฌ์ฉํ Repository๋ฅผ ์ฃผ์ ํ๋๋ก ํ์ฌ ์ผ์ข ์ ์กฐํฉ ์ ์ฉ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
[Spring] ํ Service๋ ์ฌ๋ฌ Repository๋ฅผ ์์กดํด๋ ๋ ๊น?
๐ญ ์ค๋์ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด์ TIL์ ์์ฑํ ํ์ต๋ด์ฉ์ด ๋๋ฌด ๋ง๋ค! ๋จ์ ๋ด์ฉ์ ํธ๋ฌ๋ธ์ํ ์ผ๋ก ์ ๋ฆฌํ์ฌ ํฌ์คํ ํ ์์ ์ด๋ค.