
Factory Pattern 객체 생성을 처리하는 패턴. 객체를 사용하는 코드와 생성하는 코드를 분리한다. 팩토리 패턴이 필요한 경우 class Client { fun orderPizza(type: String): Pizza? { var pizza: Pizza? = null when (type) { "cheese" -> pizza = CheesePizza() "pepperoni" -> pizza = PepperoniPizza() "clam" -> pizza = ClamPizza() "veggie" -> pizza = VeggiePizza() } pizza?.prepare() pizza?.bake() pizza?.cut() pizza?.box() return pizza } } 구상 클래스를 생성하는 코드가..

Singleton Pattern 클래스 인스턴스를 하나만 만드는 패턴 생성자를 private으로 두고, 하나뿐인 인스턴스의 전역 접근을 제공한다. 인스턴스가 필요할 때 클래스에 요청하고, 요청이 들어오면 하나뿐인 인스턴스를 반환한다. → lazy instantiation 싱글톤 패턴이 필요한 경우 인스턴스가 하나만 존재해야 하는 경우 사용한다. (스레드 풀, 캐시, 로그 등) 이런 경우 인스턴스가 여러개라면, 자원을 불필요하게 사용하거나 결과가 일관되지 않을 수 있다. 전역 변수를 사용해서 인스턴스를 생성하면, 필요하지 않은 경우에도 인스턴스가 생성되어 자원을 잡아먹을 수 있다. 여러 곳에서 같은 데이터를 공유할 수 있다. 구조 구현 방식 1) 기존 싱글톤 패턴 방식 public class Singlet..

Observer Pattern 어떤 객체의 상태가 바뀌면 그 객체를 구독하는 다른 객체(옵저버)에게 알림을 보내는 패턴 Subject Observer에게 데이터가 변경될 때마다 알려주는 역할 새로운 값을 Observer에게 전달한다. 옵저버 패턴의 대상이 되는 데이터를 관리한다. Observer Subject를 구독하고, Subject의 데이터가 바뀌면 그 데이터를 전달받는다. 특징 일대다 의존성 하나의 Subject에 여러 Observer가 연관된다. Observer는 데이터를 가질 필요가 없고, Subject가 알림을 보내길 기다린다. → Subject에 의존 여러 객체가 동일한 데이터를 관리하지 않고, 하나의 객체(Subject)만 가지고 있기 때문에 깔끔한 코드. 느슨한 결합 (Loose Coup..

ICMP(Internet Control Message Protocol) : 인터넷 환경에서 오류에 관한 처리를 지원 ICMP 메시지 - DESTINATION UNREACHABLE: 수신 호스트에 접근이 불가능 - SOURCE QUENCH: 네트워크에 필요한 자원 부족으로 패킷 폐기 - TIME EXCEEDED: 시간 초과로 패킷 폐기 (TTL이 0이 되는 경우) - ECHO REQUEST/ECHO REPLY: ping 프로그램에 사용 - TIMESTAMP REQUEST/TIMESTAMP REPLY: 네트워크 지연을 측정 ICMP 헤더 형식 - 처음 8 바이트는 모든 메시지에 반드시 포함됨 - Type: 메시지를 구분 - Code: 메시지 내용에 대한 자세한 정보 - Checksum: 전체 메시지에 대한 ..

ARP(Address Resolution Protocol) - 수신 호스트의 IP 주소를 통해 수신 호스트의 MAC 주소를 제공 - ARP request라는 특수 패킷을 브로드캐스팅 - IP 주소에 해당하는 호스트만 ARP reply로 MAC 주소를 회신 - 브로드캐스팅 과정에서 수신 호스트가 얻은 송신 호스트의 MAC 주소와 IP 주소 매핑 값은 자동 저장 RARP(Reverse Address Resolution Protocol) - 하드 디스크가 없는 시스템은 송신자 자신의 IP 주소를 알 수 없음 - 송신 호스트의 MAC 주소를 통해 송신 호스트의 IP 주소를 제공 - RARP 를 전담하는 서버가 있어야 함 - RARP를 통해 자신의 IP 주소를 얻은 후 미리 정해진 호스트로부터 자신의 부트이미지를..

IPv6 (IPv4와 비교) 1) 주소 공간 확장 - IPv4의 32 비트에서 128 비트로 확장 - 최대 2128개의 호스트를 지원 2) 헤더 구조 단순화 - 오류 제어 등의 오버헤드를 줄여 프로토콜의 전송 효율 향상 3) 흐름 제어 기능 지원 - 흐름 제어 기능을 지원하는 필드(Flow Label)를 추가하여 일정 범위 내에서 예측 가능한 데이터 흐름을 지원 - 실시간 멀티미디어 응용 환경을 수용 IPv6 헤더 형식 - 헤더 40바이트 중 32바이트를 주소 공간으로 사용 - 필요 시 기본 헤더 뒤에 여러 개의 확장 헤더를 지원 - DS/ECN: 차등 서비스 및 혼잡제어 - Flow Label: 음성, 영상 등 실시간 서비스가 필요한 응용 환경에서 사용 현재 필드를 지원하지 않는 호스트 혹은 라우터 패..
대표적인 IPC 및 동기화 기법 1) 파이프(pipe) --- 운영체제 영역 이용 2) 메시지 큐(message queue) --- 운영체제 영역 이용 3) 공유 메모리(shared memory) --- 사용자 영역 이용 4) 세마포어(semaphore) --- 동기화 기법 기본적인 IPC 과정 ① 공유 메모리 확보 ② 공유 메모리 접근 ③ 공유 메모리 반납 1-1) 이름 없는 파이프 (unnamed pipe) ① 공유 메모리 확보 - 파일 디스크립터 번호를 저장하기 위한 정수형 배열 변수 선언한다. (int pipefd[2];) - pipe() 함수를 사용하여 커널 영역에 파이프 채널을 생성한다. (pipe(pipefd);) - fork() 함수를 사용하여 자식 프로세스를 생성한다. ② 공유 메모리 사..

프로세스 간 통신(IPC: Inter-process Communication) 1) 프로세스 간에 데이터를 주고 받는다 (write/read) 2) 프로세스는 독립적이다 (-> 다른 프로세스 영역을 접근(access)할 수 없다) 3) 공유 메모리가 필요하다 공유 메모리가 커널 영역에 존재 -> 동기화가 필요하지 않음 공유 메모리가 사용자 영역에 존재 -> 동기화가 필요함 4) 임계영역(critical section)이 존재함. 메시지 전송(message passing) 방식 - 커널(운영체제) 영역의 일부분을 공유 메모리로 이용한다. - 운영체제에서 임계 영역에 대한 동기화를 해결해 준다. - 메시지가 세 곳에 존재한다. ① 송신 프로세스는 자신의 데이터 영역에 메시지를 작성한 후, send() 함수를..