Lazy

· Java
스트림과 게으른 평가 스트림은 데이터 컬렉션을 처리하는 편리한 도구다. 효율적인 구현 및 여러 이유로 Java8 설계자들은 스트림을 조금 특별한 방법으로 java8에 추가했다. 그중 하나로 스트림은 단 한 번만 소비할 수 있다는 제약이 있어서 스트림은 재귀적으로 정의할 수 없다. 자기 정의 스트림 다음 코드처럼 소수 스트림을 계산할 수 있다. public boolean isPrime(int candidate) { int candidateRoot = (int) Math.sqrt((double) candidate); return IntStream.rangeClosed(2, candidateRoot) .noneMatch(i -> candidate % i == 0); } public Stream primes(i..
· JPA
스프링은 컨테이너는 트랜잭션 범위의 영속성 콘텍스트 전략을 기본으로 사용한다. 트랜잭션이 같으면 같은 영속성 콘텍스트가 콘텍스트가 공유되고 트랜잭션이 끝나면 영속성 콘텍스트가 닫히는 것이다. 그럼 트랜잭션이 끝나고 엔티티에 지연 로딩으로 연결된 다른 엔티티를 불러오면 어떻게 될까? 보통 트랜잭션은 비즈니스 로직이 있는 서비스단에서 시작하고 종료한다. public class Member { ... @ManyToOne(fetch = FetchType.LAZY); private Team team; } Member member = memberService.getMember(1); // 트랜잭션 종료, 준영속 상태 member.getTeam(); // 종료 후 지연로딩으로 연결된 team 정보 조회 당연히 영속성..
· JPA
객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 프록시의 특징 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체를 생성하는데 이것을 프록시 객체, 프록시 클래스라고 한다. 프록시 객체는 실제 클래스를 상속받아서 만들어지므로 실제 클래스와 걷 모양이 같다. 따라서 사용하는 입장에서는 이것이 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객..
beekei
'Lazy' 태그의 글 목록