8. ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์์น
by JiwonDev# ์ง์ญ๋ณ์์ ๋ฒ์๋ฅผ ์ต์ํ ํ๋ผ.
์ฌ์ด๋ ์ดํํธ๋ฅผ ์ต์ํํ๋ผ. ๋ฏธ๋ฆฌ ๋ง๋ค์ง๋ง๊ณ ์ฒ์ ์ฐ์ผ๋ ์ ์ธํ๋ผ.
์ง์ญ๋ณ์๋ฅผ ๋๋ ค์ฐ์ง๋ง๋ผ. ์ค์ฝํ๋ฅผ ์ต์ํํด์ ํ๊ฐ์ง ๊ธฐ๋ฅ์๋ง ์ง์คํ๋ผ.
# for ๋ฌธ๋ณด๋ค๋ for-each๋ฅผ ์ฌ์ฉํ๋ผ.
์ธ๋ฑ์ค ์ ๊ทผ์ ์ํํ๊ณ , ๋ณด๊ธฐ๋ ํํ๋ค ๐
๊ทผ๋ฐ ์ง์ญ๋ณ์๋ฅผ ์์ ํ๊ฑฐ๋, break, continue ๊ฐ์ ๋ถ๊ธฐ๊ฐ ์๋ค๋ฉด for-each ๋ง๊ณ ์คํธ๋ฆผ๊ณผ ๋๋ค๋ฅผ ํ์ฉํ์.
ArrayList<String> numbers = new ArrayList<String>();
numbers.add("one");
numbers.add("two");
numbers.add("three");
for(String number: numbers) {
System.out.println(number);
}
# ์ง์ ๋ง๋ค๊ธฐ์ ์ ์๋ ค์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๋ผ.
์๋ง์ ๊ณ ๋ฏผ์ ํ๊ณ ์ ๊ฒ์ ๋ง์น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ด ์ฝ๋์ ํ์ง์ ๋์ด๊ณ , ๊ฐ๋ฐ ํจ์จ์ ํฅ์ ์ํฌ ์ ์๋ค.
# ๋ถ๋์์์ ์ค์ฐจ๋ฅผ ์๊ฐํ๋ผ.
float๊ณผ double์ ๊ทผ์ฌ์น๋ฅผ ํํํ๋ค. ์์์ ์ ์ ํํ๊ฒ ํํํ ์ ์๋ค.
์ฆ 0.001 * 1000 = 1 ์์ ๋ณด์ฅํ ์ ์๋ค. ์ ํํ ์์๊ฐ์ด ํ์ํ๋ค๋ฉด BigDecimal ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ํ์.
public class Test {
@Test
public void ๋ถ์ ํํ_double() {
//given
double doubleMoney = 1.03;
//when
double result2 = doubleMoney - 0.42;
//then ์คํจ
assertThat(result2, is(0.61));//0.6100000000000001 ๋์จ๋ค!
}
}
# ๋ฐ์ฑ (๋ํผ)ํ์ ๋ณด๋ค๋ ๊ธฐ๋ณธ ํ์ ์ ์ฌ์ฉํ๋ผ.
๋ฐ์ฑ ํ์ ์ ๊ฐ์ฒด ์ฐธ์กฐ ๊ฐ์ ๊ฐ์ง๊ณ , null ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
ํ์ง๋ง ๊ทธ ๋งํผ ๊ฐ์ฒด๋ฅผ ๋ง๋๋๋ฐ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํจ์ ์ ์ํ์. ์ฑ๋ฅ์ ๊ธฐ๋ณธํ์ ์ด ๊ฐ์ฅ ๋น ๋ฅด๋ค.
# ๋ฌธ์์ด์ ๋ง ์ฌ์ฉํ์ง ๋ง๋ผ. ๋ค๋ฅธ ํ์ ์ด ์ ์ ํ๋ค๋ฉด, ๋ค๋ฅธ ํ์ ์ ์ฌ์ฉํ๋ผ.
๋ชจ๋ ๊ฑธ String์ผ๋ก ๋๋ ค๋ฐ์ง๋ง๋ผ. ๋น์ฐํ๊ฑฐ์ง๋ง, ์ฌ์ฉํ๊ธฐ ๋ฒ๊ฑฐ๋กญ๊ณ , t์ฑ๋ฅ๋ ๋์๊ณ , ๋ ์ ์ฐํ๊ณ , ์ค๋ฅ ๊ฐ๋ฅ์ฑ๋ ํฌ๋ค.
// ์์ธ๊ฑฐ ๊ฐ์ง๋ง, ์ค์ ์์คํ
์์ ์๋์ ๊ฐ์ ์ฝ๋๋ ํํ๋ค.
String compoundKey = className + "#" + i.next();
String memberRole = "admin";
๋ฌธ์์ด์ ๋์ enum, ๊ฐ ๊ฐ์ฒด, ์ปฌ๋ ์ ๋ฑ์ ํ์ฉํ๋ผ.
# ๋ฌธ์์ด ๋ง์ ์ ๋งค์ฐ ๋๋ฆฌ๋ค.
- ๋ง์ ์ดํ ์ฌ์ฉํ์ง ์๋ ๋ฌธ์์ด์ ํด์ ํ์ง ์๋๋ค. GC์ ์ผ๊ฑฐ๋ฆฌ๊ฐ ๋์ด๋๋ค.
- String์ ์์ํ์์ ๊ด๋ฆฌ๋๋ค. '์ถ๊ฐ' ํ๋๊ฒ ์๋๋ผ '์๋ก์ด ๋ฌธ์์ด'์ ๋ง๋๋ ๊ฒ ๋ง์ ์ด๋ค.
- JDK1.5 ๋ถํฐ๋ StingBuilder๋ก ๋ณํํด์ฃผ๊ธดํ์ง๋ง..๊ฐ๋ฅํ๋ฉด ๋ฌธ์์ด์ ๋ง๋๋๋ฐ ๋ง์ ์ ์ฌ์ฉํ์ง ๋ง์
- ๋ฌธ์์ด์ ์น๊ณ ๋ฏ๊ณ ํด์ผํ๋ค๋ฉด StringBuffer์ StringBuilder๋ฅผ ์ฌ์ฉํ์. Builder๋ ๋จ์ผ ์ค๋ ๋์ฉ๋์ด๋ค.
# ๊ฐ์ฒด๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐํ๋ผ.
์ ์ฐํ ์ฝ๋๋ฅผ ๋ง๋๋ ์ต๊ด์ ๊ธธ๋ฌ๋์. ์ด๋ ์ง์ ๋ง๋ ํด๋์ค๋ฟ๋ง ์๋๋ผ, ์ปฌ๋ ์ ์ ์ฌ์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง.
๋ฌผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ง๋๋ ๊ฑด ์ถ๊ฐ์ ์ธ ๋น์ฉ์ด ๋ค์ง๋ง, ์ด๋ฏธ ๋ง๋ค์ด์ง ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ด์ ๋ ์๋ค.
//์ข์ ์. ์ธํฐํ์ด์ค๋ฅผ ํ์
์ผ๋ก ์ฌ์ฉํ๋ค
Set<Dog> dogSet = new LinkedHashSet<>();
//๋์ ์. ํด๋์ค๋ฅผ ํ์
์ผ๋ก ์ฌ์ฉํ๋ค!!
LinkedHashSet<Dog> dogSet = new LinkedHashSet<>();
# ๋ฆฌํ๋ ์ ๋ณด๋ค๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ผ.
๋ฆฌํ๋ ์ ์ ๋ฐํ์์ ์ถ๊ฐ์ ์ธ ์์ ์ ํ๊ธฐ์, ์๋ชป์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ ์ํฅ์ ๋ผ์น๊ธฐ ์ฝ๋ค.
๋ํ ์ปดํ์ผ์ ํ์ ๊ฒ์ฌ ํํ์ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ณ ๋ถ์ํ๊ธฐ๋ ์ด๋ ค์์ง๋ค.
๋ฆฌํ๋ ์ ์ ๋ง๋ฒ์ ๋๊ตฌ๊ฐ ์๋๋ค. ์ธํฐํ์ด์ค๋ก ๊ฐ๋ฅํ๋ค๋ฉด, ๋ฆฌํ๋ ์ ๋์ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ๋๋ก ํ์.
// ๋ฆฌํ๋ ์
์ ์ธ์คํด์ค ์์ฑ์๋ง ์ฐ๊ณ , ์ด๋ ๊ฒ ๋ง๋ ์ธ์คํด์ค๋ ์ธํฐํ์ด์ค๋ ์์ ํด๋์ค๋ก ์ฐธ์กฐํด ์ฌ์ฉ.
// ์ด๋ ๊ฒ ๊ผญ ํ์ํ ๋ถ๋ถ์๋ง ์ฌ์ฉํ๊ณ , ์ธํฐํ์ด์ค๋ก ๋์ฒด๊ฐ๋ฅํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์.
@Test
public void test() {
Class<?> cl = null;
try {
cl = Class.forName("java.util.HashMap");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Map<String, String> map = null;
try {
map = (Map<String, String>) cl.newInstance();
} catch (InstantiationException e) {
...
} catch (IllegalAccessException e) {
...
}
map.put("์ด๋ฆ", "hashMap");
System.out.println(map.get("์ด๋ฆ"));
}
# ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ ์ ์คํ๊ฒ ์ฌ์ฉํ๋ผ.
์๋ฐ์๋ ๋ค๋ฅธ ์ฝ๋๋ก ์์ฑ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋์ JNI(์๋ฐ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค)๊ฐ ์กด์ฌํ๋ค.
public class JNI {
static {
System.loadLibrary("JNI");
}
private native int getNumber();
private native void printHelloWorld();
public static void main(String[] args){
JNI jni = new JNI();
jni.printHelloWorld(); //JNI๋ก ํธ์ถ ํ HelloWorld!
System.out.println(jni.getNumber()); //JNI๋ก ํธ์ถ ํ ์ซ์ ๋ฉ์๋
}
}
ํ์ง๋ง ์ฑ๋ฅ์ ๊ฐ์ ํ ๋ชฉ์ ์ด ์๋๋ผ๋ฉด, ๊ตณ์ด ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ์ฌ์ฉํ์ง ๋ง๋ผ.
์ฌ์ค ์ฑ๋ฅ์ด ๋ชฉ์ ์ด๋ผ๋, ์ฌ์ฉํด๋ ์ฑ๋ฅ์ด ๊ฐ์ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค. ์ด์ฉ ์ ์์ด ์ ์์ค ์์์ด๋ ์ด์์ฒด์ (C์ธ์ด) API ๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด ์ด๋ค๊ณ ํด๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ ์ต์ํ์ผ๋ก ์ฌ์ฉํ๋ผ. ๋ค์ดํฐ๋ธ ๋ฉ์๋์์ ๋ฒ๊ทธ๊ฐ ์๊ธฐ๋ฉด ๋ต์๋ค. ๋ชป์ฐพ๋๋ค.
# ์ต์ ํ๋ ์ ์คํ๊ฒ ํ๋ผ.
์ฑ๋ฅ ๋๋ฌธ์ ๊ฒฌ๊ณ ํ ๊ตฌ์กฐ๋ฅผ ํฌ์ํ์ง๋ง๋ผ.
๋น ๋ฅธ ํ๋ก๊ทธ๋จ๋ณด๋ค ์ข์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
https://www.youtube.com/watch?v=bIeqAlmNRrA&t=3030s
ํ๋ก์ ํธ๋ฅผ ๋ฆฌํํ ๋ง์ ํ๋ค๋ณด๋ฉด, ๊ธฐ์กด์ ๋ ๊ฑฐ์์ฝ๋ (๊ฐ์ฒด์งํฅ์ด ์ ์ฉ๋์ง์์ ๋๋ฌ์ด ์ฝ๋)๊ฐ ์ฑ๋ฅ์ด ๋ ์ข์ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ ์ ์ฐํ๊ณ ์ข์ ์ฝ๋๋ฅผ ๋ง๋๋๊ฒ ๋ง๋์ง, ์๋๋ฉด ๊ทธ๋ฅ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋จ๊ฒจ๋๋๊ฒ ๋ง๋์ง ๊ณ ๋ฏผ๋ฉ๋๋ค.
์ค์ ๋ก ๋ฆฌํํ ๋ง์ ํ๋ค๋ณด๋ฉด ์ฑ๋ฅ์ ์ด์๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. (๊ทธ๋งํผ ๊ฐ์ฒด๊ฐ ๋ ์ฌ์ฉ๋๋๊น)
ํ์ง๋ง ์๊ฐํด๋ณด์ธ์. ์ฌ๋ฌ๋ถ๋ค์ด ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ค๊ณ , ๋ฐ์นญํ์ ๋ ๊ทธ๋ฐ๊ฑธ๋ก ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ๋งํผ ๋ง์ ๊ณ ๊ฐ์ด ์ฌ๊น์?
์ธํ ์ ๋ฌด์ด์ ๋ฒ์น์ด๋ ๋ง์ด ์๋ฏ์ด, ํ๋์จ์ด๋ ๋ง๋์๋๋ ์๋๋ก ๋ฐ์ ํ๊ณ ์ ๋ ดํด์ง๊ณ ์์ต๋๋ค.
ํ์ง๋ง ๊ฐ๋ฐ์์ ์ธ๊ฑด๋น๋ ๋ฐ๋๋ก ์์นํ๊ณ ์์ฃ . ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ฑ์ด ๋๊ณ ํ์ฅ๊ฐ๋ฅํ๊ณ , ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ค๋๋ผ๋ ์ฌ์ฉํ ์ ์๋ ์ ์ฐํ ์ฝ๋๋ฅผ ๋ง๋๋๊ฒ ๋ ์ค์ํฉ๋๋ค.
์ฌ์ค ์ด์์ ํ๋ค๊ฐ ์ฑ๋ฅ์ด์๋ DB SQL์ด๋ ์ธ๋ถ API์์ ์๊ธฐ๋๊ฒ ๋๋ถ๋ถ์ด์ง, ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๊ฐ์ฒด๋ก ๊ฐ์ธ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ผ์น๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ต๋๋ค.
๋ฌผ๋ก ์ฌ๋ฌ๋ถ์ ์๋น์ค๊ฐ ๊ตฌ๊ธ, ํ์ด์ค๋ถ์ฒ๋ผ ์ด๋ง์ด๋งํ ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง๋ ๋๊ท๋ชจ ์๋น์ค๋ผ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น๊ฒ ์ง๋ง, ๊ทธ๊ฑด ๊ทธ๋๊ฐ์ ๋ ๊ฑฐ์์ฝ๋๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ๊ทธ ์์ ์๋ ํ์ฌ๊ฐ ์์ฒญ ํฌ๊ณ ์ด๋ฏธ ๋ด๋น ํ์ด ์์๊ฑฐ๋๊น ๊ณ ๋ฏผํ ๋ฌธ์ ๋ ์๋๋๋ค.
ํธ๋ ์ด๋ ์คํ๋ฅผ ์๊ฐํ์ธ์. ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ๊ฐ๋ ์ฑ์ ํฌ๊ธฐํ ๋งํผ์ ์ฑ๋ฅ ํฅ์์ด ์์ต๋๊น?
# ์ผ๋ฐ์ ์ผ๋ก ํต์ฉ๋๋ ์ด๋ฆ(๋ช ๋ช )๊ท์น์ ์ฌ์ฉํ๋ผ.
2021.06.30 - [๐ฑBackend/Java] - # 2. Java Naming Conventions
'๐ฑBackend > Effective-Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10. ์ง๋ ฌํ (0) | 2021.10.06 |
---|---|
9. ์์ธ(Exception) ์ ๋์์ฑ(๋ฉํฐ์ค๋ ๋) (0) | 2021.10.06 |
7. ๋๋ค์ ์คํธ๋ฆผ, ๋ฉ์๋ (0) | 2021.10.06 |
6-1 Enum๊ณผ @์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๋ผ. (0) | 2021.10.06 |
5-2 ์ ๋ค๋ฆญ, ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ, (+์ํผํ์ ๊ตฌํ๋ฐฉ๋ฒ) (0) | 2021.09.15 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev