본문 바로가기

Java18

[Java] ClassNotFoundException VS NoClassDefFoundError 런타임에 JVM에서 요청한 클래스가 classpath에 없을 때 ClassNotFoundException, NoClassDefFoundError가 발생할 수 있습니다. 두 가지 예외는 비슷해보이지만 차이가 있습니다. ClassNotFoundException 애플리케이션이 클래스의 이름(정규화된 이름)으로 클래스 로드를 시도했을 때 classpath에서 해당 클래스를 찾을 수 없을 때 발생하는 예외입니다. 주로 Class.forName(), ClassLoader.loadClass(), ClassLoader.findSystemClass() 를 사용하여 클래스를 로드하려 할 때 발생합니다. 제 경우엔 의존성을 추가하지 않은 상태로 해당 의존성에 포함된 클래스를 로드하려고 할 때 자주 마주하는 예외입니다. 리플.. 2021. 8. 27.
[JAVA] 커스텀 예외의 4가지 Best Practices 커스텀 예외를 구현할 때 참고하면 좋을 4가지 Best Practice가 있습니다. 4가지 추천사항들은 여러분의 코드와 API를 더 이해하기 쉽게 만들어주며 작성해야할 문서의 양도 줄여줍니다. 1. Always Provide a Benefit (항상 혜택을 제공하라) 자바 표준 예외들에는 포함되어 있는 다양한 장점을 가지는 기능이 있습니다. 커스텀 예외의 의도는 자바의 표준 예외들로 표현할 수 없는 정보나 기능을 제공하는 것입니다. 이것은 커스텀 예외를 만들 때 최우선으로 생각해야할 것입니다. 만약 위의 의도가 없다면 JDK가 이미 제공하고 있는 방대한 수의 예외들과 비교했을 때 우리의 커스텀 예외는 어떠한 장점도 제공하지 못하게 됩니다. 어떠한 장점도 제공할 수 없는 커스텀 예외를 만드는것 보다 오히려.. 2021. 4. 13.
[Java] equals() 와 hashcode equals() 와 비교연산자 "==" 자바 모든 클래스의 최상위 클래스 Object 에 정의된 equals 메서드는 아래와 같습니다. 객체끼리 비교연산자 "==" 로 비교한 결과를 반환해줍니다. 비교하는 두 객체의 참조값(객체가 저장된 주소값)이 같은지, 즉 두 객체가 동일한 객체인지 확인하는 메서드입니다. 자바에서 두 객체가 동등한지 비교할 때 흔히 equals 메서드를 사용합니다. 논리적으로 동등하면 true 반환 논리적으로 동등하지 않으면 false 반환 보통 값 객체의 경우 두 객체의 참조값이 아닌 상태를 가지고 비교를 하게 되는데 가장 대표적인 경우가 자바의 String 클래스 입니다. String 클래스는 내부에 저장된 문자열 값 자체를 비교합니다. 따라서 String str1 = "aa" .. 2021. 4. 12.
[Java] try-catch 문의 주의사항 (feat. try-with-resource) Java 의 예외 처리 문법인 try-catch에 대해 공부하고 정리하는 글입니다. 1. try-catch 문에서 하나의 try 에 이어서 여러개의 catch로 예외를 잡을때 예외의 순서에 주의 해야합니다. 하나의 try-catch문에서 IllegalArgumentException과 RuntimeException 두가지 예외를 잡으려 할 때 RuntimeException을 위쪽에 위치시킨다면 아래의 IllegalArgumentException을 catch 하는 문장에서 컴파일 에러가 발생합니다. 만약 예외가 상속 구조이고 상위 클래스(부모클래스)가 위쪽에 있다면 컴파일러는 에러를 발생시킵니다. 컴파일러는 "위쪽에서 이미 잡았던 예외인데 왜 또 잡으라그래?" 라고 합니다. 아래의 사진을 보면 Illegal.. 2021. 4. 10.
Instanceof 연산자 사용은 객체지향적이지 못하다? 이 글을 쓰게된 계기는 체스 미션을 진행하면서 많은 크루분들과 대화하다가 instanceof를 사용하면 객체지향적이지 못하다는 말을듣고 왜 객체지향적이지 못하지? 라는 의문이 들었기 때문입니다. 먼저 instanceof를 사용한 코드를 보겠습니다. interface Employee { int salary(); } class Manager implements Employee { private static final int managerSalary = 40000; public int salary() { return managerSalary; } } class Programmer implements Employee { private static final int programmerSalary = 50000; .. 2021. 3. 22.