전체 224

JPA에 대해 깊이 알아보자

JPA에 대해 깊이 알아보기 위해 체크리스트 JDBC 와 Persistence Framework 의 차이점에 대해 설명할 수 있다. JDBC Template 과 MyBatis 의 차이점에 대해 설명할 수 있다. SQL Mapper 와 ORM 의 차이점에 대해 설명할 수 있다. MyBatis 가 쿼리를 생성하는 2가지 방법에 대해 설명할 수 있다. 영속성 컨텍스트와 쓰기지연의 연관성에 대해서 설명할 수 있다. 다대다 관계를 현업에서 주로 어떻게 구현하여 사용하는지 설명할 수 있다. 부모가 자식의 영속성을 완전히 관리하기 위해서 사용하는 cascade 옵션을 설명할 수 있다. 현업에서 주로 사용하는 Fetch 전략에 대해서 설명할 수 있다. QueryDSL 의 버전별 연동방법을 설명할 수 있다. QueryD..

Language/Java 2024.03.07

Service 인터페이스와 구현체 분리

왜 분리해서 사용할까? 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함이기 때문이다. 이러한 구조로 프로젝트를 설계했을 때, interface에서 정의한 기능을 새로운 방식으로 구현해야 한다면 사용해야 하는 곳에서 구현체만 손쉽게 바꿀 수 있기 때문에 Service를 인터페이스로 만들고, 해당 기능을 ServiceImpl라는 클래스 로 구현하는 것이다. 사용 장점 확장 가능성과 유지보수성 현재는 인터페이스와 구현체 클래스가 일대일 관계를 맺고 있을지라도 언제 서비스가 커져서 구현체 클래스가 확장될지를 모른다. 그래서 이러한 구조로 확장 가능성을 열어둔다면 유지보수하기 편리하다. 협..

Language/Java 2024.03.06

@Component, @Bean, @Autowired가 뭘까?

일단 결과적으로 이 세 어노테이션들은 모두 빈을 등록하는 어노테이션이다. 근데 왜 구분하여 사용하는 걸까? 용도가 다르니 구분했겠지. @Component @Component는 개발자가 직접 작성한 클래스 파일에 대해 Bean을 등록하기 위한 어노테이션이다. 예를 들면 Controller, Service 어노테이션을 보면 @Component가 붙어있는 것을 볼 수 있다. @Bean @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean 등록하기 위한 어노테이션이다. @Autowired @Autowired는 @Component를 통해 등록된 Bean을 다른 곳에서 의존성 주입(DI)을 위해 사용하는 어노테이션이다. @Autowired를 통해 의존성을 주입하는 방법은 세 가지가 있다. 생성자..

Language/Java 2024.03.05

@NoArgsConstructor (access = AccessLevel.PROTECTED) 사용 이유

접근 권한을 Protected로 제어하기 위한 것이다. 같은 패키지나 자식 클래스에서 사용할 수 있도록 하기 때문에 무분별한 생성자 사용을 억제할 수 있다. 다른 접근 권한과 함께 설명하자면 접근 권한을 Private로 하면 프록시 객체 생성에 문제가 생기고, 접근 권한을 Public으로 하면 무분별한 객체 생성 및 Setter를 통한 값 주입을 할 수 있기에 접근 권한을 Protected로 작성 하는 것이다.

Language/Java 2024.03.04

[백준 python 1744] 수 묶기

[Gold IV] 수 묶기 - 1744 문제 링크 성능 요약 메모리: 31120 KB, 시간: 40 ms 분류 많은 조건 분기, 그리디 알고리즘, 정렬 제출 일자 2024년 2월 23일 17:35:03 문제 설명 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 상관없이 묶을 수 있다. 하지만, 같은 위치에 있는 수(자기 자신)를 묶는 것은 불가능하다. 그리고 어떤 수를 묶게 되면, 수열의 합을 구할 때 묶은 수는 서로 곱한 후에 더한다. 예를 들면, 어떤 수열이 {0, 1, 2, 4, 3, 5}일 때, 그냥 이 수열의 합을 구하면 0+1+2+4+3+5 = ..

[백준 python 11501] 주식

[Silver II] 주식 - 11501 문제 링크 성능 요약 메모리: 168208 KB, 시간: 3168 ms 분류 그리디 알고리즘 제출 일자 2024년 2월 23일 17:22:30 문제 설명 홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다. 주식 하나를 산다. 원하는 만큼 가지고 있는 주식을 판다. 아무것도 안한다. 홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다. 예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, ..

그룹별 조건에 맞는 식당 목록 출력하기 - 131124

[level 4] 그룹별 조건에 맞는 식당 목록 출력하기 - 131124 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > JOIN 채점결과 Empty 제출 일자 2024년 02월 23일 13:44:00 문제 설명 다음은 고객의 정보를 담은 MEMBER_PROFILE테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_OF_BIRTH는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다. Column name Type Nullable MEMBER_ID VARCHAR(100) FALSE MEMBER_NAME ..

코딩테스트/SQL 2024.02.23

오랜 기간 보호한 동물(1) - 59044

[level 3] 오랜 기간 보호한 동물(1) - 59044 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > JOIN 채점결과 Empty 제출 일자 2024년 02월 23일 14:00:26 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIM..

코딩테스트/SQL 2024.02.23

보호소에서 중성화한 동물 - 59045

[level 4] 보호소에서 중성화한 동물 - 59045 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > JOIN 채점결과 Empty 제출 일자 2024년 02월 23일 15:37:35 문제 설명 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다. NAME TYPE NULLABLE ANIMAL_ID VARCHAR(N) FALSE ANIMAL..

코딩테스트/SQL 2024.02.23

상품 별 오프라인 매출 구하기 - 131533

[level 2] 상품 별 오프라인 매출 구하기 - 131533 문제 링크 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms 구분 코딩테스트 연습 > JOIN 채점결과 Empty 제출 일자 2024년 02월 23일 15:54:31 문제 설명 다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은 PRODUCT 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. PRODUCT 테이블은 아래와 같은 구조로 PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다. Column name Type Nullable PRODUCT_ID INTEGER FALSE PRODUCT_CODE VARCHAR(8) FALSE PRICE..

코딩테스트/SQL 2024.02.23