분류 전체보기 611

[Java의 정석] 13-4. 스레드: 동기화

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 9. 동기화한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게 막는 것입니다.멀티스레드의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하므로 서로의 작업에 영향을 주게 됩니다.한 스레드가 특정 작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것이 필요합니다. 임계영역공유데이터를 사용하는 코드 영역입니다. Lock단 하나의 스레드만 공유데이터를 사용하도록 하는 매커니즘입니다.해당 공유데이터를 사용하는 스레드는 락을 획득합니다.임계영역의 모든 코드를 수행하고 나서 락을 반납하며, 다른 스레드가 반납된 락을 획득하여 임계영역에 접근할 수 있습니다. synchronizedsynchronized 키워드를 붙여 임계영역..

Java 2023.11.30

[Java의 정석] 15-6. 입출력: Serialization

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 7. Serialization객체를 데이터 스트림으로 만드는 것을 뜻합니다.객체를 파일로 저장하거나 네트워크를 통해 서로 주고받을 때 필요합니다. 객체직렬화에서의 객체는 "클래스에 정의된 인스턴스 변수의 집합"을 의미합니다.클래스 변수나 클래스 메서드가 포함되지 않습니다.역직렬화 시에 클래스 관련 정보는 불필요합니다.내용물인 변수 값만 가지고 있으면 인스턴스를 메모리에 올릴수 있습니다. ObjectInputStream & ObjectOutputStream객체를 다루는 보조 스트림 입니다.인스턴스 변수의 직렬화에 사용됩니다.직렬화 시 참조 타입의 객체 변수도 모두 포함됩니다.FileOutputStream fos = new FileOutputStr..

Java 2023.11.29

[Java의 정석] 15-5. 입출력: File

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 6. File파일 또는 디렉토리를 추상적으로 표현하는 클래스파일 또는 디렉토리를 다루는데 사용됩니다. 제어// 파일이름 (경로 포함)File f = new File("c:\\jdk1.8\\work\\ch15\\FileEx1.java"); // 디렉토리 경로, 파일이름 (경로 제외)File f = new File("c:\\jdk1.8\\work\\ch15", "FileEx1.java"); f.getName(); // 파일이름 (경로 제외)f.getPath(); // 경로f.getAbsolutePath(); // 절대경로f.getCanonialPath(); // 정규경로f.getParent(); // 디렉토리 경로File.pathSeparator; ..

Java 2023.11.29

[Java의 정석] 15-4. 입출력: 표준 입출력

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 5. 표준 입출력콘솔을 통한 데이터 입력과 출력을 의미합니다.자바에서는 표준 입출력을 위한 3가지 입출력 스트림을 제공합니다.자바 애플리케이션의 실행과 동시에 자동적으로 생성됩니다. System.in콘솔로부터 데이터를 입력받는데 사용하는 입력 스트림입니다.InputStream System.out콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.PrintStream System.err콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다.에러 로그 출력 전용으로 사용됩니다.PrintStream

Java 2023.11.29

[Java의 정석] 15-3. 입출력: 보조 스트림

"Java의 정석" 책을 정리한 포스팅 입니다. 4. 보조 스트림// 기반스트림 생성FileInputStream fis = new FileInputStream("text.txt"); // 보조스트림 생성BufferedInputStream bis = new BufferedInputStream(fis); // 보조스트림을 이용해서 데이터를 읽기bis.read();스트림의 기능 보완스트림을 먼저 생성한 다음, 이를 이용해서 보조 스트림을 생성합니다.기능 향상새로운 기능 추가 실제 데이터 통신 X데이터를 입출력할 수 있는 기능은 없습니다. 바이트 기반FilterInputStream & FilterOutputStream모든 바이트 기반 보조스트림의 부모 클래스 입니다. (데코레이터 패턴) BufferedInput..

Java 2023.11.29

[Java의 정석] 15-2. 입출력: 문자 기반 스트림

남궁성님의 "Java의 정석" 책을 정리한 포스팅 입니다. 3. 문자 기반 스트림문자를 처리하는 데 바이트 기반 스트림으로는 어려움이 있습니다.한 문자를 의미하는 char 형의 크기가 2byte 입니다.바이트 기반 스트림의 단위는 1byte 입니다.이 점을 보완하기 위해 문자 기반의 스트림이 제공됩니다. encoding읽기: utf-8로 인코딩하여 읽기쓰기: utf-8로 인코딩하여 작성 Reader문자 기반의 InputStream 입니다. read()스트림 소스에서 문자를 읽습니다.byte 배열대신 char 배열을 사용합니다. Writerwrite()문자를 스트림 소스에 씁니다.

Java 2023.11.29

[Java의 정석] 15-1. 입출력: 바이트 기반 스트림

"Java의 정석" 책을 정리한 포스팅 입니다. 1. 자바에서의 입출력입출력컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말합니다. 스트림자바에서 입출력을 수행할 때, 두 대상을 연결하고 데이터를 전송할 수 있는 객체를 말합니다.데이터를 운반하는데 사용되는 연결통로 역할을 합니다. only 단방향 통신입력과 출력을 동시에 처리할 수 없습니다.각각 입력스트림과 출력스트림이 필요합니다. FIFO 구조먼저 보낸 데이터를 먼저 받습니다. 2. 바이트기반 스트림바이트 단위출력의 단위가 모두 1 byte 입니다. 구현체ByteArray: 메모리File: 파일Piped: 프로세스Audio: 오디오 장치 InputStreamread()데이터를 읽어옵니다. 구현체ByteArrayInputStrea..

Java 2023.11.29

[자바 ORM 표준 JPA 프로그래밍] 4. 엔티티 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 엔티티 매핑어노테이션설명주요 속성 및 주의사항@Entity테이블과 매핑할 엔티티 지정- 기본 생성자 필수- final class, inner class 불가- enum, interface 불가@Table엔티티와 매핑할 테이블 지정 (생략 시 클래스명)-- name: 테이블명-- schema, catalog: 스키마/카탈로그-- uniqueConstraints: 유니크 제약조건@IdPK 매핑- 필수 지정- 단독으로 사용할 경우 사용자가 직접 할당해야 함- @GeneratedValuePK 자동 할당- 대리키 사용 (DB 벤더에 위임)GenerationType-- AUTO: 현재 DB에 적합한 키 생성 전략을 자동으로 선택-..

[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 영속성 컨텍스트엔티티 객체의 영속화 작업을 관리하는 작업 영역1차 캐시, 해당 엔티티 관련 내부 쿼리 저장소 역할역할설명엔티티 상태 관리엔티티를 데이터베이스와 동기화함 (EntityManager에 의해 관리됨)트랜잭션 범위영속성 컨텍스트는 트랜잭션 단위로 엔티티를 관리- 트랜잭션이 시작되면 활성화되고, 종료 시 커밋 또는 롤백됨캐시 기능이미 로드된 엔티티는 다시 데이터베이스 조회 없이 재사용됨. 동작동작설명자동 플러시트랜잭션 커밋 전에 영속성 컨텍스트에서 변경된 데이터를 자동으로 데이터베이스에 반영.수동 플러시영속성 컨텍스트의 변경 사항을 강제로 데이터베이스에 반영. (entityManager.flush()) 예제) 자..

[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 컴포넌트컴포넌트역할특징주의사항 및 사용 방식EntityManagerFactory- Connection Pool 생성 및 관리- EntityManager 인스턴스 생성- 생성 비용 높음 (Singleton으로 관리)- 앱 실행 시 한 번만 생성- 전역으로 공유EntityManager- DB 통신- 쿼리 실행 (JPQL 사용)- 커넥션 획득 (DataSource 사용)- 스레드 안전하지 않음- 요청마다 생성 또는 주입- 스레드 간 공유 금지EntityTransaction- 트랜잭션 처리 담당- EntityManager를 통해 획득- 트랜잭션 범위 안에서만 DB 작업 가능- begin() → 작업 → commit() or r..