본문 바로가기

JAVA

(5)
[JAVA] Reflection 을 이용하여 Method 호출하기 2개의 DB Connection Pool 을 사용하는 서비스를 개발하던 중 분리된 DB 의 Mapper 를 구분해서 호출해야 하는 이슈가 있었습니다. 문제는 2개의 Mapper 형태가 거의 유사하다는 점이었습니다. 매 서비스가 호출될 때 마다 if 문으로 서비스문을 분기하여 Mapper 를 호출해야될 정도 였습니다. 하지만, 그렇게 되면 중복코드의 양이 너무 많아지기 때문에 차선책이 필요했습니다. 그래서 생각한 것이 java 에서 제공하는 API 인 Reflection 이었습니다. Reflection 을 검색하면 다음과 같은 정의가 나옵니다. 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 이 말은 처음 본 사람에겐 의아할 수 있..
[Java] POJO 와 Beans 의 차이점 POJO Classes POJO(Plain Old Java Object) 는 자바 객채의 표준(ordinay)이며, Java Language Specification 에 의한 어떤 특정한 엄격한(restriction) 경계가 존재하지 않습니다. POJO 는 가독성과 재사용성을 중요시하게 사용됩니다. POJO 는 restriction 이 적은 만큼 쓰기도 쉽고 읽기도 쉽기때문에 많이 사용되어 왔습니다. POJO 의 3가지 규칙이 존재합니다. Exend prespcified classes Implement prespecified interfaes Contain prespecified annotations public class Animal { String dog; public String cat; priva..
JAVA의 정석 - Thread JAVA의 정석2018-12-16Thread9.4 volatile 멀티 코어 프로세서에서는 코어마다 별도의 캐시를 가지고 있다. 코어는 메모리에서 일겅온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 그러다보니 도중에 메모리에 저장된 변수의 값이 변경되었는데도 캐시에 저장된 값이 갱신되지 앟아서 메모리에 저장된 값이 다른 경우가 발생한다. volatile boolean suspended = false; volatile boolean stopped = false; 위와 같이 타입 옆에 volatile 을 붙이면 캐시에서 읽어오지 않고 메모리에서 읽어온다. public synchronized void stop()..
JAVA의 정석 - Generics 제네리.html JAVA의 정석2018-12-16제네릭스와일드 카드 class Juicer { static Juice makeJuice(FruitBox box) { String tmp = ''; for(Fruit f : box.getList()) tmp += f + " "; return new Juice(tmp); } } 위와 같이 Juicer클래스는 지네릭 클래스가 아닌데다, 지네릭 클래스라고 해도 static 메서드에는 타입 매개변수 T를 매겨변수에 사용할 수 없으므로 아예 지네릭스를 적용하지 않던가, 위의 같이 타입 매개변수 대신, 특정 타입을 지정해줘야 한다. 지네릭 타입이 다른 것만으로는 오버로딩이 성립하지 않기 때문에 지네릭 타입은 컴파일러가 컴파일할 때만 사용하고 제거해버린다. 이럴 때 필요..
JAVA의 정석 - 열거형(enums) enums.html JAVA의 정석2018-12-16열거형(enums)열거형이란 class Card { enum Kind { CLOVER, HEART, DIAMOND, SPACE } enum Value { ONE, TOW, THREE, FOUR } final Kind kind; final Value value; } 자바의 열거형은 C언어의 열거형보다 더 향상된 것으로, 타입까지 관리하기 떄문에 보다 논리적인 오류를 줄일 수 있다. 그리고 더 중요한 것은 상수의 값이 바뀌면, 해당 상수를 참조하는 모든 소스를 다시 컴파일해야 한다는 것이다. 하지만 열거형 상수를 사용하면, 기존의 소스를 다시 컴파일 하지 않아도 된다. 열거형 상수간의 비교에는 '=='를 사용할 수 있다. 그만큼 빠른 성능을 제공한다. 단 ..