2023. 1. 25. 11:05ใJAVA/Effective JAVA
item08. finalizer์ cleaner ์ฌ์ฉ์ ํผํ๋ผ.
" p45. ์ ์ ์ด ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค. & ๋๋ค ์ญ์ ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ์ฝ๋ค. "
https://hyejin.tistory.com/1011
์ฌ๊ธฐ์ State ์ธ์คํด์ค๋ Room ์ธ์คํด์ค๋ฅผ ์ ๋๋ก ์ฐธ์กฐํ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์ ์ ์ค์ฒฉ ํด๋์ค๋ก ์์ฑํ๋ค.
Room ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ์ ์ํ์ฐธ์กฐ๊ฐ ์๊ฒจ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ Room ์ธ์คํด์ค๋ฅผ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์ฒฉ ํด๋์ค๋ก ๋ง๋ค ๊ฒฝ์ฐ์ static์ผ๋ก ๋ง๋ค์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ํ์ฐธ์กฐ๊ฐ ์๊ฒจ์ Room ์ธ์คํด์ค๋ฅผ ํ์ํด ๊ฐ์ง ์๋๋ค.
package chapter01.item08.outerclass;
import java.lang.reflect.Field;
/**
* item08. finalizer ์ cleaner ์ฌ์ฉ์ ํผํ๋ผ.
* ์๋ฒฝ๊ณต๋ต - ์ ์ ์ด ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค.
*/
public class OuterClass {
private void hi() {
}
class InnerClass {
public void hello() {
OuterClass.this.hi(); // ์ ์ ์ด ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค.
}
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
InnerClass innerClass = outerClass.new InnerClass();
System.out.println("innerClass = " + innerClass);
outerClass.printField();
}
private void printField() {
Field[] declaredFields = InnerClass.class.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("field type : " + declaredField.getType());
System.out.println("field name : " + declaredField.getName());
}
}
}
package chapter01.item08.outerclass;
import java.lang.reflect.Field;
/**
* item08. finalizer ์ cleaner ์ฌ์ฉ์ ํผํ๋ผ.
* ์๋ฒฝ๊ณต๋ต - ์ ์ ์ด ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๋๋ค.
*/
public class OuterClass {
class InnerClass {
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
InnerClass innerClass = outerClass.new InnerClass();
System.out.println("innerClass = " + innerClass);
outerClass.printField();
}
private void printField() {
Field[] declaredFields = InnerClass.class.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("field type : " + declaredField.getType());
System.out.println("field name : " + declaredField.getName());
}
}
}
-> ๋ฐ๊นฅ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ฐ๊นฅ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ ๊ฒ ์ ์ ์ค์ฒฉ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ๊นฅ ํด๋์ค์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์ทํ๊ฒ ๋๋ค ์ญ์ ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ์ฌ์ฐ๋ฏ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
package chapter01.item08.outerclass;
import java.lang.reflect.Field;
/**
* item08. finalizer ์ cleaner ์ฌ์ฉ์ ํผํ๋ผ.
* ์๋ฒฝ๊ณต๋ต - ๋๋ค ์ญ์ ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ์ฝ๋ค.
*/
public class LambdaExample {
private int value = 10;
private Runnable instanceLambda = () -> {
System.out.println(value); // static์ด ์๋๋ฉด ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กธ๋ฅผ ๊ฐ๊ธฐ ์ฝ๋ค.
};
public static void main(String[] args) {
LambdaExample example = new LambdaExample();
Field[] declaredFields = example.instanceLambda.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("field type : " + declaredField.getType());
System.out.println("field name : " + declaredField.getName());
}
}
}
public class LambdaExample {
private static int value = 10;
private static Runnable instanceLambda = () -> {
System.out.println(value); // static์ด ์๋๋ฉด ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ์ฝ๋ค.
};
public static void main(String[] args) {
LambdaExample example = new LambdaExample();
Field[] declaredFields = example.instanceLambda.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("field type : " + declaredField.getType());
System.out.println("field name : " + declaredField.getName());
}
}
}
๊ทผ๋ฐ static์ผ๋ก ํ๋ฉด ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ํ์ง ์๋๋ค.
๐ฅ ๋ฐ๋ผ์ ์ ์ ์ด ์๋ ์ค์ฒฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ ์ค์ฒฉ ํด๋์ค๋ก ๋ง๋ค์ด ์ค์ผ ํ๊ณ , ๋น์ทํ๊ฒ ๋๋ค ์ญ์ ๋ฐ๊นฅ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
(๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ์ค์ฒฉ ํด๋์ค๊ฐ ์๋ ์์ ๋ฐ๋ก ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋๋ฉด ์๊ด์๋ค.)
'JAVA > Effective JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ] Item08 ์๋ฒฝ๊ณต๋ต. AutoClosable (0) | 2023.01.25 |
---|---|
[์ดํํฐ๋ธ ์๋ฐ] Item08 ์๋ฒฝ๊ณต๋ต. Finalizer ๊ณต๊ฒฉ (0) | 2023.01.25 |
[์ดํํฐ๋ธ ์๋ฐ] Item8. finalizer์ cleaner ์ฌ์ฉ์ ํผํ๋ผ. (0) | 2023.01.22 |
[์ดํํฐ๋ธ ์๋ฐ] Item07 ์๋ฒฝ๊ณต๋ต. Executor (0) | 2023.01.21 |
[์ดํํฐ๋ธ ์๋ฐ] Item07 ์๋ฒฝ๊ณต๋ต. WeakHashMap (0) | 2023.01.21 |