정적 팩토리 메서드 패턴과 메서드명 규칙
📌 정적 팩토리 메서드 패턴 Static Factory Method (정적 팩토리 메서드) 패턴은 객체 생성의 역할을 생성자 대신 정적 메서드에 위임하는 디자인 패턴이다. User user1 = new User("John", 30); User user2 = User.createWithNameAndAge("John", 30); 정적 팩토리 메서...
📌 정적 팩토리 메서드 패턴 Static Factory Method (정적 팩토리 메서드) 패턴은 객체 생성의 역할을 생성자 대신 정적 메서드에 위임하는 디자인 패턴이다. User user1 = new User("John", 30); User user2 = User.createWithNameAndAge("John", 30); 정적 팩토리 메서...
📌 @Column 어노테이션의 속성 엔티티의 속성을 정의할 때, @Column 어노테이션을 사용한다. name 속성을 통해 컬럼의 이름을 지정할 수 있고, nullable 속성을 통해 NOT NULL 제약 조건을 추가할 수 있다. unique 속성을 통해 UNIQUE 제약 조건을 추가할 수 있고, length 속성을 통해 컬럼의 길이를 지정할 수 있...
📌 개요 값에 대한 검증을 @Valid 어노테이션이나 @Column 어노테이션 등을 통해 구현할 수 있으나, 그 이상의 검증을 요구하는 경우 커스텀 어노테이션을 만들어 구현하는 것이 좋다. 요구사항은 다음과 같다. Player 엔티티는 name, role, information 필드를 가진다. Role 은 ADMIN, USER 가 존재한...
📌 Paging이란? Paging 은 전체 데이터를 한 번에 조회하는 것이 아닌, 일정 크기의 페이지 단위로 분할하여 조회하는 방법이다. 대량의 데이터를 한 번에 조회할 때 발생하는 메모리 사용량 문제를 해결할 수 있다. 📌 구성 요소 Pageable Pageable 는 페이징 정보를 추상화한 인터페이스이다. 페이지 번호, 하나의 페이지에 포함...
📌 개요 N+1 문제를 효과적으로 해결하는 방법은 크게 세 가지가 있는데, Fetch Join , @EntityGraph , Batch Size 이다. 일반적인 경우에서 이들 중 뭐가 더 좋냐고 하면 Fetch Join 과 @EntityGraph 가 더 좋다고 할 수 있다. 발생하는 쿼리의 개수 관점에서 보면 그렇다는 것이다. Fetch Join 과...
📌 개요 PR 리뷰를 진행할 때 해당 PR의 코드만 보고 개선할 점을 찾기에는 어려움이 있으므로, 직접 돌려보는 편이다. 여러 개발자들이 직접 프로젝트 레포지토리에서 개발한다면 해당 브랜치로 checkout하면 되지만, 로컬에 fork하여 개발을 진행하는 경우 상황은 조금 복잡해진다. 다른 개발자가 fork한 레포지토리에 remote하여 pull하는...
📌 개요 @Controller , @Service , @Repository 모두 @Component 어노테이션을 상속하고 있다. @Component 는 해당 클래스를 Bean으로 등록하는 역할을 한다. 사실 어노테이션 이름만 다르지, 내부적으로 수행하는 동작은 모두 같다. 그렇다고 @Controller 대신 @Component 를 사용하면 제대로 ...
📌 문제 https://www.acmicpc.net/problem/1944 📌 설명 처음에는 BFS만으로 문제를 해결하려고 했는데, 가능한 최대 복제 로봇 수를 알 수 없어서 문제를 풀 수 없었다. 이론 상 무한 개의 로봇이 복제될 수 있기 때문이다. 로봇이 무한히 복제될 수 있다는 의미를 다른 관점으로 바라보아야 한다. 출발지 ‘S’에서 시작...
📌 N+1 문제란? 하나의 쿼리를 기대했으나 의도치 않게 N개의 쿼리가 추가로 발생하는 문제를 말한다. 이를 해결하는 대표적인 세 가지 방법이 있는데, Fetch Join, @EntityGraph , Batch Size 이다. 각 방법으로 N+1 문제를 해결하는 과정을 예제를 통해 살펴보자. public class Post { @Id...
📌 문제 https://www.acmicpc.net/problem/1086 📌 설명 먼저, 러프하게 문제를 푸는 방법을 생각해보자. 주어진 수를 적절히 선택하여 순열을 만들었을 때, 이 순열이 $K$로 나누어 떨어지는 확률을 구해야 한다. 다만, 두 가지 큰 제약이 존재한다. 각각의 수의 길이는 최대 50이고, unsigned l...