전체 글
-
Heap Sort(힙 정렬)Algorithm & Data Structure/Sort 2024. 4. 17. 23:25
힙정렬에 대해서 힙 정렬은 완전 이진 트리인 힙을 이용한 선택 정렬의 일종입니다. 배열 요소들을 힙 구조로 재배열한 다음, 가장 큰 요소(또는 가장 작은 요소)를 배열의 끝부분으로 이동시키는 과정을 반복하여 전체 배열을 정렬합니다. 현업에서는 어디에서 쓰일 수 있나? 힙 정렬은 데이터 스트림의 지속적인 입력과 동시에 최대값 또는 최소값을 빠르게 액세스해야 할 때 유용합니다. 따라서 실시간 처리 시스템, 운영 체제의 작업 스케줄링, 대용량 데이터의 배치 처리 등에 적합합니다. 힙 정렬 사이클 힙 정렬의 주요 사이클은 다음과 같이 진행됩니다: 힙 구성: 입력 배열을 최대 힙(max-heap) 또는 최소 힙(min-heap) 구조로 변환합니다. 요소 추출 및 재구성: 힙의 루트(최대값 또는 최소값)를 힙의 마..
-
Counting Sort(계수 정렬)Algorithm & Data Structure/Sort 2024. 4. 16. 22:30
카운팅 정렬(Counting Sort)은 특정 조건에서 매우 효율적인 정렬 방식을 제공하는 비교 기반 정렬이 아닌 알고리즘입니다. 그 특징과 구현에 대해 자세히 설명하겠습니다. Counting Sort란? 카운팅 정렬은 입력 배열에서 각 요소의 등장 횟수를 세고, 그 카운트를 기반으로 배열을 정렬하는 알고리즘입니다. 이 방법은 특히 배열의 원소가 특정 범위 내의 정수일 때 매우 효과적입니다. 이 정렬은 추가적인 메모리 공간을 사용해 입력 원소의 빈도 수를 카운팅하며, 이 정보를 이용하여 출력 배열을 직접 생성합니다. Counting Sort 사이클 설명 카운팅 정렬의 주요 사이클은 다음과 같은 단계로 이루어집니다: 카운팅 배열 초기화: 입력 배열의 각 요소 값에 대응하는 인덱스를 가진 카운팅 배열을 초기..
-
정규표현식(Regex)이란?Back-End/Language 2024. 4. 16. 21:55
정규표현식은 문자열을 처리할 때 매우 유용하며, 복잡해 보일 수 있지만 기본적인 구성 요소를 이해하면 쉽게 다룰 수 있습니다. 여기 정규표현식의 기본 패턴과 사용법을 간단하게 요약해 봅니다. 기본 문자 .: 임의의 단일 문자와 일치합니다. ^: 문자열의 시작과 일치합니다. $: 문자열의 끝과 일치합니다. 문자 클래스 [abc]: 괄호 안의 어느 한 문자(a, b, 또는 c)와 일치합니다. [^abc]: 괄호 안의 어느 문자도 아닌 모든 문자와 일치합니다. [a-z]: a부터 z 사이의 모든 소문자와 일치합니다. \d: 숫자와 일치합니다. [0-9]와 동일합니다. \w: 단어 문자(word character)와 일치합니다. [a-zA-Z0-9_]와 동일합니다. \s: 공백 문자와 일치합니다. 수량자 *: ..
-
플라이웨이트 패턴(Flyweight Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 16:26
플라이웨이트 패턴(Flyweight Pattern)은 객체 지향 디자인 패턴 중 하나로, 메모리 사용을 최적화하기 위해 공유를 통해 대량의 작은 객체들을 효율적으로 지원합니다. 이 패턴은 반복되는 상태를 공유 객체(플라이웨이트)로 분리하여, 여러 컨텍스트에서 재사용함으로써 메모리 소비를 줄이는 것을 목표로 합니다. 1. 플라이웨이트 패턴은 주로 어디에 쓰이나? 플라이웨이트 패턴은 주로 시스템에 많은 수의 객체가 필요할 때 사용되며, 이 객체들이 중복되는 상태를 많이 공유할 수 있을 때 유용합니다. 예를 들어, 텍스트 편집기에서의 문자 객체, 게임에서의 풍경 요소, GUI 툴킷의 그래픽 컴포넌트 등에서 자주 사용됩니다. 2. Java와 Go로 플라이웨이트 패턴을 구현할 때의 차이점 Java에서 플라이웨이트..
-
복합체 패턴(Composite Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 16:16
복합체 패턴(Composite Pattern)은 클라이언트가 개별 객체와 복합 객체 모두를 동일하게 다룰 수 있도록 하는 구조적 디자인 패턴입니다. 이 패턴은 객체를 트리 구조로 구성하여 부분-전체 계층을 표현합니다. 이를 통해 클라이언트는 개별 객체와 복합 객체를 동일한 방법으로 처리할 수 있습니다. 가장 쉽게 폴더를 이해하면 좋습니다. 1. 복합체 패턴은 주로 어디에 쓰이나? 복합체 패턴은 파일 시스템의 디렉토리와 파일 관리, 사용자 인터페이스 컴포넌트, 메뉴 시스템 등과 같이 부분과 전체의 계층 구조가 명확한 시스템에서 널리 사용됩니다. 예를 들어, 메뉴와 서브메뉴 항목을 동일한 객체 인터페이스로 다루어 개발의 복잡성을 줄일 수 있습니다. 2. Java와 Go로 복합체 패턴을 구현할 때의 차이점 J..
-
퍼사드 패턴(Facade Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 15:58
퍼사드(Facade) 패턴은 객체 지향 프로그래밍에서 복잡한 시스템을 더 간단한 인터페이스로 제공하여, 서브시스템들의 의존성을 감소시키고 클라이언트와 서브시스템 간의 상호작용을 단순화하는 구조적 디자인 패턴입니다. 이 패턴은 하나의 통합된 인터페이스를 통해 서브시스템들을 더 쉽게 사용할 수 있도록 해 줍니다. 1. 퍼사드 패턴은 주로 어디에 쓰이나? 퍼사드 패턴은 복잡한 라이브러리나 프레임워크의 간소화된 인터페이스를 제공하는 데 주로 사용됩니다. 이는 클라이언트 프로그램이 시스템의 복잡성을 이해하지 않아도 되도록 하여 사용의 용이성을 보장합니다. 예를 들어, 복잡한 비디오 변환 라이브러리를 사용할 때, 퍼사드를 통해 사용자는 단순한 메서드 호출로 비디오 파일 형식을 변환할 수 있습니다. 2. Java와 ..
-
브리지 패턴(Bridge Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 15:35
브리지 패턴은 디자인 패턴의 한 종류로, 구현부에서 추상화된 부분을 분리하여, 각각 독립적으로 변화할 수 있도록 설계하는 패턴입니다. 이 게시글에서는 브리지 패턴의 기본적인 개념부터 실제 예시까지 다루어보겠습니다. 1. 브리지 패턴이란? 브리지 패턴은 추상화(abstraction)와 구현(implementor)이라는 두 가지 방향의 계층 구조를 분리하는 것입니다. 이 패턴의 주요 목적은 기능과 구현을 분리하여 서로 독립적으로 확장할 수 있도록 만드는 것입니다. 추상화 계층은 클라이언트가 사용할 고수준의 인터페이스를 정의하고, 구현 계층은 실제 하위 수준의 연산을 정의합니다. 2. 브리지 패턴은 주로 어디에 쓰이나? 브리지 패턴은 시스템의 구성요소가 매우 다양한 구현이 필요한 경우에 사용됩니다. 예를 들어..
-
어댑터 패턴(Adapter Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 14:55
어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 하는 구조적 디자인 패턴입니다. 이 패턴은 기존 시스템과 새 시스템, 라이브러리 또는 애플리케이션 간의 인터페이스 차이를 극복하기 위해 중간에 어댑터 클래스를 사용하여 호환성 문제를 해결합니다. 1. 어댑터 패턴은 주로 어디에 쓰이나? 어댑터 패턴은 주로 다음과 같은 상황에서 사용됩니다: 기존 시스템과 새 시스템 간의 통합: 다른 인터페이스를 가진 두 시스템이 서로 통신해야 할 때. 라이브러리 교체: 기존 코드를 변경하지 않고 새로운 라이브러리 또는 도구를 기존 시스템에 통합할 때. 플랫폼 독립적인 코드 작성: 다양한 플랫폼에서 작동하는 코드를 개발할 때. 2. Java와 Go로 어댑터 패턴을 구현할 때의 차이점 Jav..