728x90
반응형
728x90
반응형
병렬 스트림 Java 7 이전에는 데이터 컬렉션을 병렬로 처리하기 어려웠다. 데이터를 서브 파트로 분할 분할된 서브 파트를 각각의 스레드로 할당 스레드로 할당 후 의도치 않은 레이스 컨디션이 발행하지 않도록 동기화 추가 부분 결과를 다시 결합 하지만, Java 7은 더 쉽게 병렬화를 수행하면서 에러를 최소화할 수 있도록 포크/조인 프레임워크 기능을 제공한다. 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 따라서 병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 성능 측정 자바 마이크로벤치마크 하니스(Java Microbenchmark Harn..
스트림 Java 8 API에 추가된 기능으로 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다. 또한, 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 선언형으로 간결하고 가독성이 좋다. 조립할 수 있어 유연성이 좋다. 병렬화로 성능이 좋다. 반복자와 마찬가지로 스트림도 한 번만 탐색할 수 있다. 즉, 탐색된 스트림 요소는 소비된다. 스트림 연산끼리 파이프라이닝을 구성할 수 있다. 그 덕에 게으름, 쇼트서킷 같은 최적화도 얻을 수 있다. List title = newArrayList("Java8", "In", "Action"); Stream streamTitles = tit..
람다 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. // 익명 함수 Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } } // 람다 Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 함수형 인터페이스 오직 하나의 추상 메서드만 지정하는 인터페이스이다. (디폴트 메서드 제외) @FunctionalInterface 어노테이션으로 함수형 인터페이스임을 명시한다. 함수 디스크립터 함수형 인터페이스의..
스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class); ApplicationContext를 스프링 컨테이너라 한다. 기존에는 AppConfig를 통해 직접 객체를 생성하고 DI 했지만, 이젠 스프링 컨테이너를 사용한다. 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다. (여기서는 AppConfig.class) @Configuration public class AppConfig { @Bean ..
제어의 역전 (IoC - Inversion of Control) 기존 프로그램은 클라이언트 구현 객체(OrderServiceImpl)가 스스로 필요한 서버 구현 객체를 생성하고, 연결, 실행했다. 하지만 AppConfig 등장 이후에 구현 객체(OrderServiceImpl)는 자신의 로직을 실행하는 역할만 담당한다. 구현 객체를 생성하고, 연결하는 제어 흐름은 AppConfig가 가져단다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 한다. 프레임워크 vs 라이브러리 프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당 의존 관계 주입 (DI - Dependency Injection) Ord..
EJB - Enterprise Java Beans 과거 자바 진영 표준 기술 Spring, ORM 등을 가지고 있는 종합 선물 세트. But 높은 비용, 어렵고, 느리고, 복잡하다. 추가로 EJB에 너무 의존적..... 그래서 POJO 등장. 스프링 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 spring.io/projects Spring | Projects Spring Framework Provides core support for dependency injection, transaction management, web ap..