
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..
MySQL에서는 월요일부터 일요일까지 0~7로 나타내므로 case문을 사용해서 한글로 출력하면 된다 SELECT CASE a.a WHEN '0' THEN '월' WHEN '1' THEN '화' WHEN '2' THEN '수' WHEN '3' THEN '목' WHEN '4' THEN '금' WHEN '5' THEN '토' WHEN '6' THEN '일' END AS week, IFNULL( b.cnt, 0 ) AS cnt FROM ( SELECT a.a FROM ( SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 ) AS a )..
프로젝트를 진행하다보니 여러 형식으로 날짜를 출력해야 할 때가 많았다. 그럴 때마다 DATE_FORMAT에서 사용하는 알파벳들이 헷갈려서 검색하곤 했었는데, 자주 사용할만한 것들을 따로 정리하면 유용하게 쓰일 것 같아서 적어본다! DATE_FORMAT(날짜형식컬럼, 형식지정) 컬럼 대신 now()를 쓰면 현재의 날짜도 얻을 수 있다. ex) DATE_FORMAT(now(), '%Y-%m-%d') 구분 문자 설명 연 %Y 4자리 연도 연 %y 2자리 연도 월 %m 2자리 월(01-12) 월 %c 1자리 월(1-12) 월 %M 영어 월(January, February 등) 월 %b 영어 약자 월(Jan, Feb 등) 일 %d 2자리 일(01-31) 일 %e 1자리 일(1-31) 시 %H 2자리 24시간(00..

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: 음성, 영상 등 실시간 서비스가 필요한 응용 환경에서 사용 현재 필드를 지원하지 않는 호스트 혹은 라우터 패..