본문 바로가기

전체 글

(99)
2022/03/07 TIL Java8 Default Method 자바8 부터는 인터페이스에 default 메소드(구현이 있는 메소드)를 사용할 수 있다. 다양한 사용방법이 있겠지만 '원하는 메소드만 구현'하고 싶을 때 사용할 수 있다는 것을 알게 되었다. Spring에 WebMvcConfigurer interface가 있는데 자바7 까지는 default 메소드가 없기 때문에 WebMvcConfiguereAdapter라는 추상 클래스를 사용하여 원하는 메소드를 재정의 했었다. 하지만 자바8이 나오면서 WebMvcConfiguereAdapter는 Deprecated 되었고 WebMvcConfigurer를 바로 구현하게 되었다. 토비의 스프링 3.1 오브젝트의 설계와 구현, 동작원리에 더 집중하기를 바란다. 그러다 보면 ..
2022/03/03 TIL 자바 병렬 프로그래밍 경쟁 조건은? 여러 스레드를 교차해서 실행하는 상황에 따라 계산의 정확성이 달라질 때 나타난다. 정수형 변수값을 여러 스레드가 접근하여 변경하는 경우를 생각해보면 될 것 같다. 경쟁 조건이란 용어를 만들 정도로 중요한 개념이란 것을 알고 넘어가야겠다. 점검 후 행동이란? 잠재적으로 유효하지 않은 관찰 결과로 결정을 내리거나 계산을 하는 것 점검 후 행동의 예시로는 늦은 초기화(lazy initialization)가 있다. public class LazyInitRace { private Person instance = null; public Person getInstance(){ if (instance == null){ instance = new Person(); } return in..
2022/03/02 TIL 자바 병렬 프로그래밍 모든 자바 프로그램은 기본적으로 스레드를 사용한다. JVM을 시작시키면 main 메소드를 실행할 주 스레드 뿐 아니라 가비지 컬렉션이나 객체 종료와 같은 내부 작업을 담당할 스레드도 생성한다. JAVA가 동작하는 원리를 알기 위해서는 병렬 처리에 대한 이해가 더 높아야 한다는 생각을 했다. 병렬 프로그램은 단순하게 스레드와 락만 신경 써서 될 일은 아니다. 하지만 스레드와 락은 그저 목적을 위한 도구일 뿐이다. 근본적으로 공유되고 변경할 수 있는 상태에 대한 접근을 관리하는 것이다. 병렬 처리하면 JAVA에서는 자연스럽게 '스레드'와 '락(lock)' 같은 단어들이 떠오르기 마련이다. 이번 기회에 도구가 아닌 본질에 대해 고민해보고 싶다. 스레드 안전한 ..