개발
TIL: Companion Object와 Object의 차이
kks950115
2024. 2. 5. 22:44
728x90
Object
Object는 싱글톤 패턴을 쉽게 사용할 수 있게 해준다.
초기화 시점은 object가 사용되는 시점이다.
특징으로는 thread safe 하다.
thread safe란?
여러 스레드가 한 객체를 동시에 참조해도 실행에 문제가 없는 것을 말한다.
이해하기 힘들다면 thread safe하지 않은 예시를 보면 된다.
public class CountingTest {
public static void main(String[] args) {
Count count = new Count();
for (int i = 0; i < 100; i++) {
new Thread(){
public void run(){
for (int j = 0; j < 100; j++) {
System.out.println(count.view());
}
}
}.start();
}
}
}
class Count {
private int count;
public int view() {return count++;}
public int getCount() {return count;}
}
위처럼 결과가 나온다. 의도대로라면 1,2,3 .... 9999, 10000 이 차례대로 나와야하는데 말이다.
스레드마다 처리속도가 달라서 결과값이 순서대로 나오지 않는 것이다.
Companion Object
클래스당 하나밖에 사용하지 못한다.
클래스가 로드될 때 초기화된다.
클래스 내부에서 싱글톤처럼 쓰기 위한 객체이다. 객체가 생성되어 있어야만 사용가능하다.
728x90
반응형