템플릿 메서드 패턴이란? 템플릿 메서드 패턴은 소프트웨어 공학에서 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. -위키백과- 템플릿 메서드 패턴은 알고리즘의 골격을 부모 클래스에서 정의하되, 자식 클래스들이 해당 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 오버라이드(재정의) 할 수 있도록 하는 행동 디자인 패턴이다. 템플릿 메서드 패턴은 부모 클래스에서 알고리즘을 일련의 단계들(메서드)로 나누고 단일 템플릿 메서드 내부에서 이러한 메서드들을 호출한다. 자식 클래스는 단일 템플릿 메서드 내부에서 호출되는 메서드들 중에서 필요한 경우 선택적으로 오버라이드 하여 사용할 수 있다. 이렇게 하면 중복을 제거하고 다형성을 확보할 수 있다. 템플릿 메서드 예시 예를 들어 쉽게 이해..
GoF와 이펙티브 자바의 빌더 패턴 빌더 패턴은 "Design Patterns"의 공동 저자 4명을 부르는 GoF(Gang of Four)에서 소개하는 버전과 이펙티브 자바(Effective Java)에서 소개하는 버전이 존재한다. 이 글에서는 요새 자주 쓰이고 Lombok에서도 지원하는 간단한 빌더 패턴에 대해 알아보겠다. 참고) GoF 빌더 패턴 빌더 패턴 / 디자인 패턴들 / 생성 패턴 빌더 패턴 다음 이름으로도 불립니다: Builder 의도 빌더는 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. 이 패턴을 사용하면 같은 제작 refactoring.guru 빌더 패턴이란? 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과..
싱글톤 패턴(Singleton Pattern)이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러 개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. - 위키백과 - 싱글톤 패턴은 쉽게 말해 생성 할 수 있는 객체의 인스턴스를 하나로 제한하는 패턴이다. 싱글톤 패턴을 따르는 클래스는 아무리 생성자를 여러 번 호출하더라도 최초의 생성으로 생겨난 인스턴스가 반환된다. 예시를 통해 이해해 보자. ..
참조의 지역성(Locality of Reference)주기억장치와 메모리는 속도 차이가 크다. 이러한 속도의 차이를 극복할 수 있는 게 캐시 메모리이다. 이 캐시 메모리는 주기억장치와 메모리 사이에 위치하며 속도 차이에 따른 병목현상을 줄여준다. 그런데 이 캐시 메모리의 효율을 높이려면 캐시 메모리에 어떤 정보가 들어있냐가 중요하다. 어떤 프로그램을 실행할 때 필요한 정보를 캐시 메모리에서 찾는 캐시 적중율(hit-rate)을 높일 수 있기 때문이다. 그런데 이러한 캐시 적중율을 높일 수 있는 원리가 있는데, 그것이 바로 참조의 지역성이다. 참조의 지역성은 캐시의 지역성이라고도 불리는데, 정확히는 참조의 지역성이 맞다. 참조의 지역성이란 컴퓨터 프로그램이 일정 기간 동안 특정한 메모리 위치 집합에 접근..
스위치(Switch)란?네트워크에서 스위치(Switch)는 컴퓨터 네트워크에서 데이터를 전송하고 연결하는 장비를 뜻한다. 스위치는 OSI 모델의 2계층인 데이터 링크 계층에서 동작하며, 주로 이더넷(Ethernet) 네트워크에서 사용된다. 스위치는 여러 개의 네트워크 장치(컴퓨터, 서버, 프린터 등)를 연결하고 이들 간에 데이터 패킷을 전송하며 데이터의 흐름을 제어한다. 스위치는 주로 MAC 주소를 사용해 연결된 장치들을 식별하고 데이터를 전달한다. 참고) [네트워크] 스위치와 라우터의 차이스위치란? 네트워크에서 스위치란 소규모 비즈니스 네트워크 안에서 컴퓨터, 프린터 등 모든 디바이스를 서로 연결해주어 자원을 쉽게 공유할 수 있도록 하는 장치이다. 스위치는 L2(데이터 링code-lab1.tistor..
NAT(Network Address Translation)란?NAT는 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술을 말한다. -위키백과- NAT는 Network Address Translation의 줄임말로, 직역하자면 네트워크 주소 변환이다. 이러한 NAT는 IPv4의 주소 부족으로 인해 도입되었다. IPv4는 XXX.XXX.XXX.XXX 형태로 2^32개(약 43억 개)의 주소만을 할당할 수 있다. 언뜻 많아 보이지만 전 세계에 존재하는 수많은 호스트들을 모두 감당하기에는 역부족이다. 이때 NAT를 사용하면 IP 주소의 부족을 해결할 수 있다. NAT는 하나의 공인 IP를 여러 개의 사설 IP로 변환한다. 이러..
사용자 모드(User Mode)와 커널 모드(Kernel Mode) CPU는 사용자 모드와 커널 모드를 번갈아가면서 동작한다. 사용자 모드일때는 User Process를 실행시킨다. 이때는 하드디스크나 메모리, I/O 디바이스 등의 I/O 장치에 직접 접근할 수 없다. 또한 유저 모드 특권 레벨(privilege level)을 가지고 코드를 실행한다. I/O 명령을 실행하기 위해서는 System Call을 호출해 커널모드로 전환해야 한다. System Call이 호출되면 Mode bit를 1에서 0으로 전환하고 커널모드로 진입한다. 커널 모드에서는 I/O 장치에 접근하는 등 다양한 System Call을 실행할 수 있다. 즉, 커널 모드 특권 레벨(privilege level)을 가지고 코드를 실행할..
동기와 비동기, 블로킹과 논-블로킹 너무 헷갈려운영체제를 공부하다 보면 동기(Syncronous)와 비동기(Asynchronous), 블로킹(Blocking), 논-블로킹(Non-blocking)에 대해 들어볼 수 있다. 이 개념들은 언뜻 보면 매우 헷갈리기 때문에 한 번 정리가 필요하다고 생각했다. 검색해 보니 좋은 글들이 많아 이해가 쉬웠다. 이를 종합해서 설명해 보겠다. [그림 1]은 IBM DeveloperWorks Library에 게재된 Boost application performance using asynchronous I/O라는 글에서 사용된 도표이다. 해당 게시글은 2006년에 Linux의 Asynchronous I/O(AIO)에 대해 설명하는 글이다. AIO는 쉽게 말해 프로세스가 ..
KMP 알고리즘이란? KMP 알고리즘은 Knuth, Morris, Pratt 세 사람이 만든 알고리즘으로, 문자열 중에 특정 패턴을 찾아내는 문자열 검색 알고리즘 중 하나이다. 그렇다면 문자열 검색 알고리즘이란 뭘까? 위 사진은 웹 사이트에서 Ctrl+F 를 눌러 특정 문자열을 검색한 결과이다. 문자열 검색 알고리즘이란 말 그대로 문자열에서 특정 패턴을 찾아내는 알고리즘이다. KMP 알고리즘은 문자열에서 특정 패턴을 효율적으로 찾을 수 있다. 살펴볼 문자열의 길이가 N, 찾고 싶은 패턴의 길이가 M이라면 O(N+M)의 시간 복잡도를 가지는 매우 효율적인 알고리즘이다. KMP 알고리즘이 얼마나 효율적인지 알기 전에, 모든 문자열을 일일이 비교하는 경우를 살펴보자. 모든 문자열을 일일이 비교하는 경우(브루트..
스위치란? 네트워크에서 스위치란 소규모 비즈니스 네트워크 안에서 컴퓨터, 프린터 등 모든 디바이스를 서로 연결해주어 자원을 쉽게 공유할 수 있도록 하는 장치이다. 스위치는 L2(데이터 링크 계층)에 속하는 장치이다. 즉, MAC 주소를 기반으로 디바이스 위치를 파악하고 통신한다. 스위치는 브로드캐스트 도메인을 구분할 수 없다. 스위치는 ARP 등을 통해 불명확한 목적지를 가진 데이터를 처리할 때 모든 포트로 데이터를 퍼뜨리는 브로드캐스트를 한다. 참고) [네트워크] MAC주소와 ARP(Address Resolution Protocol)란? | MAC 주소의 필요성 MAC 주소란? IP 주소는 네트워크 계층(Network Layer)에서 사용되는 주소다. 반면 MAC 주소는 데이터 링크 계층(Data Li..
Index란?Index는 테이블에서 데이터의 위치를 가리키는 자료구조이다. Index가 없다면 원하는 데이터를 찾기 위해서 테이블 전체를 뒤져야 할 것이다. 이러한 Index는 크게 Clustered Index와 Non-Clustered Index 두 가지로 나눌 수 있다. 참고) [DB] 인덱스(index)란? 인덱스 자료구조인덱스(index)란? 인덱스란 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조라고 할 수 있다. 책의 색인(index)을 보면 해당 내용이 어디에 있는지 알 수 있듯이 데이터의 인덱스를 참조code-lab1.tistory.com Clustered Index란?clustered Index는 row의 물리적 정렬 순서를 설정하는 index 유형이다. clustered In..
오버로딩(Overloading)이란?오버로딩은 같은 클래스 내에 여러 개의 같은 이름의 메서드를 정의하는 것이다. 이때 메서드의 이름은 같지만 매개변수(parameter)의 개수나 타입이 달라야 한다. return 값만 다른 것은 오버로딩이라고 볼 수 없다. 예를 들어 아래와 같이 Food 클래스 내에 여러 가지의 eat 메서드를 정의할 수 있다.public class Food{ void eat(Noodle noodle){ System.out.println("후루룩"); } void eat(Pizza pizza){ System.out.prinln("냠냠"); } void eat(Noodle noodle, Ramen ramen){ System..