Java 문자열 인코딩
강의 : 김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션 1.문자 인코딩 1-1. 컴퓨터와 데이터 개발자가 개발하며 다루는 데이터는 주로 “ABC”와 같은 문자 이지만, 컴퓨터는 데이터를 “010101”로 되어 있는 바이너리로 저장한다. 바이너리 데이터로 문자를 표현하기 위해 “A:65, B:66, a:97…” 같은 문자 집합을 ...
강의 : 김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션 1.문자 인코딩 1-1. 컴퓨터와 데이터 개발자가 개발하며 다루는 데이터는 주로 “ABC”와 같은 문자 이지만, 컴퓨터는 데이터를 “010101”로 되어 있는 바이너리로 저장한다. 바이너리 데이터로 문자를 표현하기 위해 “A:65, B:66, a:97…” 같은 문자 집합을 ...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 14. 스레드 풀과 Executor 프레임워크3 14-1. Executor 전략 - 고정 풀 전략 Executor 스레드 풀 관리 - 다양한 전략 ThreadPoolExecutor를 사용하면 스레드 풀에 사용되는 숫자와 블로킹 큐 등 다양한 속성을 조절할 수 있다. coreP...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 13. 스레드 풀과 Executor 프레임워크2 13-1. ExecutorService 우아한 종료 - 소개 고객의 주문을 처리하는 서버를 운영 중이라고 가정한다. 만약 서버 기능을 업데이트하기 위해 서버를 재시작해야 한다면, 서버가 고객의 주문을 처리하고 있는 도중에 갑자기 ...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 12. 스레드 풀과 Executor 프레임워크1 12-1. 스레드를 직접 사용할 때의 문제점 스레드를 직접 생성해서 사용하면 다음과 같은 3가지 문제가 있다. 스레드 생성 시간으로 인한 성능 문제 스레드 관리 문제 Runnable 인터페이스의 불편함 12-1-1. 스...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 11. 동시성 컬렉션 우리가 일반적으로 자주 사용하는 ArrayList, LinkedList, HashSet, HashMap 등 많은 자료 구조 대부분은 스레드 세이프 하지 않다. 그리고 자료 구조들이 제공하는 add() 와 같은 연산은 원자적으로 보이지만 그렇지 않다. 연산 ...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 10. CAS - 동기화와 원자적 연산 원자적 연산은 연산이 CPU에서 더 이상 나눌 수 없는 단위로 수행되는 것을 의미한다. 따라서 멀티스레드 상황에서 다른 스레드의 간섭 없이 안전하게 처리될 수 있다. 1씩 값을 증가하는 연산을 멀티스레드 환경에서 실행하면 여러 스레드가 동시...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 9. 생산자 소비자 문제 생산자가 생산자를 깨우고, 소비자가 소비자를 꺠우는 비효율 문제를 어떻게 해결할 수 있을까? 생산자 스레드는 데이터를 생성하고 스레드 대기 집합에서 대기 중인 소비자 스레드를 깨워야 한다. 반대로 소비자 스레드는 데이터를 소비하고 스레드 대기 집합에서 대...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 8. 생산자 소비자 문제 멀티스레드 프로그래밍에서 자주 등장하는 동시성 문제 중 하나로, 여러 스레드가 동시에 데이터를 생산하고 소비하는 상황을 다룬다. 생산자(Producer): 데이터를 생성하는 역할을 한다. 소비자(Consumer): 데이터를 사용하는 역할을 한다...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 6. 동기화 출금 예제 - 동시성 문제 public interface BankAccount { boolean withdraw(int amount); int getBalance(); } public class MyBankAccount implements BankAc...
강의 : 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 1. 스레드 생성 스레드는 Thread 클래스를 상속 받거나 Runnable 인터페이스를 구현해 만들 수 있다. 다른 클래스나 인터페이스를 상속 받을 수 있고 스레드와 실행할 작업을 분리하고 여러 스레드에서 Runnable 을 재사용하기 위해 보통 Runnable 인터페이스를 구현해...