gradle 특정 테스트 제외하기
·
JVM
개요build.gradle 에서 특정 테스트 코드를 제외하고 싶을 수 있다.물론, 코드상에 `@Disabled` 어노테이션을 추가하여 비활성화 하는 것도 가능하지만, 코드를 직접 살펴야한다는 단점이 있다. 비활성화할 코드가 많은 경우 build.gradle 에 pattern, 리스트 형식으로 나열하는 것이 유용하게 쓰일 수 있다.test { filter { // MyClass.getNameTest() 메소드 테스트 비활성화 excludeTest("MyClass", "getNameTest") // my.pacckage.path 하위의 모든 테스트 비활성화 excludeTestsMatching("my.package.path.*") } useJ..
[Java] 람다 캡쳐와 Synthetic 람다 클래스
·
JVM/Java
개요HeapDump 파일에서 Class$$Lambda$2831+2938213123+0x00 과 같은 식이 나왔다.요녀석의 정체는 무엇일까? synthetic lambda class아래와 같이 단일 메소드를 갖는 인터페이스는 Lambda 표현식으로 호출이 가능하다.public class LambdaTest { interface Callback { void onComplete(String result); } static class Messanger { void test(String msg, Callback callback) { callback.onComplete(msg); } } @DisplayName("single method interface can be called ..
[Java] OutOfMemory 잡기
·
JVM/Java
🎯 GoalsOutOfMemory 발생 원인 파악 하는 법을 안다. 예제 코드JVM option 에 다음 설정을 추가한다.Intellij IDEA > Rum Configuration > Modify > Add VM Options-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError-Xms20m힙 최소 크기 20MB-Xmx20m힙 최대 크기 20MB 제한-XX:HeapDumpOnOutOfMemoryOOM 발생시 HeapDump 파일을 생성public class HeapOOM { static class OOMObject {} public static void main(String[] args) { List list = new ArrayList(); while (..
[Spring] DataJpa - Query methods, @Query
·
JVM/Spring
Entity class 를 정의하고 CRUD Repository 구현 노가다를 하지 않게해준다.JpaRepository 는 대부분의 공통 메소드를 지원하기 때문이다. JpaRepository 지원 메소드Class Diagram을 보면 JpaRepository 가 얼마나 많은 메소드를 지원하는지 알 수 있다.(List)CrudRepository , PagingAndSortingRepository , QueryByExmampleExecutor 등 여러 인터페이스를 상속받는다. Spring Data Jpa 3.4.0 기준 JpaRepository 가 제공하지 않는 메소드는?다음처럼 username 을 가지고 Member 를 조회하는 기능이 필요하다고 하자.인터페이스에 새로운 메소드를 정의했다.public in..
[Java] 예외 번역과 예외 연쇄 기법
·
JVM/Java
문제 상황수행하려는 일과 관련 없는 예외가 튀어나오면 당황스럽다.고수준 메소드가 저수준의 예외 처리하지 않고 바깥으로 전파해버릴 때 발생하는 문제다. 해결 방법상위 계층 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔야한다. try { // 저수준 예외 발생 } catch (LowerLevelException e) { // 추상화 수준에 맞게 번역 throw new HigherLevelException(...) }왜, 언제 사용하는가?저 수준의 예외가 디버깅에 도움이 될 때다.  예외 번역 (Exception Translation)class AbstractSquentialList { /* * @throws IndexOutOfBoundsException {@inheritDoc} ..
[Java] Thread 상속 대신 Runnable 을 사용하라.
·
JVM/Java
결론Thread 상속 대신 Runnable 구현을 택하라. (1) 상속보다 구현이 더 유연하다.Java는 다중 상속을 허용하지 않기 때문에 이미 다른 클래스를 상속중인 클래스에 Thread 추가 상속은 불가능하다.반면에, 인터페이스는 얼마든 구현할 수 있다.// FIXME: 다중상속은 허용되지 않는다.class MyService extends Service, Thread {} (2) Runnable 은 실행할 작업만 정의할 수 있다.쓰레드를 사용하는 개발자의 주 관심사는 보통 만들고자 하는 쓰레드가 '무슨 일'을 할 것인지다.Runnable 인터페이스를 구현함으로써 '무슨 일'을 할지만 정의하면된다.즉, 필요한 만큼의 역할만 갖는다.  class PrintRunnable implements Runnabl..