본문 바로가기

분류 전체보기151

[JPA] 더티 체킹(dirty checking) 정리 더티 체킹이란? JPA에서 더티 체킹(dirty checking)이란 영속성 컨테이너가 관리하는 엔티티의 상태를 감지해서, 변경된 부분이 있다면 자동으로 트랜잭션이 끝나는 시점에 데이터베이스에 반영하는 기능이다. 따라서 여기서 말하는 dirty는 “엔티티 데이터의 변경된 부분”을 뜻하며 dirty checking은 변경된 부분을 감지한다는 의미이다. 따라서 개발자가 update에 관련된 쿼리를 작성하지 않아도 되기 때문에, 코드의 복잡성을 줄일 수 있다는 특징이 있다. 그렇다면 어느 상황에서 더티 체킹이 일어나는 지 알아보자. 더티 체킹 조건 영속성 컨텍스트에서 관리되는 엔티티 영속성 컨텍스트는 엔티티를 처음 조회할 때 시작되며, 이후 변경을 감지한다. 준영속/비영속 상태의 엔티티는 더티 체킹의 대상이 .. 2023. 4. 16.
[Java] Stream API 개념 정리 Stream API란? JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java로 함수형 프로그래밍을 할 수 있는 API를 제공하고 있다. 이 중 Stream API에는 데이터를 처리하는데 자주 사용되는 함수들을 정의해 두었다. 이 API 를 이용하면 컬렉션 요소를 하나씩 차례대로 처리하여 원하는 결과를 얻을 수 있다. 필터링, 매핑, 정렬 등 다양한 방식으로 가공을 하며 코드의 가독성과 성능을 높일 수 있다는 특징이 있다. [Stream API을 사용하지 않았을 때] nameList를 선언해서 정렬 후 출력하는 코드다. 충분히 잘 짜여진 코드지만, 이를 Stream API를 이용하여 더 간결하게 정리할 수 있다. List nameList = new ArrayList(Arra.. 2023. 4. 14.
[프로그래머스] 스티커 모으기(2) c++ 문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12971 Key 처음 원소를 선택했을 경우의 dp배열, 두번째 원소를 선택했을 경우의 dp배열 두가지 배열의 마지막 원소를 비교하여 최댓값을 구하는 문제이다. 또한 해당 원소를 골랐을 때의 최댓값을 구하는 방법은, 인접한 것을 고르지 못하므로 i-1번 까지의 최댓값과, i-2번까지의 최댓값 + 해당 원소의 값을 비교하여 둘 중 큰 것으로 골라야 한다. 만약 dp를 하나만 만든다고 가정해보자. 예시와 같이 14, 6, 5, 11, 3, 9, 2, 10 가 주어졌을 때, 점화식으로 현재 원소까지의 최댓값을 구하면 다음과 같다. 수 14 6 5 11 3 9 2 10 현재까지의 최댓값 14 14 .. 2023. 4. 13.
[Java] 멀티스레드 환경에서의 동시성 문제와 대책 스레드란? 프로세스는 실행중인 프로그램이란 뜻이다. 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당 받으면 이를 프로세스라고 부른다. 스레드는 프로세스 내에서 실제로 작업을 수행하는 한 단위이다. 모든 프로세스는 하나 이상의 스레드가 존재하고, 두개 이상의 스레드를 갖는 프로세스를 멀티 스레드 프로세스(Multi Thread Process)라고 한다. 프로세스는 독자적인 메모리를 할당받기 때문에 프로세스끼리 일반적으로 서로의 메모리 영역을 침범하지 못한다.(공유할 수 없다) 하지만 프로세스 내부의 스레드는 같은 자원을 공유하여 사용이 가능하다. 같은 자원을 공유할 수 있기 때문에 동시에 여러가지 일을 같은 자원을 두고 수행할 수 있고, 이는 곧 병렬성의 향상으로 이어진다. 여러 스레드를 .. 2023. 4. 12.
[Java] equals(), hashCode()를 재정의 해야 하는 이유 객체의 동일성은 객체의 메모리 위치가 같은 지를 비교하기 때문에, 이는 자바에서 직접 제어할 수 없다. 따라서, 객체의 동일성은 equals()메서드나 hashCode()메서드와 별개의 개념이며, 앞서 말한대로 개발자가 직접 제어할 수 없다. 대신, 개발자는 equals()메서드와 hashCode()를 @Override로 재정의하여 객체의 동등성을 비교할 수 있다. 여기서 말하는 동등성은 객체 내용이 같은 지 비교하는 것을 의미한다. equals()와 hashCode()를 재정의한 예제를 살펴보자. public class Animal { private String name; private int age; public Animal(String name, int age){ this.name = name; t.. 2023. 4. 12.
[Java] 자바 Collection 개념 정리 & 예제 Collection Framework란? 객체, 데이터들을 효율적으로 관리 할 수 있는 자료구조들을 모아 놓은 라이브러리를 Collection Framework라고 한다. Collection Framework는 사용자에게 데이터 구조를 구현하는데 필요한 다양한 컬렉션 클래스를 제공한다. 아래 그림을 살펴보자. List와 Set인터페이스 모두 Collection 인터페이스를 상속받지만, 구조를 갖는Map 인터페이스는 구조상의 차이로 별도로 정의된다. List, Set, Map 인터페이스는 ArrayList, HashSet, HashMap과 같은 하위 클래스에 의해 구현된다. Collection Framework를 구성하고 있는 주요 인터페이스의 간략한 특징은 다음과 같다. 인터페이스 설명 구현 클래스 Li.. 2023. 4. 10.