전체 글 123

생산자 소비자 문제1

생산자 소비자 문제 - 소개 생산자 소비자 문제는 멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제 중  하나로, 여러  스레드가 동시에 데이터를 생성하고 소비하는 상황을 다룬다. 멀티스레드의 핵심을 제대로 이해하려면 반드시 생산자 소비자 문제를 이해하고, 올바른 해결방안도 함께 알아두어야 한다.생산자 소비자 문제를 제대로 이해하면 멀티스레드를 제대로 이해했다고 볼 수 있다. 그만큼 중요한  내용이다. 프린터 예제 그림  기본 개념 생산자(Producer) 데이터를 생성하거나 작업을 요청하는 역할. 예를 들어, 파일에서 데이터를 읽어 오거나 네트워크에서 데이터를 받아오는 스레드가 생산자 역할을 할 수 있다프린터 예제에서 사용자의 입력을 프린터 큐에 전달하는 스레드가 생산자의 역할이다.소비자(Consum..

JAVA 2024.12.31

멀티스레드 환경에서 volatile 의 중요성: 메모리 가시성 문제 해결

1. 멀티스레드 환경에서의 문제멀티스레드 프로그래밍에서 여러 스레드가 같은 데이터를 공유할 때 중요한 문제는 바로 메모리 가시성 (Memory Visibility 이다.메모리 가시성이란, 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 문제이다.즉 이름 그대도 변경한 값이 보이는가, 보이지 않는가의 문제이다.  volatile, 메모리 가시성 1 volatile 로 변수 상태에 대해 스레드 간 가시성을 확보할 수 있다.volatile 이 붙은 변수는 각 스레드의 로컬 캐시를 사용하지 않고, 항상 메인 메모리에서 값을 읽고 쓰게 만든다. 이를 통해 한 스레드에서 값을 변경하면 다른 스레드에서 즉시 그 변경사항을 볼수 있다.  volatile과 메모리 가시성을 이해하기 위해, 간단한 예제를 ..

JAVA 2024.12.29

익명 클래스

익명 클래스 - 시작익명 클래스(anonymous class)는 지역 클래스의 특별한 종류의 하나이다.익명 클래스는 지역 클래스인데,  클래스의 이름이 없다는 특징이 있다. 앞서 만들었던 지역 클래스 예제 코드인 코드를  ` LocalOuterV2 `  다시 한번 살펴보자. package nested.local;public class LocalOuterV2 { private int outInstanceVar = 3; public void process(int paramVar) { int localVar = 1; class LocalPrinter implements Printer { int value = 0; @Override ..

JAVA 2024.12.24

중첩 클래스, 내부 클래스 2

지역 클래스 - 시작 지역 클래스 (Local class)는 내부 클래스의 특별한 종류의 하나이다. 따라서 내부 클래스의 특징을 그대로 가진다. 예를 들어서 지역 클래스도 내부 클래스이므로 바깥 클래스의 인스턴스 멤버에 접근할 수 있다. 지역 클래스 예class Outer { public void process() { //지역 변수 int localVar = 0; //지역 클래스 class Local {...} Local local = new Local(); } } 지역 클래스의 특징지역 클래스는 지역 변수처럼 코드 블록 안에 클래스를 선언한다.지역 클래스는 지역 변수에 접근할 수 있다.package nested.local;publ..

JAVA 2024.12.24

중첩 클래스, 내부 클래스 1

중첩 클래스, 내부 클래스란? for (...) { //중첩 for문for (...) { } }다음과 같이 for 문 안에 for 문을 중첩하는 것을 중첩 (Nested) for 문이라 한다.  class Outer { ... //중첩 클래스 class Nested { ... } }다음과 같이 클래스 안에 클래스를 중첩해서 정의할 수 있는데, 이것을 중첩 클래스라 한다.중첩 클래스는 클래스를 정의하는 위치에 따라 다음과 같이 분류한다. 중첩 클래스의 분류     중첩 클래스는 총 4가지가 있고, 크게 2가지로 분류할 수 있다.정적 중첩 클래스내부 클래스내부 클래스지역 클래스익명 클래스 중첩 클래스를 정의하는 위치는 변수의 선언 위치와 같다. 변수의 선언 위치정적 변수 (클..

JAVA 2024.12.23

자바 정규식 Reqular Expression

만약 숫자로만 이루어져 있는지, 대문자, 소문자를 포함하고 있는지 검사하고 싶다면 요소 하나하나를 비교하는 방법도 있지만 정규식을 이용하며 간단하게 확인할 수 있다.   정규식 문법 기호 모음 정규식 기본 기호기호설명예제.임의의 문자 1개를 의미 ^시작을 의미한다[] 괄호 안에 있다면 일치하지 않는 부정의 의미로로 쓰인다^a : a로 시작하는 단어[^a] : a가 아닌 철자인 문자 1개$$앞의 문자열로 문자가 끝나는지를 의미한다a$ : a로 끝나는 단어[][] 괄호 안의 문자가 있는지를 확인한다[ab][cd] : a,b중 한 문자와 c,d중 한 문자→ ac ad bc bd [^][] 대괄호 안에 ^ 문자가 있으면, 제외를 뜻함- 대괄호 안에 ^ 가 쓰이면 제외의 뜻- 대괄호 밖에 ^ 가 쓰이면 시작점의 ..

JAVA 2024.12.23

Blocking Non-Blocking, Sync ASync

Blocking Non-Blocking, Sync ASync는 무엇이고 어떤 차이를 가지고 있을까? 동기와 비동기 방식의 차이는 처리결과에 대한 책임을 호출한 스레드가 가지고 있냐(동기) 아니면 호출된 스레드에 넘기냐(비동기)로 표현할 수 있다. 그림을 보면 sync/blocking 은리턴되고 async/blocking은 콜백으로 호출된다. Blocking / Non-blocking블록킹과 넌블럭킹은 순차처리를 보장여부로 구분할 수 있다.블럭킹: 호출된 함수가 작업을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수는 대기하고 있다. (순차처리 보장)논블럭킹: 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 리턴하고, 콜백을 할 때까지 호출한 함수가 다른 일을 수행할 수 있다...

CS 2024.12.13

공통 인터페이스 기능

순수 JPA 기반 리포지토리 만들기 순수한 JPA 기반 레파지토리를 만들기기본 CRUD저장변경 -> 변경감지 사용 삭제 전체 조회단건 조회 카운트 참고 : JPA 에서 수정은 변경감지 기능을 사용하면 된다.트랜잭션 안에서 엔티티를 조회한 다음에 데이터를 변경하면 , 트랜잭션 종료 시점에 변경 감지 기능이 작동해서 변경된 엔티티를 감지하고 update sql 을 실행한다. 순수 JPA 기반 리포지토리 - 회원package study.data_jpa.repository;import jakarta.persistence.EntityManager;import jakarta.persistence.PersistenceContext;import jakarta.persistence.TypedQuery;import org..

JPA 2024.12.07

양방향 연관관계와 연관관계 주인

DB 설계 원칙하나의 컬럼의 하나의 원소만 들어가야 한다. 1: N 관계의 특징N 쪽의 테이블에 FK 가 들어가야 한다. N:M 관계의 특징중간 테이블이 있어야한다.중간 테이블에서 두 테이블의 FK 가 들어가야 한다.N:M 관계에서 중간 테이블을 추가해 1: N 관계로 바꾸어 표현한다. 연관관계의 주인 (Owner)양방향 매핑 규칙객체의 두 관계 중 하나를 연관관계의 주인으로 지정연관관계의 주인만이 외래키를 관리 (등록, 수정)주인이 아닌 쪽은 읽기만 가능 주인은 mappedBy 속성 사용 X주인이 아니면 mappedBy 속성으로 주인 지정외래키가 있는 곳은 Many 인 특징이 있다.즉 다 쪽이 무조건 연관관계의 주인이 된다.import jakarta.persistence.*;import lombo..

JPA 2024.12.05