자바 실행 과정 (JVM)
·
☕ Java
✅ 빌드Build TypeProcessExamplecompile소스코드 전체를 기계어로 번역C, C++, Gointerpret소스코드를 한 줄씩 번역하면서 실행Pythonhybrid소스코드 전체를 중간코드(bytecode)로 번역한 뒤, 가상머신(VM)에서 한 줄씩 실행Java영어를 쓰는 사람이 많기 때문에 프랑스어, 힌두어의 책을 1차적으로 영어로 번역함 (중간 번역)그런 다음 한국어로 번역하면 번역 가능한 사람이 많이 때문에 번역 빨리 할 수 있음바이트 코드 (bytecode).java → .class기계어는 아니지만, 어셈블리어처럼 ‘기계에 가까운 언어’하드웨어가 직접 처리하는 것이 아닌, 소프트웨어(VM)에 의해 처리됨바이트코드는 VM 전용 기계어compiler : javac.exeVM (Virt..
JpaRepository의 save(S entity) 동작 원리
·
🌿 Spring/JPA
1. 개요public Member saveMember(){ // Member 객체 생성 Member member = createMember(); // 저장 return memberRepository.save(member);}위와 같이 save메소드를 호출 및 리턴할 때 생성된 객체와 동일한 객체가 리턴되는지, 아니면 새로운 객체를 만들어서 리턴시키는지 궁금해졌다. 궁금증 해결을 위해 해당 메소드의 동작 원리를 파악해보자! 2. 구현체 분석package org.springframework.data.repository;/** * Interface for generic CRUD operations on a repository for a specific type. */@NoRepos..
PriorityQueue, Comparator
·
☕ Java
자바의 PriorityQueue(우선순위 큐)는 높은 우선순위의 요소를 먼저 꺼내서 처리하는 자료구조이다. 내부 구조는 힙으로 구성되어 있어 이진 트리 구조이고, 시간복잡도는 O(NlogN)이 소요된다. PriorityQueue의 자세한 내용은 https://st-lab.tistory.com/219 을 참고하면 잘 학습할 수 있다. ✔️ 우선순위 부여하기PriorityQueue pq = new PriorityQueue();PriorityQueue는 기본적으로 오름차순으로 구성되기 때문에, 위처럼 Integer로 비교할 때는 문제없이 오름차순으로 구성한다.  class Member { int age; int height; int weight; // 전체 생성자}PriotrityQueu..
수정,삭제 쿼리 직접 작성 시 주의해야 할 점
·
🌿 Spring/JPA
1. 상황기존의 view 증가 코드에서는 dirty checking를 사용하여 view를 update하는 쿼리가 자동으로 발생하도록 코드를 작성했다. 이 경우 view가 증가하면 @EnableAuditing으로 인해 updated도 같이 변경된다는 문제가 있다.해당 문제의 해결을 위해 JPQL을 활용하여 영속성 컨텍스트(1차 캐시)를 무시하고 다이렉트로 DB에 수정 쿼리를 날리도록 했다. 이렇게 하면 쿼리가 실행될 때 JPA는 해당 엔티티의 상태를 감지하지 않으므로, Auditing 기능이 작동하지 않는다. 현재 상황은 단건 수정이지만, 여러개의 레코드를 수정 및 삭제할 때도 이와 유사하게 JPQL, QueryDSL 등을 활용하고 이를 "벌크 연산"이라고 한다. @Entity@Getter@Table(na..
스트림, BufferedReader vs. Scanner
·
☕ Java
Java 언어를 사용해서 백준 문제를 풀고 있었는데, Scanner를 사용해서 입력을 받을 때는 시간 초과가 나고 BufferedReader를 사용하자 시간 초과 에러가 발생하지 않았다. 이 둘이 어떤 차이가 있는지 알아보자.✅ 스트림스트림(Stream)을 통해 값을 입력하고, 값을 출력할 수 있다. 스트림은 바이트(byte) 데이터를 읽고 출력하는 "바이트 기반 스트림"과 문자(char) 데이터를 읽고 출력하는 "문자 기반 스트림"으로 구분된다.✅ 보조 스트림"보조 스트림" 이란 다른 스트림과 연결되어 여러가지 편리한 기능을 제공하는 스트림이다.자체적으로 입출력이 불가능하기 때문에 입출력 소스와 바로 연결과는 InputStream, OutputStream, Reader, Writer 등에 연결하여 입출..
다익스트라 (Dijkstra)
·
🧩 알고리즘
📌 다익스트라 알고리즘 (Dijkstra)특정 노드에서 다른 모든 노드로 향하는 최대or최소 거리를 구하는 알고리즘 (음의 간선은 사용 불가능)(Greedy & DP)❗ 동작제공된 거리 정보로 인접 리스트 or 인접 행렬 생성다른 모든 노드로 향하는 최대 or 최소 경로를 저장하는 dp를 하나 선언(dp 전체를 MAX_VALUE로 초기화, 시작 노드는 cost = 0으로 설정)우선순위큐를 사용해서 가장 거리가 짧은 것 먼저 탐색값을 꺼냈는데, 이미 더 작은 값으로 갱신 되어 있는 경우⇒ 값을 새로 갱신할 필요 없음 (continue)꺼낸 노드에 연결되어 있는 노드들을 순차적으로 탐색⇒ 새로 update한 거리가 dp에 저장된 거리보다 큰 경우, update X & 우선순위 큐에 새로 저장 X ⏰ 시간 ..