오늘 원인과 해결방법을 찾아볼 자바 Exception은 java.net.MalformedURLException 다. 사실 워딩 그대로 잘못된 URL이 원인이고 URL을 맞게 고쳐주면 해결이 되는 아주 간단한 문제지만 좀 더 세부적으로 탐구해보기로 했다. 에러를 발생시키는 조건은 각종 프로토콜을 다루는 클래스에서 잘못된 인자로 정상적인 프로토콜을 인식할 수 없을 때 예외가 발생하도록 처리 되어있다. 대표적이고 많이 발생하는 클래스는 URL 이다. package exception; import java.net.URL; public class test_MalformedURLException { public static void main(String[] args) throws Throwable { URL url..
오늘은 indexOutofBoundException를 만나는 이유와 에러 해결 방법을 알아보도록 하자. 자바로 코딩을 하는 사람들이면 늘상 만나는 Exception 중에서 3형제를 꼽는다면 꼭 안에는 들어갈법한 녀석이다. 안그런가? ㅎㅎ 얼마전인가 이 짤을 보고서는 피식 웃었던 기억이 난다. 그만큼 공감이 가는 짤이라고나 할까. indexOutofBoundException 발생하는 이유는? 저녀석이 나오는 이유는 배열이나 문자열을 접근할 때 가진 길이보다 높은 인덱스를 엑세스하려고 할때 나오는 예외다. 즉, 예를 들자면 길이가 3인 배열을 가지고 있는데 ( int[] a = new int[]{1,2,3}; ) a[0], a[1], a[2] 까지는 접근이 되지만 a[3]이상의 숫자로 접근을 시도하려고 하면..
개발을 하다보면 가끔 ClassNotFoundException를 만날수 있는데 어떤 상황에서 ClassNotFoundException가 발생하는지 정리해보기로 하자. 1) ClassNotFoundException 원인 동적으로 클래스를 문자열로 로딩을 시도하다가 클래스가 없는 경우 발생. 1) Class.forName( String className ) 2) ClassLoader.loadClass( String className ) 외에 String으로 클래스를 찾는 여러 메소드들... 크게 이 두가지 클래스를 사용하는 경우에 발생한다. 요즘에는 프레임워크나 라이브러리 사용으로 Class.forName을 많이 사용하지는 않겠지만 옛날에는 JDBC를 직접적으로 연결할 때 Class.forName으로 JDB..
얼마 전 업무를 하다 java.lang.NoClassDefFoundError 를 만났는데 상당수 ClassNotFoundException와 헷갈리는 부분이 있을 것 같다. 과거에도 이 에러를 많이 만났지만 그때마다 어찌저찌 해결만 했을 뿐 명확히 포스팅으로 정리해본적이 없어서 정리를 해본다. 1. 원인 java.lang.NoClassDefFoundError가 발생하는 이유는 컴파일 환경에서는 클래스 참조가 되었지만 실행 환경에서는 해당 클래스를 찾을수 없는 경우 발생한다. 그래서 코딩을 할때는 아무 문제가 없다가 spring boot나 was로 실행 시킬 때 만나거나, PC에서 개발 할때는 아무 문제가 없다가 서버에 올렸을 때 만나게 된다. 재연을 해보고 싶다면 클래스 두개를 만들어 하나에 종속되게 만들..
자바 8이 나온지 언 5년 정도가 지났다. 지금은 자바 12버전까지 나와있으니(현재 19년 8월 5일) 현재 업무로 사용하는 메이저 버전은 자바 6이다. 물론 7도 있고, 일부 8도 있긴 하지만 메이저 사용 버전은 6이다. 아마도 조만간 메이저 버전이 업데이트 될거다. 차세대 시스템을 하게 될테니 말이다. ( 뭐, 그게 아니더라도 ... ) 사실 자바 버전업에 대해서 무관심했다. 큰 변화가 아니라고 생각했고, 사용할 때가 되어서 익히면 된다라는 생각이 있으니까. 대충 맞는 생각이라 본다. 미리 익히는 기술은 어차피 깊이가 낮고 poc 수준 이상이 될수도 없을 뿐더러 시간이 지나면 완전히 잊혀질 가능성이 높기에... 내용에 대한 설명보다는 느낀 후기에 대해서 정리해본다. 일반 책의 대부분의 내용에서는 기존..
요즘 시간이 날때 간단한 코딩을 하고 있다. 실무를 하면서 사실 이런 프로그램을 만들일은 없지만 기록은 그래도 의미가 있다. 두 수 n과 m이 주어졌을 때 두 수의 최대공약수와 최소공배수를 구하는 코드다. 너무 오랜만이라 잠깐 화면을 보고 멍해있었다. ㅎㅎ public static int[] p5(int n, int m) { int min = n > m ? m : n; int[] rtnInt = new int[2]; for(int i = min; i > -1;i--) { if( n % i == 0 && m % i == 0 ) { rtnInt[0] = i; rtnInt[1] = n*m/i; break; } } return rtnInt; } 두 수 중에 작은 수를 기준으로 수를 하나씩 내려가며 나머지를 ..