본문 바로가기

전체 글36

JPA 개념 및 작동방식 JPA의 주요 개념 엔티티(Entity): JPA에서는 데이터베이스의 테이블에 매핑되는 자바 객체를 엔티티라고 합니다. 엔티티는 데이터베이스에 저장되거나 검색되는 개체입니다. 영속성 컨텍스트(Persistence Context): 영속성 컨텍스트는 엔티티의 상태를 관리하는 환경입니다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근하고, 엔티티의 상태 변화를 추적하며 데이터베이스와의 트랜잭션을 관리합니다. 엔티티 매니저(Entity Manager): 엔티티 매니저는 영속성 컨텍스트를 관리하고 엔티티의 생명주기를 관리합니다. 데이터베이스와의 트랜잭션을 처리하고 영속성 컨텍스트를 통해 엔티티를 데이터베이스에 저장하거나 조회합니다. JPQL(Java Persistence Query Language): JPQL은 .. 2024. 4. 15.
Memento Pattern Memento Pattern(메멘토 패턴)이란? : 어느 시점에서 인스턴스 상태를 확실하게 기록하여 저장해 두고, 나중에 인스턴스를 그 시점의 상태로 되돌려주는 패턴입니다. 우리가 문서작업을 할 때 흔히 사용하는 '되돌리기'기능을 생각하시면 편합니다. 바로 예제를 살펴보겠습니다. 여기 게임속에서 움직이는 플레이어가 있습니다. class Player { private int x; private int y; public void move(int x, int y) { this.x = x; this.y = y; } public void printPosition() { System.out.println("현재 플레이어 위치: (" + x + ", " + y + ")"); } } 이 플레이어는 move로 해당 위치.. 2024. 4. 15.
DI란? (Dependency Injection) DI란 무엇인가요? : DI는 의존성 주입을 의미하며, 객체가 필요로 하는 의존성을 외부에서 주입받는 디자인 패턴입니다. 예시를 들어보겠습니다. DI 사용 X public class Coffee {...} public class Programmer { private Coffee coffee = new Coffee(); public startProgramming(){ this.coffee.drink() } } 여기서 Programmer객체는 Coffee객체가 필요해서 Coffee객체를 생성했습니다. Programmer객체는 Coffee객체에 의존하고 있다. 라고 설명할 수 있습니다. 만약, Coffee객체가 아닌 Cappuccino, Americano객체를 사용하고 싶다면 해당 코드는 수정해야 합니다. 결.. 2024. 4. 10.
힙(Heap) 힙은 크게 두가지로 나뉩니다. 메모리 할당에서의 힙: 컴퓨터 프로그래밍에서 "힙"은 동적으로 할당된 메모리 영역을 의미합니다. 이 메모리 영역은 정적인 스택과 대조되며, 필요에 따라 프로그램에서 동적으로 할당 및 해제됩니다. 힙은 주로 동적으로 크기가 변하는 데이터 구조를 저장하기 위해 사용됩니다. 예를 들어, 배열, 연결 리스트, 트리 등의 자료구조는 힙에 저장될 수 있습니다. 우선순위 큐에서의 힙: 힙은 이진 트리로 구현되는 자료구조로, 우선순위 큐를 구현하는 데 사용됩니다. 이진 힙은 보통 "최소 힙(Min Heap)" 또는 "최대 힙(Max Heap)"으로 분류됩니다. 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 값을 갖는 완전 이진 트리이며, 최대 힙은 반대입니다. 이러한 속성은 우선순위 .. 2024. 4. 9.
Chain of Responsibility Pattern 책임 연쇄 패턴(Chain Of Responsibility Pattern, COR) : 요청에 대한 처리를 하나의 객체가 몽땅 하는게 아닌, 여러개의 객체를 사슬처럼 연결해 연쇄적으로 처리하는 패턴입니다. 이러한 처리 객체들을 핸들러(Handler)라고 하고,각 핸들러는 요청을 처리할 수 없으면 다음 핸들러에 책임을 '떠넘기는'패턴입니다. 떠넘긴다? '떠넘긴다'라는 말은 부정적으로 들리지만, 하나의 객체를 처리하는 책임을 요청하는 쪽과 처리하는 쪽을 분리하여 결합도를 느슨하게 만들고, 처리할 객체를 변경할 경우에도 유연하게 대처가 가능하다는 의미입니다.주로 if-else문을 최적화하는데 있어 실무에서 많이 사용하는 패턴입니다. 예를 들어보겠습니다. public class Trouble { private .. 2024. 4. 8.
Array, LinkedList 특징, 차이점, 장단점 Array(배열) #특징 - 원소를 순서대로 저장합니다. - 인덱스를 사용하여 각 원소에 접근할 수 있습니다. - 크기를 미리 지정해야 하며, 크기를 변경하기 어렵습니다. #장점 - 원하는 위치의 데이터를 빠르게 검색하거나 변경할 수 있습니다. - 메모리 상에 연속적으로 저장되어 있기 때문에 캐시 효율이 좋습니다. #단점 - 크기를 변경하기 어렵습니다. 크기를 변경할 때마다 새로운 배열을 할당하고 이전 데이터를 복사해야 합니다. - 삽입, 삭제 작업이 비효율적입니다. 중간에 원소를 추가하거나 삭제할 경우 해당 위치 이후의 모든 원소를 이동해야 합니다. LinkedList(연결 리스트) #특징 - 각 원소는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있습니다. - 크기를 미리 지정할 필요가 없으며, .. 2024. 4. 3.
프로시저(Procedure) 프로시저란? : 일련의 SQL 문을 하나로 묶어서 실행할 수 있는 저장된 프로그램 유형입니다. MySQL에서 프로시저를 생성하는 방법은 다음과 같습니다. 아래 예제는 MySQL에서 "Customers" 테이블의 데이터를 반환하는 간단한 프로시저를 생성하는 방법을 보여줍니다. DELIMITER // CREATE PROCEDURE GetCustomerDetails() BEGIN SELECT * FROM Customers; END // DELIMITER ; 위의 코드에서 DELIMITER는 문장 종결자를 변경하는 데 사용됩니다. MySQL에서 기본적으로 세미콜론(;)이 문장의 종료를 나타내지만, 프로시저의 경우 복잡한 내부 블록을 포함할 수 있으므로 DELIMITER를 사용하여 이를 변경합니다. 여기서는 //.. 2024. 4. 2.
Visitor Pattern Visitor 패턴 : 데이터 구조와 처리를 분리합니다. 여기 물건을 판매하는 가게가 있습니다. 이 가게에는 여러 종류의 상품이 있고, 각 상품에는 정보가 있습니다. class Book { private double price; public Book(double price) { this.price = price; } public double getPrice() { return price; } } class Fruit { private double weight; private double pricePerKg; public Fruit(double weight, double pricePerKg) { this.weight = weight; this.pricePerKg = pricePerKg; } public d.. 2024. 4. 1.
[Qcheck] 프로젝트의 시작 : 요구사항 정리하기 평화로운 오후. 집무실에 들어가기 위해 QR코드를 찍던 나는 갑자기 만들고 싶은 프로젝트가 생겼다. 그건 바로 "누구든지 그룹을 만들고 QR코드로 해당그룹에 대한 출석을 관리하는"프로그램이다. 말 그대로다. 예를 들어 오프라인 학습 스터디를 만들었다고 하자.그리고 멤버들의 출결을 관리하고 싶다.출결은 리더가 QR코드를 생성해 자신의 폰이나 노트북으로 보여주면 출석한 사람이 찍어서 출석체크를 한다.그리고 그룹의 멤버별로 출결현황을 보여주고 리더는 관리할 수 있게한다. 이제 흐름은 생각을 했으니 정리해보자. 정리 그룹을 생성한다. 해당 그룹을 만든사람이 QR을 생성한다. QR생성시 정상,지각 등등의 출석상황을 넣는다. 멤버는 QR을 찍으면 출석을 한다. 리더는 모든 멤버의 출결상황을 볼 수 있고, 멤버는 본.. 2024. 3. 29.
[DB] 인덱스(Index) 인덱스란? : 데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 데이터 구조로, 테이블의 특정 열에 대한 빠른 검색 및 정렬을 가능하게 합니다. B-트리 : 자료구조로, 루트 노드, 리프 노드, 그리고 사이에 있는 브랜치 노드로 나뉩니다. 이런식으로 구성되어 테이블 탐색시 전부를 탐색하는게 아닌 "있을 법한" 노드를 탐색해 검색속도를 높힙니다. 인덱스 최적화 기법 인덱스는 비용이다. : 인덱스는 두 번 탐색하도록 강요하기 때문에 관련 읽기 비용이 듭니다. 또한 컬렉션 수정시 인덱스도 수정되어야하는 비용이 발생합니다. 항상 테스팅하라. : 인덱스 최적화 기법은 서비스 특징에 따라 달라지기 때문에 항상 테스팅하는 것 이 중요합니다. 복합 인덱스는 같음,정렬,다중 값, 카디널리티 순이다. : 여러 필드를 .. 2024. 3. 27.
스레드 스레드란? : 프로세스의 실행 가능한 가장 작은 단위. 프로세스의 특정한 수행 경로이자 프로세스 내에서 실행되는 여러 흐름의 단위이다. 멀티스레딩 : 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법 한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running)상태일 수 있어서 빠른처리가 가능합니다. 동시성에도 큰 장점이 있습니다. 하지만 한스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있습니다. #동시성이란? : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것 공유 자원 : 여러 스레드가 동시에 접근할 수 있는 데이터 또는 리소스 예를 들어, 한 프로그램에서 여러 스레드가 동시에 파일을 읽거나 쓰는 경우를 생각해보.. 2024. 3. 26.
Bridge Pattern Bridge Pattern이란? : 추상화와 구현을 분리하여 각각 독립적으로 확장할 수 있게 하는 디자인 패턴입니다. '기능의 클래스 계층'과 '구현의 클래스 계층'을 나누고 중간을 연결하는 다리(Bridge)를 놓습니다. 이렇게 두 개의 독립된 클래스 계층으로 나누면 각각의 클래스 계층을 독립적으로 확장할 수 있습니다. 예시 : 다음 예제는 Bridge 패턴을 사용하여 TV와 리모컨 사이의 관계를 구현했습니다. TV를 추상화하고(TV 인터페이스), 리모컨을 구현(Remote 인터페이스)으로 나타내어 각각 독립적으로 확장할 수 있습니다. 이를 통해 SamsungTV와 SonyTV를 구체적인 구현으로 만들어 BasicRemote 클래스를 이용하여 TV의 전원을 켜고 끄고 채널을 변경할 수 있습니다. // .. 2024. 3. 25.