본문 바로가기

전체 글345

String, StringBuilder, StringBuffer, CharSequence 이해하기 String str = new String(); str += "asdf"; --- (1) str += "asdf"; --- (2) str += "qwer"; --- (3) ... 을 계속 반복하면 (메모리 주소: 100) str = "asdf" 메모리 주소 100은 쓰레기가 된다.(GC의 대상) (메모리 주소: 200) str = "asdfasdf" 메모리 주소 200은 쓰레기가 된다. (GC의 대상) (메모리 주소: 300) str = "asdfasdfqwer" 이런 반복 작업이 계속 되면 GC를 계속 하게 되고, 시스템의 CPU을 사용하게 되고 시간도 많이 소요된다. StringBuilder나 StringBuffer를 사용하면 새로운 객체를 생성하는 것이 아니라, 기존 객체에 덧붙여 사용하게 된다. .. 2023. 8. 6.
[N+1 문제] 게시글 댓글 조회 기능 querydsl로 해결하기 시나리오 Review(독후감) 데이터를 가져오면서, 해당 Review에 작성된 댓글 리스트를 가져오고 싶었다. spring-data-jpa로 구현하니, 다음과 같이 구현할 수 있었다. @Transactional(readOnly = true) public TmpReviewDetailResponse getReviewDetail(Long reviewId){ Review review = reviewRepository.findByReviewId(reviewId); return ReviewDetailResponse.from(review); } @Getter @Builder @AllArgsConstructor public class ReviewDetailResponse { private String reviewTit.. 2023. 8. 6.
N+1 문제란? feat. 해결방법 - 개념적 이야기 N+1 문제란, 연관관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 개수(N)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상을 말한다. 1+N 문제라고 하는 게 더 이해하기 쉬울 것이다. @Entity @EntityListeners(AuditingEntityListener.class) @Table(name = "review") @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "r_id") private Long.. 2023. 8. 6.
QueryDsl을 이용한 No offset 구현하기 bookId가 같은 review들 정보를 페이징하여 가져오기를 구현했다. Entity, Dto 구성 Review Entity가 다음과 같고, @Entity @EntityListeners(AuditingEntityListener.class) @Table(name = "review") @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Review { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "r_id") private Long reviewId; @ManyToOne(fetch = FetchType.. 2023. 8. 6.
싱글톤 LazyHolder 적용해보기 public class Main { public static void main(String[] args) { Obj.Method1(); Obj.Method2(); Obj.Method2(); Obj.Method1(); } } public class Member { private String name; private String text; public Member(String name, String text) { this.name = name; this.text = text; } } public class Obj { static class Inner{ private static final Member member = new Member("민정", "굿"); } private static Member newM.. 2023. 8. 3.
백준 2098 외판원 순회 https://www.acmicpc.net/problem/2098 2098번: 외판원 순회 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 16) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 비트마스킹 + dp + dfs 1. 출발 도시는 어느 지점이든 상관없다. 어차피 구한 경로는 사이클을 이루기 때문. 2. 방문한 도시는 비트마스킹으로 표시한다. 3. dp에는 현재 도시에서 남은 도시들을 거쳐 다시 출발점으로 돌아오는 비용이 저장된다. dp[row][visit] = 현재 row 도시이며, 방문현황은 visit와 같고, 아직 방문하지 않은 도시들.. 2023. 8. 2.