본문 바로가기

Programing/자바

[Java] Generic in depth 2004년 JSR 176 규격에 의해 규정된 J2SE 5.0부터 자바에 제네릭(Generic)이라는 개념이 JSR 14로 추가되었다.또한 많은 사람들이 Generic 타입이 추가 된 것을 5.0의 큰 변화로 꼽는다.그런데 자바 카페나 블로그에 올라온 글들을 보면 근거 없는 정보들이 있어 확인이 필요했다.1. 타입 이름은 아무 의미가 없다?이 주장과 아래 2번 주장은 'justkukaro님의블로그'에서 발견했다.위의 주장은 문법상으로는 맞는 ..
Spock Framework 프로젝트에 추가하기 jUnit이 유명하지만 사용하기에는 Spock Framework이 더 편한 것 같다.src 하위에 main과 test가 있고, test 밑에 java가 있을 것이다. test 밑에 groovy 디렉토리를 추가한다.groovy 디렉토리가 그냥 회색인데 녹색이 되어야 테스트 디렉토리라고 IDE가 인식이 된 것이다.아래 build.gradle 파일에서 apply plugin: 'groovy' 를 추가하면 녹색으로 바뀔 것이다.build...
[Java8] Optional.of 쓸 때 주의할 점... Optional 사용시 NULL이 가능한 값에 아래와 같이 사용하면 제대로 동작하지 않을 수 있다.// Exception e...final Optional<String> message = Optional.of(e.getMessage());MyException exception = new MyException(message.orElse("문제가 있습니다!"), getReturnUrl(gotoUrl));원래 의도는 메세지를 가져왔을 때 없으면..
을/를, 이/가, 은/는 을 알아서 붙여주면 좋겠다. 포켓몬을 보다 보면 조사가 옵션처럼 붙어서 뭔가 아마추어 처럼 보이는 느낌이 있다.바로 한글의 특성 때문인데 이것을 구현하기 쉬울 거라고 생각했는데 나름 생각할게 더 있었다.자바 코드/** * 한글코드 값은 아래 주소를 참고한다. * http://jrgraphix.net/r/Unicode/AC00-D7AF * * 로직에 대한 이해는 아래 주소를 참고한다. * http://gun0912.tistory.com/65 * * 속기에 대한 글을 참고하면 좋다..
Java 8 - get & put -> computeIfAbsent 바꾸기 예제 computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)아래와 같은 코드가 있다고 하자.Map<Long, Foo> map = Maps.newTreeMap();Foo foo = map.get(id);if (foo == null) { map.put(id, createFoo(id));}IntelliJ를 사용하고 있다면 ..
[lombok] mutable 변수에 대한 PMD 에러 lombok으로 참조 데이터 타입중 가변(mutable) 데이터 타입의 경우 발생하는 문제.String이나 Long인 경우에는 객체의 값을 바꿀 수 없는 불변(immutable) 데이터 타입이다.문제는 Date나 일반 객체의 경우는 mutable이다.그런 경우 FindBugs에서는 EI_EXPOSE_REP2, Priority: Low 에러를 낸다.This code stores a reference to an externally mu..
[Java] enum find static 헬퍼 메서드 enum에 가끔 코드와 같은 값을 같이 넣을일이 있다.문제는 enum <->코드 간에 데이터 변환이 필요하다.enum -> 코드로 가는 것은 getter를 제공하면 되는데, 반대는 열거에서 찾아야 한다.enum의 values()를 이용하면 iteration이 가능하기 때문이다.enum 타입이 많은 경우에 최악의 경우 O(n)의 복잡도를 가지게 된다.따라서 정적으로 map을 넣어두었다가 key에 해당하는 enum을 반환하게 헬퍼 메서드..
TreeMap 정렬 순서 바꾸기 TreeMap의 경우 key 로 정렬을 해준다.그런데 정렬 지정이 되어 있지 않는 경우 자연 정렬(natural ordering)을 한다고 되어 있었다.만약에 역순으로 정렬을 하려면 어떻게 하나?대부분 대답이 Comparator 인터페이스를 구현을 해서 -1 을 곱해주는 것으로 알려주고 있었다.하지만 자바에는 이미 구현되어 있는 reverseOrder라는 것이 있었다.Collections.reverseOrder())트리맵을 생성할 때 아래처..