전체 글 55

[알고리즘][자료구조] Graph (그래프)

3번째 주제 그래프입니다. 여기서는 간단한 Graph와 BFS DFS에 대해 보도록 하겠습니다. 그래프 노드와 엣지로 이루어짐 그래프를 표현하는 방식에는 인접 행렬 (Adjacent Matrix)와 인접 리스트 (Adjacent Matrix)가 있습니다. 코드 구현 그래프 순회(탐색) 그래프를 순회하면서 모든 노드를 빠짐없이 탐색하는 것. BFS와 DFS 방식이 있습니다. DFS를 먼저 살펴보면 DFS는 시작 노드의 한 방향으로 갈 수 있는 경로가 있는 곳까지 깊이 탐색을 해 가다가 더 이상 갈 곳이 없으면, 가장 마지막에 만났던 갈림길이 있는 노드로 돌아와서 다른 방향의 노드로 탐색을 계속 진행하여 모든 노드를 방문하는 순회 방법입니다. -> 새로 탐색한 것을 먼저 방문하고, 그게 없는 경우 마지막에 ..

[알고리즘][자료구조] Tree (트리)

2번째 주제 트리입니다. Tree 그래프의 일종으로 Node가 계층 관계로 1:n 관계를 가지는 자료구조 기본 Tree에서는 용어 정리 정도만. 노드: 각 원소 엣지: Node를 연결하는 선, 부모 노드와 자식 노드를 연결한다. 레벨: 루트에서 노드에 이르는 엣지의 값 (루트는 0) 높이: 노드의 레벨 중 가장 큰 값 루트 노드: 시작원소 형제 노드: 같은 부모를 가지는 Node들 조상 노드: 루트까지의 경로에 있는 모든 노드들 서브 트리: 부모 노드와의 엣지를 끊었을 떄 생기는 트리 자손 노드: 서브 트리에 있는 하위 레벨의 노드들 단말(leaf) 노드: 자식 노드가 없는 노드 노드의 차수(degree): 자식 노드의 개수 Binary Tree 모든 노드가 자식 트리를 최대 2개까지만 가질 수 있는 트..

[알고리즘][자료구조] Linked List (링크드 리스트)

Linked List 원소의 추가/삭제가 빈번하게 일어날 때, 배열은 해당 원소 이후의 모든 원소를 1칸씩 앞/뒤로 옮겨 주어야합니다. 이런 문제를 해결한 자료 구조가 Linked List입니다. 하나의 Node가 다음 Node에 대한 Link를 가지고 있는 것이 Single Linked List 이전 node에 대한 Link도 가지고 있는 경우 Double Linked List 아래 그림과 같이 간단한 작업으로 Node의 추가 삭제가 가능합니다. 보통 Head에는 Data를 가지지 않고 Node1에 대한 Link만을 가지고, Tail Node에서 next로 Nullptr을 가지는 것이 일반적입니다. 하지만 이 Linked List는 특정 원소에 접근하는 시간이 길다는 단점이 있습니다. ArrayList..

GRASP

OO Design Principle 중 가장 널리 알려진 것은 SOLID 원칙입니다. 2021.04.25 - [Architecture (아키텍쳐)/DesignPattern] - SOLID Principle 하지만 GRASP 도 그에 못지 않게 널리 알려져있고 중요한 원칙입니다. GRASP란 무엇일까요? Craig Larman에 의해 만들어졌으며 GRASP는 General Responsibility Assignment Software Pattenrs의 약자로 한국어로 직역해보면 "일반적인 책임 할당 소프트웨어 패턴" 입니다. 즉 GRASP는 상호작용하는 Object에 어떻게 Responsibilities를 할당하는 지에 대한 내용을 담고 있다고 할 수 있습니다. 여기서 Responsibility란 정확히 ..

Factory Method, Abstract Factory (팩토리 메서드, 추상 팩토리)

Factory Method 부모 클래스가 객체를 생성할 수 있는 Interface를 제공하지만 자식 클래스들이 생성될 때, 생성되는 객체의 유형을 변경할 수 있도록 해주는 생성패턴 public interface chair() { createLeg(); } public class woodChair() { createLeg() { ... } } public class goldenChair() { createLeg() { ... } } Abstract Factory 관련 객체들의 구상 클래스들을 지정하지 않고도 그들의 패밀리들을 생성할 수 있도록 하는 생성패턴 예를 들어 아래와 같다. public class RPNCalculator { public int calculate(String input, String..

SOLID Principle

SOLID Principle 이란? SOLID Principle은 RC Martin이 만든 Software Design Principles입니다. 아래와 같은 5가지 원칙의 첫 글자를 따서 만들었습니다. The Single Responsibilities Principle (SRP) The Open-Closed Principle (OCP) The Liskov Substitution Principle (LSP) The Interface Segregation Principle (ISP) The Dependency Inversion Principle (DIP) 이 원칙들은 결국 자주 변하는 것과 변하지 않는 것을 분리하여 자주 변하는 것이 변하는 것을 의존하고 변하는 것이 자주 변하는 것에 의존하지 않는 것에 ..

Gang of Four (Gof) 디자인 패턴

GoF GoF는 DesignPatternsBook 의 저자 4명이 만든 디자인 패턴이라는 것에서 유래했습니다. GoF의 분류 이 Gof 패턴은 목적에 따라 Creational, Structural, Behavioral 3가지로 분류하며, 범위에 따라 Class, Object 2가지로 분류하여 총 6가지의 분류가 있습니다. Creational : 생성 패턴. 객체의 사용과 생성을 분리합니다. Structural : 구조 패턴. Classes나 Objcet를 구성할 때, 상속 등을 이용하여 특정한 생성자를 사용합니다. Behavioral : 행동 패턴. Class의 책임(Responsibilities)을 할당하는 문제에서 Static Relation과 Communcation을 제안하여 사용합니다. 우리가 알..

디자인 패턴 이란?

패턴이란? 디자인 패턴을 보기 이전에 "패턴"이란 것에 대해 알아야 합니다. 패턴이란 "특정 상황(Context)에서 자주 반복되는 비슷한 문제(Problem)에 대한 해결책(Solution)" 을 정의한 것입니다. 영어로는 다음과 같은 정의가 널리 쓰입니다. "A solution to a problem in a context" 왜 이러한 패턴을 사용할까요? 객체지향 프로그래밍은 어렵습니다. 재사용이 가능한 객체지향 프로그래밍은 훨씬 더 어렵습니다. - 경험이 많은 디자이너는 과거에 사용했던 좋은 해결책을 재사용합니다. - 잘 설계된 객체지향 시스템은 패턴을 활용합니다. - 디자이너가 패턴에 대해 이해하고 있으면 생산성이 올라가며 유연하고 재사용이 가능한 결과가 나옵니다. - 다른 개발자와의 커뮤니케이션..

쿠버네티스의 구성요소

Pod - 스케쥴링의 최소 단위 - 하나의 IP, 이름, 포트 범위를 갖는다. - Pod 연결은 Service 가 수행 라벨 - 객체를 동적 그룹으로 묶어주는 key-value pairs - 객체와 라벨: NxN 관계 - 객체를 식별하는 용도로만 사용. 예) 스케쥴러가 Pod 와 노드를 배치하기 위해 사용 Label selector - 라벨을 기반으로 객체를 선택 Annotation - 임의의 메타데이터를 객체에 연계 서비스 - Pod 그룹을 라벨로 묶어서 연결. - 보통 layer 3 (TCP/UDP)에서 동작l ..svc. cluster.local 형식으로 네임스페이스가 포함된 DNS 주소를 갖는다. Namespace - K8s 자원으로 관리됨 - 자원에 대한 영역을 제공 Podspec - Pod 정..

Lex 와 Yacc

1. Lex와 YaccLex는 어휘 분석기이며Yacc는 구문 분석기이다. Lex는 특정 패턴의 문자열 토큰을 찾는 것, Yacc는 해당 토큰들의 관계를 분석하여 구문 검사를 하는 것으로 구분 되어있다.이 2가지를 같이 사용하여 컴파일러와 인터프리터 등을 만들기 위해 사용된다. 2. LexLex는 어휘 분석기를 읽어와서, Lexer를 만든 뒤 이를 C 언어로 만들어진 소스 코드의 형태로 출력한다.Lex는 저작권이 있는 소프트웨어로 시작했지만, AT&T의 소스 코드에 기반하는 버전은 오픈 소스 정책을 따라 오픈 솔라리스 등에서 사용된다. 이외에도 유명한 오픈 소스 버전의 Lex로는 빠른 Lex(Fast Lex)라는 의미의 flex가 존재한다. 이 Lex는 3가지의 부분으로 구성된다.해당 Section들은 아..

기타 주제 2021.04.12
반응형