TIL_010 | jvm class loader

묘한묘랑·2023년 12월 8일
0

TIL

목록 보기
10/31

오늘은 java의 static과 kotlin의 companion object, object class에 대해서 이야기 하려고 한다.

오랜만에 어셈블리어를 보다가 문뜩 jvm으로 돌아가는 것은 어떻게 돌아갈까 알아보던 중 static에 대해서 큰 오해를 하고 있었다는 사실을 알게 되었다.

처음에는 프로그램이 실행 될 때 import 되어 있는 모든 class를 불러오는 형태로 이해하고 있었지만 순간 아무리 생각해도 너무 비효율적이라 그럼 import된 class가 실행 될 때 import문을 가져오는 방식으로 생각을 해보았다.
그리고 일단 테스트 해보았다.

class GetInputCheck {
    companion object{
        fun checkIn():Int{
            return InputUtil.getInputNumber("체크인 날짜를 입력하여 주십시오. / 형식 - 20230101", fun(value: Int): Boolean{
                return when(DateUtil.checkDate(value)){
                    true -> true
                    else -> {
                        println("현제 날짜보다 이전의 날짜는 입력하실 수 없습니다.");
                        return false;
                    }
                };
            })
        }

        fun checkOut(checkIn: Int): Int{
            return InputUtil.getInputNumber("체크아웃 날짜를 입력하여 주십시오. / 형식 - 20230101", fun(value: Int): Boolean{
                return when(DateUtil.compareDate(value, checkIn)){
                    true -> true
                    else -> {
                        println("체크인 날짜보다 이전 날짜는 입력하실 수 없습니다.");
                        return false;
                    }
                };
            })
        }
        init {
            println("test");
        }
    }
}

위와같이 언제 불러오는 것인지 확인을 해보았다.

정확하게 companion object 내부에 있는 method를 사용하기 직전에 실행 되었다.
그럼 여기서 import문을 통해 가지고 온다는 것은 아니라는게 판명되었다.
하지만 그래도 정확히 언제 불러 오는 것인가 더 궁금해서 방법을 찾아보니 아주 좋은 글이 있었다.

Ref Blog

-verbose:class

위의 jvm옵션을 줌으로써 class가 load되는 것을 실시간으로 볼 수 있었다.

그 class에 대한 참조를 할 때 class가 load되는 모습을 볼 수 있었다.

profile
상황에 맞는 기술을 떠올리고 사용할 수 있는 개발자가 되고 싶은 개발자

0개의 댓글