Java

· Java
람다 표현식 자바에서는 인터페이스를 선언하거나 매개변수로 주어야 할 때 1회용 구현체인 익명 클래스를 사용할 수 있다. 아래 예시에서 Test::printList 의 변화를 확인해본다. public class Test { public static void main(String[] args) { List list = Arrays.asList(2, 1, 3, 5, 4); printList(list); // 오름차순 정렬 List list2 = list.stream() .sorted(Comparator.naturalOrder()) .collect(Collectors.toList()); printList(list2); // 내림차순 정렬 List list3 = list.stream() .sorted(Compar..
· Java
Java Stream 개요 자바는 90년대 공개된 이후 현재도 가장 인기가 많은 언어 중 하나로 손꼽히고 있다. 이유는 간단하다. 사용자가 필요로 하는 기능이 자바에 계속 추가되니까. 2014년 공개된 자바 8엔 함수형 프로그래밍을 지원하는 스트림이 포함되었다. 스트림의 추가는 자바를 완전히 새로운 형태로 작성할 수 있는 새로운 장을 열었다고 보아도 무방하다. '함축적이고 짧아진 코드' 그 이상을 제공하고 있기 때문이다. 자바 8 설계에 쓰인 프로그래밍 개념 자바 8을 설계하는데 고려한 프로그래밍 세 가지 개념을 소개한다. 🖇 스트림 처리 스트림은 한 번에 한 개씩 만들어지는 연속적인 데이터 항목의 모임이다. 이론적으로 프로그램은 입력 스트림에서 하나씩 읽어들이고, 출력 스트림에 하나씩 기록한다. 한 프..
Spring에서 AOP를 구현하는 방법과 Transactional AOP에 관한 간략한 개념이 필요하다면 다른 글을 참조한다. 이 내용은 공식 문서를 참조하여 작성하였다. Spring Framework Document AOP 구현 방식 Spring에서 AOP는 두 가지 방법으로 구현되어 있다. Dynamic Proxy (Reflection) CGLIB (Byte Code Instrument) 인터페이스를 클래스로 구현하여 사용하는 경우 Dynamic proxy, 단일 클래스는 CGLIB를 사용한다. 1. 인터페이스에 선언되지 않은 메소드를 권고하는 경우 2. 메소드의 인자로 프록시된 객체를 구체적으로 전달해야 하는 경우 또한 비즈니스 로직을 구현할 때 클래스보다는 인터페이스로 유연하게 설계할 것을 권장하..
Spring boot 초기화 코드 작성하기 서버가 켜지자마자 상태를 지정해줘야 하는 일들이 더러 있을 것이다. 몇 가지만 알아두면 요긴하게 사용할 수 있다. EventListener와 Runner를 사용한 방법 Spring boot에서만 사용할 수 있다. 관련 이벤트와 Runner는 boot 패키지에 포함되어 있기 때문이다. public ConfigurableApplicationContext run(String... args) { // Do something... SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting(); try { // Do something... // spring context prepar..
· Java/JPA
김영한 님의 자바 ORM 표준 JPA 프로그래밍을 읽고 정리한 내용입니다. 교보문고 링크 😀 다양한 연관관계 매핑 엔티티 연관관계 매핑 시 고려할 3가지 다중성 단방향/양방향 연관관계의 주인 1. 다중성 연관관계는 보통 4가지 다중성을 갖는다. 다대일 일대다 일대일 다대다 다대일, 일대다 관계를 많이 사용하며 다대다 관계는 거의 사용되지 않는다. 2. 단방향/양방향 테이블과는 달리 객체는 참조용 필드를 가지며, 그 필드를 통해 연관 객체를 조회한다. 한 쪽이 다른 한 쪽을 일방적으로 참조하면 단방향이며 서로 참조하면 양방향이다. 3. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관 관계를 가질 수 있기 때문에 연관관계를 관리하는 포인트는 외래키 하나이다. 엔티티가 양방향으로 참조되면 A → B,..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 애그리거트(Aggregate) 테이블이 100개 이상 있는 ERD를 보고 있다고 생각해보자. 하나 하나 따라가보면 개별 테이블의 연관 관계는 알 수는 있지만, 한 눈에 전체의 구조를 파악하기는 굉장히 어렵다. 도메인 모델도 마찬가지이다. 그렇게 되면 수정사항이 생겼을 때 코드를 변경하고 확장하는 일이 매우 힘들어질 것이다. 애그리거트를 활용하면 이러한 어려움을 해결할 수 있다. 🔗애그리거트 애그리거트는 관련 도메인을 하나의 군집으로 묶은 것 애그리거트를 사용하면 연관 도메인을 묶어서 이해하기 때문에 모델 관계를 파악하기가 더 쉽다. 또한 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하면 코드도 일목조연하게 작성할 수 있다. 코드의 ..
최범균 님의 DDD Start를 읽고 정리한 내용입니다. DDD 아키텍처 네 가지 영역 아키텍처를 설계할 때 등장하는 4가지의 전형적인 영역이 있다. 표현 사용자의 요청을 응용 영역에 전달 응용 영역의 처리 결과를 (시각화하여) 사용자에게 전달 응용 사용자에게 제공해야 할 기능 구현 도메인 도메인 모델을 로직으로 구현 인프라 스트럭처 DBMS, Message Queue 등 인프라 영역과의 연계 Spring에 빗대면 아래 그림과 같은 구조를 이룬다. 표현 계층은 응용 계층에 의존적이고, 응용은 도메인에, 도메인은 인프라 스트럭처에 의존한다. 상황에 따라 상위 계층이 하위 계층에 의존하지 않을 수 있지만, 하위 계층은 상위 계층을 의존하지는 않는다. 아래 예시 코드는 금액 계산 로직이 복잡하여 '인프라 스트..
Spring boot 자동 설정 Spring boot로 와서 가장 크게 달라진 점은 설정 부분이다. @SpringBootApplication 하나만 추가하면 필요한 모든 설정을 알아서 추가한다. 이 자동 설정 기능만을 위해 autoconfigure라는 모듈이 작성되어 있고 그 덕분에 Spring boot의 핵심인 @SpringBootApplication을 사용할 수 있다. 가시적으로 새로운 기능은 아니지만 편리성을 비약적으로 상승시켜 생산성을 어마어마하게 높여주었다. @SpringBootApplication Spring boot 프로젝트를 생성하면 main 메소드가 포함된 클래스에 자동으로 추가되는 어노테이션이다. 어노테이션의 정의를 타고 올라가면 SpringBootApplication의 코드를 확인할 ..
감동이중요해
'Java' 카테고리의 글 목록 (2 Page)