목록언어/Java 기타 (9)
Monday

1. JDK 설치 (with jabba) jabba(자바 버전 매니저) 툴을 이용하여 편하게 JDK를 설치합니다.[https://github.com/shyiko/jabba] 설치 날짜에 JABBA_VERSION 최신 기준이 0.11.2 버전이라 아래와 같은 스크립트를 이용하여 설치를 진행합니다. export JABBA_VERSION=0.11.2 curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh # adopt jdk 11 설치 jabba ls-remote | grep adopt@ jabba install adopt@1.11.0-11 jabba use adopt@1.11.0-11 jabba a..
// java.lang.enum public abstract class Enum implements Comparable, Serializable { ... 생략 } 저도 정확한 용어는 모르지만, 위와 같은 구조를 재귀적 타입 바운드(recursive type bound)라고 하는 것 같습니다. 위 구조를 아래와 같이 분리해서 생각하면 좀 이해하기 쉬운 것 같습니다. 1. E extends Enum 2. Enum implements Comparable, serializable 3. 따라서 E는 Comparable하고 Serializable하다 즉, Enum은 Comparable하고 Serializable한 타입만을 받으려고 위와 같은 구조를 만든 것 같습니다. 재귀적 타입 바운드 사용 시기 1. 제네릭한 ..
Java transient이란? transient는 직렬화(Serialize)하는 과정에 제외하고 싶은 경우 선언하는 키워드입니다. 언제 사용하나요? 패스워드와 같은 보안정보를 직렬화(Serialize) 과정에서 제외하고 싶은 경우에 사용할 수 있습니다. 데이터를 전송을 하고 싶지 않을 때 선언할 수 있습니다.

예외 종류 여기서 RuntimeException은 Exception 클래스를 상속하여 Exception의 일종이기도 하지만 자바에서는 RuntimeException과 이를 상속한 클래스를 조금 특별하게 취급합니다. 이 예외는 피할 수 있지만 개발자가 부주의해서 발생하는 경우가 대부분이고, 미리 예측하지 못했던 상황에서 발생하는 예외가 아니기 때문에 굳이 로직으로 처리를 할 필요가 없도록 만들어져 있습니다. 또한, RuntimeException은 예외가 발생한다 해서 코드로 따로 부가적인 처리를 하기 어렵기 때문에 에외 처리를 하지 않아도 사용가능하게 만들어져있습니다.
JDBC 드라이버 로드 시 Class.forName()을 사용합니다. forName() 메소드는 다음과 같이 정의되어있습니다. public static Class forName(String className) throws ClassNotFoundException 위 메소드에서 반환하는 "Class" 클래스란 클래스들의 정보(클래스의 필드, 메서드, 클래스의 종류(인터페이스 등))를 담는 메타 클래스입니다. JDBC 4.0 이전에는 Class.forName("드라이버 이름")을 통해서 해당 드라이버 클래스를 메모리에 로딩하였습니다. 그 원리는 해당 클래스를 찾게되면, JVM은 해당 드라이버 클래스를 메모리에 올리게 되고 해당 드라이버 클래스는 아래와 같이 정적 초기화 블록(static { })을 통해 메모..

1. 자바 생성자 내부 동작 원리 다음과 같이 Animal 클래스가 있을 때 main 함수에서 new를 호출하면 어떻게 동작하는지 살펴보겠습니다. // Animal.java public class Animal { String name; public Animal() { this.name = "동물"; } public Animal(String name) { this.name = name; } } Main 함수 // Main.java public class Main { public static void main(String[] args) { Animal tiger = new Animal("Strong Tiger"); System.out.println(tiger.name); } } Main.class 바이트 코..
자바 Queue 함수 비교 1. 원소 추가하기 원소 추가하기 함수 offer() 원소를 추가할 수 없을 시 False 반환 add() 원소를 추가할 수 없을 시 Exception 반환 2. 원소 빼기 원소 빼기 함수 poll() 아무 원소도 없을 시 Null 반환 remove() 아무 원소도 없을 시 Exception 반환 3. 맨 위 원소 확인하기 맨 위 원소 확인하기 함수 peek() 아무 원소도 없을 시 Null 반환 element() 아무 원소도 없을 시 Exception 반환 Queue 사용 시 예외를 null 처리 할 것 인지, Exception 처리 할 것인 지 정하여 일관성있게 코딩하면 좋습니다.
중간값을 구할 때 흔히 하는 실수는 다음과 같습니다. int start = 0; int end = 10; //중간값 구하기 int mid = (start + end) / 2; //숫자가 작을 때는 아무 문제 없음 위 코드는 start, end의 값이 작을 때는 아무 오류가 나지 않습니다. 그러나, 숫자가 커지면 (start + end)가 오버플로우 되면서 예상치 못한 값을 얻게 됩니다. 해결법 1) 작은 수 + (큰 수 - 작은 수) / 2 int start = 0; int end = 10; int mid = start + (end - start) / 2; 2) bit 연산자 >>> 사용 (결과가 양수일 때만 가능) int start = 0; int end = 10; int mid = (start + e..