개발/JAVA

· 개발/JAVA
관련 글은 Spring Event의 동작을 한번 소스를 까면서 동작을 이해하는 과정을 다룹니다. Spring Event 동작 흐름은 어떻게 될까? ApplicationEventPulisher의 이벤트를 발행 -> ApplicationEventMulticaster에 의해 구독(모니터링)된 이벤트 리스너들을 호출하게 됩니다. 동작 흐름을 코드로 따라가 보자 1. ApplicationEventPulisher에 이벤트를 발행 2. ApplicationEventPulisher에서 옵저버 역할을 하는 ApplicationEventMulticaster에 일을 시킵니다. 3. ApplicationEventMulticaster (구현체 SimpleApplicationEventMulticaster) getApplicati..
· 개발/JAVA
"Self Invocation"은 개념상으로는 자기 자신을 호출하는 것을 의미한다. AOP에서 Self Invocation 문제란? 객체 소속에 메서드에서 자기 자신의 메서드를 호출했을 때 AOP가 동작하지 않는 현상을 의미한다. 원인 Spring AOP는 프록시 기반으로 동작하게 됩니다. AOP 대상의 객체는 DI하게 될 때 실제 객체가 아닌 프록시 객체가 주입 되게 됩니다. 객체 내에서 해당 객체 메서드를 호출하게 되면 프록시 객체에 의해 호출되는 것이 아닌 직접호출로 이루어지게 되어 AOP가 동작하지 않게 됩니다. 예제 AOP 동작 시킬 어노테이션 @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface AopGoGo { ..
· 개발/JAVA
Stream을 종결 연산자 이후에 재사용을 하면 IllegalStateException 발생 된다. List list = List.of("2", "4"); Stream stream = list.stream(); stream.count(); //종결 연산자 count 이전에 수행하여 예외가 발생된다. assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> { stream.collect(Collectors.joining()); }); 재활용을 위한 트릭 Supplier 클래스를 활용하여 새로운 스트림을 반환하여 처리한다. List list = List.of("2", "4"); //Supplier을 뽑고 Supplier streamSup..
· 개발/JAVA
사내 레거시 프로젝트가 Spring 4.1 환경이어서 Junit5를 이용하여 Spring 테스트를 사용할 수 없다. 4.3부터 누군가 작성하신 깃헙을 통해(https://github.com/sbrannen/spring-test-junit5) 가능 그리하여 Junit 4 환경의 셋팅을 진행. 의존성 설정 하기 Maven 기준 (pom.xml) Junit 4.X junit junit 4.13.2 test
· 개발/JAVA
불변 객체에 대해 정리해보는 시간을 가져보도록 한다. 대부분의 내용은 이펙티브 자바와, 다른 분의 블로그를 인용하였습니다. 왜 불변 객체를 사용해야 할까? 불변 객체는 스레드의 안전하다. 생성과 동시에 값이 할당되고 변경이 불가능한 객체임으로 기본적으로 스레드의 안전하다. 실패 원자적인 메서드를 만들 수 있다. 이펙티브 자바에 따르면 메서드에서 예외가 발생한 후 에도 객체는 메서드 호출 전과 똑같은 유효한 상태이다. (내부 상태를 변경한 적이 없으니 이를 만족한다. 부수효과를 방지 할 수 있다. 객체 생성과 동시에 값이 할당되어 상태에 대한 변경이 내부에서도 이루어지지 않기 때문에 변경에 따른 부수효과를 방지할 수 있으며 이 부분은 사용시점에 가독성과 안정성을 향상한다. GC의 성능을 향상할 가능성이 있..
· 개발/JAVA
Checked Exception, Unchecked Exception 언제 써야 할까? JAVA의 Checked Exception, Unchecked Exception(Runtime Exception) 두 사이의 Exception 중 과연 어떤걸 써야할지에 대해서 고민해보고 정리해보겠습니다. 생각 정리에 앞서 간단하게 분리를 해보겠습니다. Checked Exception Unchecked Exception 예외 처리가 필요한 예외 임으로 반드시 예외를 처리가 필요하여 try - catch를 강제적으로 수행하게 됨 예외처리를 강제하지 않는다. 컴파일 시점에서 검사 런타임 시점에서 검사 RuntimeException을 상속받지 않은 Exception RuntimeException 을 상속하여 만들어짐 언뜻 ..
beng9re
'개발/JAVA' 카테고리의 글 목록