Java Priority Queue(우선순위 큐) 원리 및 사용 방법

우선순위 큐(Priority Queue) 란? 우선순위 큐(Priority Queue)는 일반적인 큐의 구조와 달리 들어가는 순서와 상관없이 정의한대로 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조 입니다. 그렇기 때문에 dequeue를 하면 이미 정의한 순서에 맞게 가장 위의 값이 나타납니다. 우선순위 큐는 힙을 기반으로 하는 완전이진트리로 우선순위를 정하게 됩니다. 사용 방법 우선순위 큐는 우선순위가 꼭 필요한 경우에 사용합니다. 람다식으로 정의해도 되고 Comparable을 이용해서 정의해도 됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 // 낮은 숫자가 우선순위가 높은 방식 PriorityQueue<Integer> pq = new PriorityQueue<>(); // 높은 숫자가 우선순위가 높은 방식 PriorityQueue<Integer> pq = new PriorityQueue<>(Collections....

2월 14, 2022 · 4 분

H2 2.1.210 Upgrade시 JPA 테스트 에러 해결 방법

H2를 최신 버전(2.1.210)으로 업데이트하니 아래와 같은 에러가 발생했습니다. 1 2 3 4 5 6 7 8 Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set ... java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) ... 일단 임시방편으로 H2 url을 연결하는 곳에 추가적으로 옵션(;MODE=LEGACY)을 넣으면 해결됩니다. 1 url: jdbc:h2:tcp://localhost/~/test;MODE=LEGACY MODE=LEGACY를 모드를 사용하면 H2 1.X용으로 작성된 응용 프로그램에 대한 일부 호환성 기능이 활성화됩니다. Hibernate ORM에서 H2에 대해서 유효하지 않은 SQL을 생성하기 때문이라고 합니다....

1월 29, 2022 · 1 분

Spring Data JPA와 JPQL 함께 사용하기

JPQL 이란? 예전에는 JPQL은 Java Persistence Query Language로 불렸지만 현재의 JPQL은(Jakarta Persistence Query Language) 라고 합니다.(나무위키 링크 ) 2019년부터 JPA(Java Persistence API)또한 Jakarta Persistence로 변경됐습니다. 이름은 달라졌지만 역할은 달라지지 않았습니다. JPQL을 이용하여 관계형 데이터베이스의 엔티티를 정의하고 이를 활용한 쿼리 언어를 자바를 이용하여 구현합니다. 더 나아가 Querydsl을 이용하면 좀 더 직관적이고 오류 없이 자바를 이용하여 작성할 수 있습니다. 간단한 예시로 회원 조회를 하는 경우 JPQL과 Querydsl의 차이는 아래와 같습니다. JPQL 1 2 3 4 5 6 public List<Member> findAll() { EntityManager entityManager; return entityManager....

1월 17, 2022 · 2 분

Mybatis와 JPA에 대하여

Mybatis란? 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크입니다. JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. 또한 Java코드와 SQL코드를 분리하여 서로 다른 역할에 집중할 수 있게 합니다. MyBatis는 DAO(Data Access Object)인터페이스를 통해 SQL과 연결 후 VO(Value Object) 또는 DTO(Data Transfer Object)로 바로 데이터를 가져옵니다. JPA란? JPA(Java Persistence API)는 ORM(Object-Relational Mapping) 기술 표준으로 JPA가 제공하는 API를 사용하면 직접적으로 SQL을 사용하지 않고도 DB에 접근이 가능합니다....

1월 15, 2022 · 2 분

@Autowired와 @RequiredArgsConstructor 차이점

@Autowired는 필드 주입이고, @RequiredArgsConstructor는 생성자 주입(Constructor Injection) 입니다. @RequiredArgsConstructor는 Lombok에서 제공하는 어노테이션 입니다. 결론적으로 생성자 주입을 권장합니다. 인텔리제이에서 코드를 작성하다보면 @Autowired를 사용하면 아래와 같은 경고를 알려줍니다. 경고 Field injection is not recommended Inspection info: Spring Team recommends: “Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies”. 뭐.. 추천하지 않고 생성자 주입방식을 쓰라고 하는거 같네요. 생성자 주입으로 코드를 작성하면 아래와 같은 장점이 있습니다. 순환 참조 방지 테스트 코드 작성 용이 코드 악취 제거 객체 변이 방지 필드 주입방식을 쓰면 아래와 같은 단점이 있습니다....

1월 12, 2022 · 1 분

Logitech Options를 이용한 마우스 커스텀하기

logitech options 란? 일부 로지텍 마우스 중에는 특정 소프트웨어를 지원하는 기능이 있습니다. 그 중 logitech options는 Flow기능으로 기기간 파일전송이나 하나의 마우스로 여러대의 기기를 제어할 수 있습니다. 이번에 소개해드릴 기능은 Flow기능이 아닌 마우스 제스처 모드에 따른 설정입니다. 설치 해당 사이트 에서 OS에 맞는 프로그램을 설치하면 됩니다. 설치 후 정상적으로 마우스가 연결되면 아래와 비슷한 사진이 보입니다. 커스텀 설정하기 프로그램 실행 후 흰색 동그라미가 있는 모든 버튼이 커스텀 가능합니다. 저의 경우 뒤로가기와 앞으로가기 버튼만 커스텀하여 사용하고 있습니다....

1월 8, 2022 · 2 분

자주 사용하는 Git Command 정리

Git Command를 사용하면서 자주 사용하는 명령어를 정리했습니다. 이외에도 수많은 명령어가 존재하지만 작업과 관련된 명령어는 아래의 경우로 충분하다고 생각합니다. 해당 명령어 이외에 더 참고하고 싶다면 https://git-scm.com/book/ko/v2 해당 사이트에서 무료로 책을 다운로드 받아서 볼 수 있습니다. 또한, 요즘은 소스트리(https://www.sourcetreeapp.com/ )에서 GUI로 편하게 작업할 수 도 있습니다. 기본적인 명령어는 숙지하는 것이 좋지만 history나 간단한 업무용으로는 충분하다고 생각합니다. 기본 명령어 git 설정 보기 1 git config --list 사용자 이름 입력 1 git config --global user....

12월 29, 2021 · 2 분