본문 바로가기

분류 전체보기

(46)
자바 캐시 알고리즘 1. 캐시 알고리즘이란? - 메모리의 캐시를 효율적으로 활용하여 데이터 접근 속도를 향상시킨다. - 캐시는 데이터를 임시로 저장하여 빠르게 읽기/쓰기가 가능하다. 2. 캐시 알고리즘 종류 1) LRU (Least Recently Used): 가장 오래 전에 사용되지 않은 데이터를 캐시에서 제거하는 알고리즘이다. 최근에 사용된 데이터가 캐시에 오래 남아 있고, 오랫동안 사용되지 않은 데이터는 빠르게 제거된다. 자바의 LinkedHashMap 클래스에서 LRU 알고리즘을 구현하여 사용할 수 있다. 메모리에 남아 있는 캐시 중 가장 오랫동안 사용되지 않은 캐시를 새로운 캐시로 교체한다. 2) LFU (Least Frequently Used): 사용 빈도가 가장 낮은 데이터를 캐시에서 제거하는 알고리즘이다. 자..
자바 concurrent 패키지 1. java.util.concurrent 패키지란? - 동기화가 필요한 상황에서 사용할 수 있는 다양한 유틸리티 클래스를 제공한다. 1) Locks : 상호 배제를 사용할 수 있는 클래스 2) Atomic : 동기화가 되어있는 변수를 제공 3) Executors : 스레드 풀 생성, 스레드 생명주기 관리, Task 등록과 실행 등을 간편하게 처리 4) Queue : thread-safe한 FIFO 큐 제공 5) Synchronizers : 특수한 목적의 동기화를 처리하는 5개의 클래스 제공 (Semaphroe, CountDownLatch, CyclicBarrier, Phaser, Exchanger) 2. java.util.concurrent.locks - synchronized 블록을 사용했을 때와 동..
자바 UDP통신 1. UDP통신이란? - TCP (연결지향 프로토콜)와 다르게 연결 없이 동작하는 비연결성 프로토콜이다. - 또한 서버와 클라이언트 연결 및 해제 설정이 필요없다. - 하지만 데이터가 잘 전송되었다는 보장을 하지 않고 데이터 유실이 생길 수 있다. - 따라서 데이터를 보내고 받는 즉시 처리되어 TCP보다 빠른 전송 속도를 가지고 있다. 2. UDP 예시 코드 서버 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPServer { public static void main(String[] args) { try (DatagramSocket serverSocket = ..
자바 Socket 1. Socket 이란? - 네트워크 통신을 위한 인터페이스를 제공하는 클래스이다. - 클라이언트와 서버 간의 통신을 가능하게 해준다. - TCP/IP 프로토콜 기반이다. 2. Socket의 특징 Socekt은 Socket과 ServerSocket으로 나뉜다. - Socket : 클라이언트가 서버로 연결하고 데이터를 송수신한다. 클라이언트에서 서버로 연결할 때 사용 - ServerSocket : 서버에서 클라이언트의 연결 요청을 수락하고, 클라이언트와 통신을 위한 소켓을 생성한다. - 소켓간 통신을 위해 IP주소와 포트 번호를 사용해 연결 요청한다. * 자바 소켓을 사용하여 클라이언트와 서버 간의 통신을 구현 단계 1) 서버는 ServerSocket을 생성하고, 클라이언트의 연결 요청을 대기한다. 2) ..
자바 Serializeble 1.Serializeble 이란? - 인터페이스로서, 객체를 직렬화 할 수 있도록 지원하는 기능이다. 2. 직렬화란 ? - 객체를 바이트 형태로 변환하여 파일 저장이나 네트워크 전송을 할 때 사용한다. - jvm의 메모리에 있는 객체 데이터를 바이트 형태로 변환하는 기술을 의미한다. - 클래스가 파일을 읽거나 쓸 수 있도록 하거나, 다른 서버로 보내거나 받을 때 반드시 사용해야한다. 3. 역직렬화란 ? - 반대로 직렬화된 바이트 데이터를 다시 원래의 객체로 변환하는 과정이다. 4. 직렬화 / 역직렬화 예시 코드 import java.io.*; // 직렬화를 위해 Serializable 인터페이스를 구현 class Person implements Serializable { private static fin..
자바 NIO ( Non-blocking I/O ) 1. NIO란? - 느린속도의 기존 I/O를 개선하여 추가되었다. 2. IO vs NIO 1) 입출력 방식 - IO는 Stream 기반이다. 입력 스트림과 출력 스트림으로 구분되어 있다. - NIO는 Channel 기반이다. 스트림과 달리 양방향으로 입력과 출력이 가능하다. 2) 버퍼 방식 - IO는 출력 스트림이 1바이트를 쓰면 입력 스트림이 1바이트를 읽어서 속도가 느리다. - NIO는 버퍼를 이용하여 입출력 처리를 하여 속도가 빠르다. 3) 블로킹/논블로킹 방식 IO - IO는 블로킹 방식이다. 입력 스트림의 read()를 호출하면 데이터가 입력되기 전까지 스레드는 블로킹 상태가 된다. - 블로킹 상태는 - 출력 스트림의 write()를 호출하면 데이터 출력 전까지 스레드는 블로킹 상태가 된다. N..
자바 I/O 1. I/O란? - Input / Outpu의 약자로 입력과 출력을 의미 - 내부 / 외부 장치 혹은 프로그램 간의 데이터 전송 - 파일에 읽거나 저장할 일이 있을 때 사용 - 다른 서버나 디바이스로 보냉 일이 있을 때 사용 2. I/O Stream 이란? - 데이터를 외부에서 읽고 다시 외부로 출력하는 작업 - 단방향 통신을 지원하는 기능 - Input Stream과 OutputStream으로 구분 - 큐(Queue) 와 같이 선입선출 (FIFO) 형태로 데이터가 전송 됨 - I/O Stream은 바이트 스트림과 문자 스트림으로 나뉨 3. I/O 바이트 스트림 - 바이트 스트림은 데이터를 바이트 단위로 읽고 쓰는 데 사용한다. - InputStream과 OutputStream 클래스 사용함. - 이미지..
자바 Quick Sort 1. Quick Sort란? - 퀵소트(Quick Sort)는 배열을 정렬하는데 사용되는 분할 정복 알고리즘 중 하나이다 - 분할 정복 방법을 통해 주어진 배열이다. * 분할 정복 : 문제를 작은 2개의 문제로 분리하고 각각을 해결한 후, 결과를 모아 원래의 문제를 해결하는 방법 2. 배열 정렬 1. 피벗을 하나 선택한다. 2. 피벗을 기준으로 양쪽에서 피벗보다 큰 값, 혹은 작은 값을 찾는다. 왼쪽에서부터는 피벗보다 큰 값을 찾고, 오른쪽에서부터는 피벗보다 작은 값을 찾는다. 3. 양 방향에서 찾은 두 원소를 교환한다. 4. 왼쪽에서 탐색하는 위치와 오른쪽에서 탐색하는 위치가 엇갈리지 않을 때 까지 2번으로 돌아가 위 과정을 반복한다. 5. 엇갈린 기점을 기준으로 두 개의 부분리스트로 나누어 1번으로 ..