NoClassDefFoundError 발생원인 및 해결(ClassNotFoundException와 차이점)

일반적으로 NoClassDefFoundError 에러는 컴파일 시점에 존재했던 클래스가 런타임에 존재하지 않으면 발생하는 에러라고 알고 있다.

 

포스팅 최하단에 링크한 Stackoverflow의 질문 답변부분의 그림을 인용하면 Class A는 Class B, Class C에 의존성을 가지고 있다. 정상적으로 컴파일 후 런타임에서 Classpath에서 Class C가 없어진다면 JVM이 Class C를 로드할 수 없기 때문에 NoClassDefFoundError가 발생한다.

 

위 예제대로라면 단순히 NoClassDefFoundError가 발생하면 Classpath만의 문제라고 생각할 수 있겠지만 NoClassDefFoundError은 더 다양한 발생 이유가 존재한다. 이 차이를 알기 위해 java.lang.ClassNotFoundException과 java.lang.NoClassDefFoundError를 같이 살펴본다.

 

1. java.lang.ClassNotFoundException

이 익셉션은 Classpath에 로드하고자 하는 Class가 발견되지 않았을 때 발생한다. 보통은 빌드에 문제가 있는 경우로 clean이나 Class파일 삭제 후 재빌드를 수행하여 해결한다.

2. java.lang.NoClassDefFoundError

이 익셉션은 JVM이 내부의 클래스 정의 데이터 구조(class definition data structure)에서 Class를 찾지 못했다는 것을 나타낸다. 단순히 Classpath에서 Class를 로드하지 못했다는 것과 약간은 다르다. 

일반적으로 과거에 Classpath에서 Class를 로드하려 시도했지만 실패하였고, 다시 해당 Class를 사용하려고 시도할 때 로드에 실패했던 전적이 있으니 로드를 시도하지도 않고 NoClassDefFoundError를 뱉는다. 과거의 로드실패는 ClassNotFoundException, ExceptionInInitializerError 또는 여러 다른 이유로부터 발생할 수 있다.

여기서 핵심은 NoClassDefFoundError의 발생은 단순히 Classpath의 문제는 아니라는 것이다.

 

아래 코드에서 SimpleCalculator의 static 초기화 구문은 에러를 발생시킨다. (static 초기화 구문에서 에러시 ExceptionInInitializerError가 발생한다.) 여기서 1차적으로 SimpleCalculator Class를 로드하려는데 실패하였고, 이후 다시 사용하려고 시도하면 이전의 실패를 기억하여 NoClassDefFoundError가 발생하게 된다.

public class NoClassDefFoundErrorDemo {
    public static void main(String[] args) {
        try {
            // 아래에서 ExceptionInInitializerError 발생
            SimpleCalculator calculator1 = new SimpleCalculator();
        } catch (Throwable t) {
            System.out.println(t);
        }
        // 아래에서 NoClassDefFoundError 발생
        SimpleCalculator calculator2 = new SimpleCalculator();
    }

}
public class SimpleCalculator {
    static int undefined = 1 / 0; // 에러발생
}

 

정리해보면,

ClassNotFoundException과 NoClassDefFoundError 모두 비슷한 의미로 Class를 로드할 수 없음을 가리키나 해결을 위해 봐야 할 포인트는 조금 다르다는 것이다. NoClassDefFoundError의 경우 위 예제처럼 Classpath의 문제가 아닌 다른 내제적인 문제에서 발생할 수 있다.

개인적으로 Maven을 즐겨 쓰는데 NoClassDefFoundError가 발생하면 의존하는 라이브러리의 버전이 서로 맞지 않아 발생하는 경우가 대부분이었다.

 

더 많은 내용에 대해서는 아래 Stackoverflow의 링크를 남긴다.

stackoverflow.com/questions/34413/why-am-i-getting-a-noclassdeffounderror-in-java

 

Why am I getting a NoClassDefFoundError in Java?

I am getting a NoClassDefFoundError when I run my Java application. What is typically the cause of this?

stackoverflow.com

 


하츠, 한독크린텍 분석 - 리모델링 수혜주

하츠는 가정용 레인지후드나 빌트인기기(쿡탑) 등을 생산하는 기업이고 한독크린텍은 정수기의 카본필터를 생산하는 업체이다. 하츠는 2021년부터 이어질 대규모 주택공급과 리모델링에 대한 수혜주이고, 한독크린텍은 주택공급 + 리모델링에 건강에 대한 관심이 더해진 수혜주 종목이다.

 

한 종목씩 살펴보며 투자포인트를 정리해본다.

하츠 

하츠는 주방 후드 및 빌트인기기를 생산하는 기업으로 이 제품들은 입주 시기에 투입되는 입주마감재이다. 최근 공급 부족이나 입주량이 감소함에도 매출은 꾸준히 상승했는데 이는 주택 실수요자들의 매매 증가와 이에 따른 리모델링 수요의 확대와 집 꾸미기 관심에 대한 증대에 따른 것으로 보인다.

 

레인지후드 시장에서 하츠의 점유율은 기존에는 40% 정도였으나 2위 업체인 엔텍이 2020년에 파산하면서 2020년 3분기 보고서 기준 점유율이 57%까지 상승하였다. 공공 및 민간의 주택공급 확대와 증가하는 리모델링 수요에 현재와 같은 점유율을 유지한다면 주가에 상당히 긍정적이다.

 

참고로 2020년 4분기 실적도 최근 호황을 반영하여 크게 증가하였고, 2020년 4분기까지 고려한 PER는 11정도이다.

하츠의 투자 포인트를 정리해보면 다음과 같다.

1. 공공/민영 주택 공급확대에 따른 매출 증가

2. 리모델링/리폼 유행(더 나은 집에 살고 싶다는 욕구)에 따른 매출 증가

3. 레인지후드 시장의 앞도적인 시장점유율(57%)

4. 부채비율 20% 미안의 안정적 재무구조

 

한독크린텍

한독크린텍은 정수기의 카본필터를 생산하는 업체이다. 요즘 광고에 많이 등장하는 제품 중 하나는 단연 정수기이다. 정수기는 사용주기가 빈번하고 건강과 직결된 가전으로 이사/혼수 패키지에서도 반드시 포함되는 품목 중에 하나이다.

시중 정수기 업체 중 점유율 1위는 코웨이이고 이를 쿠쿠홈시스, LG전자, SK매직 등이 뒤따르고 있다. 한독크린텍의 장점 중 하나가 정수기 제조기업 대부분을 고객으로 두고 있다는 점이다. (한독크린텍의 시장점유율은 52%로 1위이며, 삼성 또한 정수기 시장에 뛰어드려 하고 있다.)

정수기의 필터는 소모품이며 주기적으로 교체수요가 발생한다. 여기에 정수기 시장 자체도 계속 성장하고 있으며, 국내정수기 업체들은 국내 시장뿐만 아니라 해외시장 진출에 힘쓰고 있다. 늘어나는 매출과 별개로 한독크린텍은 자동화 라인을 증설 중이며 2021년 상반기에 자동화 라인이 가동될 경우 영업이익률이 전년동기대비 2% 증가할 것으로 예측된다.

최근 증가하는 정수기 매출에 따라서 한독크린텍의 2020년 4분기 매출도 좋게 나왔다. 아래 기사내용 중 '원가절감 활동'이 도입되고 있는 자동화 라인이라 추측된다. 2020년 4분기를 포함한 PER는 15.7 정도로 낮지는 않지만 증가할 정수기 국내/해외 매출 및 압도적 시장점유율을 생각하면 비싼 수준은 아닌 것으로 보인다.

한독크린텍의 투자 포인트를 정리해보면 다음과 같다.

1. 주택공급 확대 및 리모델링 수요 증가

2. 국내 및 해외 정수기 렌탈시장의 성장(소모품인 필터 특성상 계속 매출이 발생)

3. 국내 카본블록 필터 압도적인 시장 점유율 52% (코웨이, 쿠쿠홈시스 등 대부분의 제조업체를 고객으로 하며, 삼성전자도 추가될 예정)

4. 2021년 자동화 라인 도입에 따른 영업이익률 증가 예상


정부 공급대책 및 인테리어 수혜주(건설/건자재)

지난 2월에 정부의 공급대책이 발표되었고 시장의 기대감과 별개로 공공 중심이 될 것이라는 기조에 건설사들의 주가가 일부 조정되는 양상을 보였었다. 2021년부터 3기 신도시를 비롯하여 정부 주도의 공급이 시작될 예정인데 이에 대한 수혜가 어떤 것이 있을까 찾아보던 중 눈에 들어오는 리포트가 있어 정리해본다.

 

정리할 리포트는 이베스트투자증권에서 나온 '2021, 공급전야'라는 리포트이다.

리포트에서는 공급 대책으로 인해 늘어나는 공급과 최근 인기를 끌고있는 집 꾸미기에 대한 정리 및 건설/건자재 분야의 수혜주를 정리해 놓았다.(건설/건자재로 되어있지만 기업분석 대부분의 기업은 건자재 기업이다.)

 

공공 주도 및 민간분양 주택시장 공급확대

이번 정부에서 공공 주도의 공급확대는 단기적으로는 성과가 나타나지 않았지만 이와 별개로 2020년부터 서울, 수도권에서 대형 건설사의 민간분양은 V자 반등이 나타났다. 정부의 공급확대와는 별개로 2021년에는 민간분양이 더 확대될 예정이다. 2021년 분양하여 시공 후 입주는 2023년이 되고 공백 기간동안 구축의 리모델링/인테리어 종목이 수혜를 받을 수 있다.

 

아래 표에서 보이는 것처럼 분양은 박근혜 정부 당시에 크게 증가하였지만 정권이 바뀌며 급격히 감소하였다. 하지만 2020년부터 점차 증가하고 있으며 시공후 입주가 이어지면 입주도 턴어라운드 될 예정이다. 

2021년 2월 4일에 '3080 공공주도 대도시권 주택공급 방안'을 내놓으면서 공공을 중심으로 하여 역세권이나 준업공지역, 3기 신도시 개발 등을 통해 공급을 늘리겠다고 밝혔다. 실효성 여부를 떠나서 민간분양의 증가와 공공주도 공급의 증가는 건설/건자재 주가의 긍정적인 영향을 의미한다.

 

주택 리폼 시장의 호황

2015년 이케아가 국내에 들어오면서 가구 시장의 표준화가 이루어졌고 주택 공급과 맞물려 가구 종목(한샘, 현대리바트)의 엄청난 주가 상승이 일어난 적이 있다. 이와 같은 형태가 최근 주택리폼(인테리어) 시장에서 다시 연출되려 하고 있다.

요즘 방송에서는 기존 집을 꾸며주거나 전월세 집을 구해주거나 하는 등 주택을 컨텐츠로 한 여러 방송이 늘어나고 있다. <오늘의 집>도 승승장구한다는 뉴스가 자주 나오는 등 코로나 재택 기조와 맞물려서 '더 나은 집'에 대한 관심이 점차 증가하고 있다. 

이에 욕실/주방 등의 부분 리모델링이나 업체들의 저가 리모델링 등의 마케팅 전략을 펴면서 리모델링에 대한 패러다임을 변화시키는 중이다. 또한 구축 아파트의 거래량 증가나 빌라, 단독주택 등의 거래량 상승, 연식이 오래된 주택수의 증가 등은 더 변화를 가속시키는 요인이다.

 

정리하면 공급확대와 사람들의 리모델링에 대한 수요증가라는 요인으로 인테리어 분야의 종목을 잘 지켜봐야 한다는 것이며, 이에 대한 기업분석으로 아래 기업들에 대한 내용을 리포트에 담았다. 이 중 내가 주목한 종목은 <하츠>와 <한독크린텍>이며 두 종목을 포함한 전체 내용이 궁금한 사람은 이베스트투자증권의 공식 홈페이지에서 리포트를 참고 바란다.

 

<하츠>와 <한독크린텍>에 대한 내용은 따로 포스팅하고자 한다.

 

2021/03/01 - 하츠, 한독크린텍 분석 - 리모델링 수혜주

 

하츠, 한독크린텍 분석 - 리모델링 수혜주

하츠, 한독크린텍 분석 - 리모델링 수혜주 하츠는 가정용 레인지후드나 빌트인기기(쿡탑) 등을 생산하는 기업이고 한독크린텍은 정수기의 카본필터를 생산하는 업체이다. 하츠는 2021년부터

yangbox.tistory.com

 

+ Recent posts