Java & Kotlin33 자바에서 동시성 문제를 해결하기 위한 방법 목차개요synchronized2-1. synchronized 블럭2-2. synchronized 함수volatileatomic4-1. CAS(Compare and Swap) 알고리즘결론1. 개요자바에서 동시성 문제를 해결하기 위한 키워드로 synchronized, volatile, atomic에 대해 정리해보려고 한다.멀티쓰레드 환경에서 중요하게 다루어야 할 가시성과 원자성을 위 키워드는 어떻게 확보하였는지도 살펴보자.2. synchronized한 스레드가 객체의 synchronized 메서드 또는 synchronized 블럭을 실행하는 경우, 다른 스레드는 해당 객체의 다른 synchronized 메서드나 블럭을 실행할 수 없음을 보장해준다.synchronized의 경우 블럭에 진입하기 전에 CPU 캐.. 2023. 4. 12. ParallelStream은 항상 Stream보다 성능이 좋을까? 목차개요자바의 Stream2-1. Sequential Streams2-2. Parallel Streams2-3. ForkJoinFrameWork2-3-1. Splitting Source2-3-2. Common Thread Pool2-3-3. Custom Thread Pool성능에 미치는 영향3-1. 오버헤드3-2. 분할 비용3-3. 병합 비용ParallelStream은 언제 사용하는게 좋을까?결론1. 개요결론부터 말하면, 항상 성능이 좋다고 판단해서는 안된다.단순히 보면 작업을 나누어서 실행하면 항상 더 빠르다고 생각할 수 있지만 이는 병렬로 처리하기 때문에 CPU도 많이 사용하고 몇개의 쓰레드로 처리 할지가 보장되지 않는다.parellelStream 동작 방식과 사용시 고려할 사항에 대해 글을 써보려 .. 2023. 4. 11. 자바8에 추가된 Stream에 대해 알아보자 목차개요Stream 소개2-1. 특징2-2. 중개 연산2-3. 종료 연산2-4. parallelStream결론1. 개요Java8 부터 나온 기능 중 많은 사람들에게 관심을 가졌던 기능 중 하나이다.자바에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용한다. 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성해야 한다. 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가능하다.즉, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근해야만 했다. 이러한 문제점을 극복하기 위해서 스트림 API를 도입하였다.스트림 API는 데이터를 추상화해서 다루므로 다양한 방식.. 2023. 4. 10. __try-with-resources로 쉽게 자원해제하기__ 목차개요try-catch-finallytry-with-resource란?try-with-resources를 사용해야 하는 이유결론1. 개요자바7 이전에는 다 사용하고 난 자원(resource)를 반납하기 위해 try-catch-finally구문을 사용했다.클라이언트가 자원 반납을 놓치는 경우 예측할 수 없는 성능 문제가 발생되기도 한다.자원을 쉽게 회수할 수 있는 방법으로 try-with-resource가 자바7 부터 등장했다.2. try-catch-finally란?public static void main(String[] args) { FileWriter f = null; try { f = new FileWriter("data.txt"); f.write("Hello"); } catch (IOExcept.. 2023. 4. 9. 자바의 IO와 (New)NIO란? 목차NIO(New Input/Output)IO와 NIO의 차이점2-1. 입출력 방식2-2. 버퍼 방식2-3. 동기 / 비동기 방식2-4. 블로킹 / 넌블로킹 방식결론1. NIO(New Input/Output)기존 java.io API와 다른 새로운 입출력 API를 말한다.NIO는 JDK 1.4부터 제공 → 자바 7부터 네트워크 지원 강화된 NIO2 API 추가2. IO와 NIO의 차이점1. 입출력 방식IO는 스트림(Stream) 방식입력스트림과 출력스트림이 구분되어 있고 별도로 생성하며 데이터가 단방향으로 전송된다.NIO는 채널(Channel) 방식하나의 채널로 데이터를 읽고 쓰기가 가능한 양방향이다.2. 버퍼 방식IO는 넌버퍼(non-buffer)1바이트씩 읽고 출력하기때문에 느리다버퍼를 사용하지 않고.. 2023. 4. 9. 자바에서 transient 는 어떤 키워드 인가? 목차직렬화와 역질력화transient란?transient는 어떻게 직렬화 대상에서 제외시켰을까?결론1. 직렬화와 역직렬화직렬화(Serialization)JVM 메모리에 있는 객체를 바이트 스트림으로 변환하는 작업역직렬화 (Deserialization)직렬화한 바이트 스트림을 다시 자바객체로 변환하는 것2. transient란?객체를 저장하거나, 다른 JVM으로 보낼 때, transient라는 예약어를 사용하여 선언한 변수는 Serializable의 대상에서 제외된다.즉, 해당 객체는 저장 대상에서 제외되어 버린다.아래와 같은 코드를 예로 들어보자.직렬화 코드private void saveObject() { Person person = new Person("jammini", 20, "password"); .. 2023. 4. 3. 이전 1 2 3 4 5 6 다음