본문 바로가기
개발

TIL: Companion Object와 Object의 차이

by kks950115 2024. 2. 5.
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
반응형

댓글