본문 바로가기

728x90
728x90

Computer Science

[Design Pattern] 복합체 패턴(Composite Pattern)에 대해서 - 컴도리돌이 복합체 패턴(Composite Pattern)은 전체 - 부분 관계를 가진 객체들을 트리 구조로 구성하여 한 개체로 다루는 방법을 제공합니다. 이 패턴은 개별 객체와 복합 객체를 동일하게 취급하여 클라이언트가 단일 객체와 복합 객체를 구별하지 않고 사용할 수 있도록 합니다. 이 패턴은 특히 계층적 구조를 가진 객체를 다루거나, 여러 객체를 하나의 객체로 처리해야 하는 상황에 유용하게 활용됩니다. 복합체 디자인 패턴 구조 Component: 단일 객체(Leaf)와 복합 객체(Composite)가 구현하는 공통 인터페이스입니다. 이를 통해 클라이언트는 복합 객체와 단일 객체를 동일한 방식으로 다룹니다. interface component { void execute(); } Composite: 복합 객체로서,.. 더보기
[Design Pattern] 추상 팩토리(Abstract Factory)에 대해서 - 컴도리돌이 추상 팩토리 디자인 패턴(Abstract Factory Design Pattern)은 객체 생성에 관련된 일련의 인터페이스를 제공하여, 관련 객체들의 생성을 캡슐화하고 클라이언트 코드가 구체적인 클래스의 인스턴스를 직접 생성하는 것을 피하도록 하는 디자인 패턴 중 하나입니다. 이 패턴은 주로 "팩토리"라 불리는 인터페이스를 통해 다양한 종류의 관련 제품을 생성하는 데 사용됩니다. 각각의 팩토리는 특정 제품군에 대해 추상화된 인터페이스를 제공하며, 클라이언트 코드는 이러한 인터페이스를 통해 제품을 생성합니다. 이는 객체 생성 로직을 클라이언트 코드로부터 분리함으로써 시스템의 유연성을 향상하고, 객체 간의 결합도를 낮추어 변경과 확장에 용이하게 만듭니다. 추상 팩토리 패턴 구조(Abstract Factory.. 더보기
[네트워크] TCP/IP 모델에 대해서 - 컴도리돌이 TCP/ IP (Transmission Control Protocol/ Internet Protocol) 현재의 인터넷에서 사용하는 프로토콜 그룹이며, 상호작용하는 모듈로 이루어진 계층적 프로토콜이다. 각 모듈을 특정한 기능을 제공하며 원래의 TCP/IP 프로토콜은 하드웨어에 설치된 4가지 소프트웨어 계층으로 정의되지만 현재는 5 계층으로 간주한다. 응용 계층(Application Layer) - 프로토콜 : HTTP, SMTP, FTP - PDU : Message OSI 모델의 최상위 계층으로 다양하게 존재하는 응용 환경에서 공통적으로 필요한 기능을 다룬다. 시스템 간의 응용 처리는 상호 간에 통신하면서 일련의 업무를 처리할 수 있도록 필요한 서비스 기능을 제공한다. 이메일, 파일 전송, 웹사이트 조회.. 더보기
[알고리즘][누적합] 슬라이딩 윈도우 알고리즘(Sliding Window Algorithm), 카데인 알고리즘(Kadane`s Algorithm), 원형 배열 부분집합 최대 합 구하기 - 컴도리돌이 오늘 기업 코테를 보았다. 누적합에 대해 2문제씩이나 출제가 되었다. 문제를 다 풀긴 했지만 효율성에서 어떻게 될지 모르겠다. 오늘 코테 풀이에 아쉬움이 남아서 누적합에 대해 다시 돌아보는 시간을 가져보자. 코테의 첫 번째 누적 합의 문제는 연속된 k개의 값들의 합 중에서 가장 큰 값을 출력하는 문제였다. 나는 해당 문제를 슬라이딩 윈도우 알고리즘으로 해결하였다. 슬라이딩 윈도우 알고리즘(Sliding Window Algorihtm)은 배열이나 리스트의 요소의 일정 범위의 값을 비교할 때 사용하면 유용한 알고리즘이다. 예르 들어 정수로 이루어진 배열 {1, 4, 2, 5, 1}에서 길이가 2인 서브 배열의 합계가 가장 큰 서브 배열을 구할 때, 해당 알고리즘을 이용해서 해결한다. 슬라이딩 윈도우는 크기가.. 더보기
[운영체제/OS] Virtual Memory(가상메모리) - 컴도리돌이 가상 메모리(Virtual Memory) 하나의 프로그램을 실행시킬 때 해당 프로그램 전체를 실제 메모리에 올렸었다. 하지만 가상 메모리(Virtual Memory)를 사용한다면 당장 실행에 필요한 부분만 실제 메모리에 올려서 실행하게 된다. 즉, 가상 메모리는 프로그램 전체가 아닌 필요한 일부분만 실제 메모리에 올리는 방식을 사용한다. 1) 실행에 있어서 사용되는 프로그램의 일부만 메모리에 올린다. 2) 논리적 주소 공간은 물리적 주소 공간보다 더 커질 수있다. 3) 몇몇의 프로세스는 주소 공간에 공유되어진 것을 허락한다. 4) 프로세스 생성을 더욱 효과적으로 할 수 있다. 5) 필요로 한다면 페이지는 swapped in/out 이 된다. 요구 페이징(Demand Paging) 요구 페이징은 가상 메모.. 더보기
[운영체제/OS] Memory Management - MMU - paging - TLB - 컴도리돌이 outline Background Binding of Data to Memory MMU contiguous allocation paging TLB Background 메모리는 기본적으로 주소와 데이터로 구성되어 있다. CPU와 메모리는 양방향으로 주소와 데이터를 주고받는다. CPU는 주소를 가지고 메인 메모리에 데이터를 요청을 하고 해당 주소에 계산 결과를 통해서 메모리에 요구하는 실제 주소에 저장되어 있는 데이터를 CPU에 전달한다. 소스 파일(Source file) : 고수 준언어 또는 어셈블리어 (ex. c) 목적 파일(Object file) : 컴파일 또는 어셈블 결과 (ex. o) 실행파일(Executable file) : 링크 결과 (ex. exe) 소스파일은 컴파일러에 의해 수행 결과로 목적.. 더보기
[알고리즘] 깊이 우선 탐색(DFS, Depth, First Search) - 컴도리돌이 깊이 우선 탐색 너비 우선 탐색이 시작 정점에서 시작하여 점차 탐색 범위를 넓혀 나가는 방식이라면, 깊이 우선 탐색(DFS, depth, first search)은 시작 정점에서 시작하여 특정 경로를 따라 가능한 멀리 있는 정점을 재귀적으로 먼저 방문하는 방식이다. 방문할 정점이 없어지면 다른 경로를 찾아 다시 멀어지는 방향으로 탐색을 반복한다. 이러한 그래프 탐색 방법을 백트래킹(backtracking)이라고 한다. 시간 복잡도 : O(V+E) DFS는 대체로 시작 정점에서 멀이 있는 정점을 찾을 때 적합하다. DFS는 최단 경로를 보장하지 않는다. DFS에 의해 생성된 검색 트리는 길고 좁은 편이며, 상대적으로 적은 메모리를 필요로 한다. 깊이 우선 탐색 관련 문제 [프로그래머스] [level2] 타.. 더보기
[알고리즘] 너비 우선 탐색(BFS, Breadth,First Search) - 컴도리돌이 너비 우선 탐색 너비 우선 탐색(BFS, Breadth, First Search)은 시작 정점을 경계에 추가하는 것으로 시작한다. 경계는 이전에 방문했던 정점들에 의해 구성된다. 그리고 현재 경계에 인접한 정점을 반복적으로 탐색한다. 다음에 나오는 그림을 보면서 BFS 동작에 대해 짐작하면 좋다. 시간 복잡도 : O(V+E) BFS는 시작 정점에서 가까운 정점을 찾는데 적합하다. BFS에서 특정 정점을 방문할 경우, 시작 정점에서 해당 정점까지의 최단 거리 경로가 보장한다. BFS는 현재 경계에 인접한 모든 정점을 방문하므로 BFS에 의해 생성된 검색 트리는 짧고 넓은 편이며 많은 메모리를 필요로 합니다. 너비 우선 탐색 관련 문제 [프로그래머스] 2021.08.10 - [컴도리돌이 전공 공부/C++] .. 더보기