전체 글

전체 글

    [Java] 불변 객체(Immutable Object) 에 대해 알아보자

    [Java] 불변 객체(Immutable Object) 에 대해 알아보자

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 불변 객체(Immutable Object)란? 객체 생성 이후 내부 상태가 변하지 않는, 변경할 수 없는 객체를 이야기합니다. 불변객체는 내부 상태를 변경하는 메소드를 제공하지 않거나 방어적 복사를 통해 데이터를 제공합니다. 대표적으로 Java의 String, Integer, Long, Double 등등 있습니다. 불변 객체(Immutable Object) 의 장점 Thread-Safe하여 병렬 프로그래밍에 유용하고 동기화를 고려하지 않아도 된다. 멀티 스레드 환경에서 발생하는 주된 문제는 공유자원에 대해 서로 변경하다보니 값이 덮어씌워지는 문제가 있습니다. 하지만 불변객체는 항상 동일한 값을 보장하므로 동기화를 신경쓸 필요가 없다는 장점이 있습..

    JPA 에서 낙관적 락(Optimistic-Lock)을 이용해 동시성 처리하기

    JPA 에서 낙관적 락(Optimistic-Lock)을 이용해 동시성 처리하기

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 낙관적 락과 비관적 락의 차이점 이번엔 낙관적 락(Optimistic Lock) 을 이용해 동시성 처리를 하는 방법에 대해 알아보려 합니다. 그전에 낙관적 락(Optimistic Lock) 과 비관적 락(Pessimistic Lock) 의 간략한 차이점에 대해 먼저 설명드리겠습니다 낙관적 락(Optimistic Lock) 충돌이 발생하지 않을 것이라 가정하고 Lock을 거는 방식 트랜잭션을 commit 하는 시점에 충돌을 알 수 있음 DB Level 에서 동시성을 처리하는것이 아닌 Application Level 에서 처리 비관적 락(Pessimistic Lock) 충돌이 발생할것이라 가정하고 우선 DB에 Lock을 거는 방식 (select fo..

    [Java] N개 이상의 값으로 그룹핑해보기

    [Java] N개 이상의 값으로 그룹핑해보기

    예제 및 테스트 코드는 github 에서 확인 가능합니다. Stream api 그룹핑 방법 Java 에서는 stream api 를 이용하여 손쉽게 grouping 을 진행할 수 있습니다. 예시를 통해 그룹핑 코드를 작성해보겠습니다. 아래는 그룹핑에 사용될 예시 데이터입니다. User.java public class User { private Long id; private String name; private Gender gender; // MALE, FEMALE private Integer age; private City city; // SEOUL, TOKYO, NEW_YORK, LA, PARIS } id 이름 성별 나이 도시 1 user1 MALE 22 SEOUL 2 user2 FEMALE 25 SEO..

    전략 패턴(Strategy Pattern) 은 무엇일까

    전략 패턴(Strategy Pattern) 은 무엇일까

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 전략 패턴(Strategy Pattern)이란? 다음은 위키피디아에서 정의하는 전략 패턴(strategy pattern)입니다. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 특정한 계열의 알고리즘들을 정의하고 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 객체의 행위 혹은 알고리즘을 전략(strategy)이라 합니다. 즉 객체의 행위를 쉽게 변경하기 위해 등장한 패턴이라 할 수 있습니다. Context: Strategy 를 사용하는 객체 Strategy: 전략에 대한 인터페이스를 담당하는..

    JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징

    JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징

    예제 및 테스트 코드는 github 에서 확인 가능합니다. 영속성 컨텍스트 특징 1차 캐시 변경 감지 (Dirty Checking) 동일성 보장 지연 로딩(Lazy Loading) 쓰기 지연 1차 캐시 영속성 컨텍스트 내부에서 엔티티를 캐시로 저장하는 것 일반적으로 @Transactional 어노테이션과 라이프사이클이 동일함 OSIV(Open Session In View) 가 true 라면 ServiceLayer 에서 @Transactional 이 종료되어도 PresentationLayer 까지도 1차 캐시는 유지됨 Jpa 는 데이터 조회시 캐시를 우선적으로 조회하고 캐시에 데이터가 없으면 DB를 조회함 @Transactional public Team findTeam(Long id) { return te..