반응형

Computer Science 27

CI/CD란? (CICD)

서론 프로그래머는 제품(소프트웨어)을 생성하기 위해 머리를 쥐어짜서 코딩을 한다. 어떻게 하면 더 효율적으로 자원을 사용할지, 속도는 어떻게 개선할지, 버그는 어떻게 고쳐야 할지... 그렇게 힘들게 만들어낸 코드를 사용자에게 선보이기 위해선 작성한 코드를 빌드, 테스트하고 배포 하여야 한다. 컴파일(Compile) 및 빌드(Build) 컴파일은 우리가 작성한 코드를 컴퓨터가 이해하고 동작시킬 수 있도록 번역해주는 작업이라고 할 수 있다. 이러한 작업을 수행하는 것을 컴파일러(Compiler)라고 하며, 컴파일을 마친 소스코드를 링크 과정을 거쳐 실제 실행 가능한 소프트웨어(. exe파일)로 만들어주는 과정 전체를 빌드라고 한다. 전처리 전처리가 전처리 구문을 처리하는 것을 말한다. C언어에서 볼 수 있는..

Computer Science 2022.02.03

빌더 패턴(Builder Pattern)

빌더 패턴(Builder Pattern)이란? 빌더 패턴은 생성 패턴(ConcretePattern)중 하나로, 객체를 생성하기 위한 방법 중 하나라고 할 수 있다. 이외의 생성 패턴으로는 생성자 패턴, 정적 메서드 패턴, 수정자 패턴 등이 있다. 그럼 먼저 빌더 패턴을 사용하는 이유에 대해서 알아보도록 하자. 기존의 생성자만을 사용한 객체 생성의 경우 생성자를 overload 함으로써 불필요한 생성자가 늘어난다거나 생성자에 들어갈 인자가 많아질 경우 이들의 순서를 일일이 맞춰 주어야 하고, 각 값이 어떤 값으로 들어가는지 헷갈릴 여지가 있다는 불편함이 존재한다. 예를 들어 Persoon이라는 클래스에 인적사항을 인자로 주어 객체를 생성한다고 생각해보자. fun main(){ var gildong = Pe..

해시맵(HashMap)

이번 글에서는 HashMap에 대해서 알아보도록 할텐데, 그 전에 먼저 Hash와 Map에 대해서 알아보도록 하자. 해시(Hash)와 맵(Map) 해시(Hash)는 어떠한 임의 길이의 데이터(Key)를 고정된 길이의 해시값으로 변경하는 단방향 암호화를 말한다. 이러한 해시값은 해시함수에 의해서 결정되며, 해시값으로부터 원본 데이터인 Key를 구할 수 없다는 특징이 있다. 좀 더 자세한 설명은 아래의 링크에서 확인할 수 있다. https://angangmoddi.tistory.com/289 해시(Hash)란? Hash? 해시라는 것은 임의의 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 것을 말한다. 이 과정에서 원본 데이터를 키(Key), 매핑하는 과정을 해싱(Hashing), 결과물로 나온 ..

Computer Science 2022.02.01

옵저버 패턴(Observer Pattern)

옵저버 패턴 Observe, 영어로 관찰하다 라는 뜻을 가지고 있다. 위 사진은 스타크래프트 게임에 나오는 Observer라는 관측 유닛이다. 플레이어는 위 유닛으로 상대방을 감시하여 정보를 얻어낼 수 있을 것이다. Observer를 보여주는 이유는 옵저버 패턴도 마찬가지이기 때문이다. 옵저버 패턴은 어떤 객체의 상태 변화를 '관측'하여 연관된 객체들에게 알림을 보내는 디자인 패턴이라고 할 수 있다. 예시 예를 들어서 설명해보도록 하자. 한 유튜버가 있고, 해당 유튜버를 구독한 사람들에게 동영상이 업로드될 때마다 구독자들에게 영상 제목을 알려주도록 해보자. interface Youtuber{ fun subscribe(subscriber: Subscriber) fun unsubscribe(subscribe..

[알고리즘/정렬] 선택, 버블, 삽입, 병합, 퀵, 힙

프로그래밍 중에 배열이나 리스트 등을 정렬해야 할 때가 있다. 그런 때 사용하는 정렬 알고리즘을 몇 가지 알아보도록 하자. 선택 정렬 배열의 가장 큰(또는 가장 작은)원소를 배열의 끝으로 옮기는 작업을 반복해서 배열을 정렬한다. 동작 과정 최대 원소(또는 최소 원소)를 찾는다. 최대 원소(또는 최소 원소)와 배열의 끝에 있는 원소를 교환한다. 배열 끝의 원소를 다음 반복에서 제외한다. 1~3번을 원소가 하나 남을 때까지 반복한다. 코드 def selectionSort(list): max = 0 if len(list) : 내림차순, < : 오름차순 res.append(left[0]) left = left[1:] else: res.append(right[0]) right = right[1:] elif len..

Computer Science 2022.01.16

(메모리)코드, 데이터, 힙, 스택 영역

프로그램을 실행시키면, 운영체제는 프로그램을 위해 메모리 공간을 할당해준다. 프로그램이 운영체제로부터 할당받는 메모리 공간은 총 4개 영역으로 구분할 수 있다. 코드(Code) 영역 데이터(Data) 영역 힙(Heap) 영역 스택(Stack) 영역 코드(Code) 영역 코드 영역에는 실행할 프로그램의 코드와 매크로 상수가 기계어 형태로 저장된다. 다른 이름으로 텍스트(Text) 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가 처리한다. 컴파일 타임에 결정되고, 중간에 변경이 불가능하도록 Read-Only로 되어있다. 프로그램 시작부터 종료까지 메모리에 남는다. 데이터(Data) 영역 프로그램의 전역변수와 정적 변수(static변수 등)가 저장되는 공간이다. 프로그램 시작과 동시에..

Computer Science 2022.01.15

[자료구조] 트리(Tree)

트리(Tree) 트리는 값(노드)들이 나무 가지와 같은 모양을 가지고 있는 자료 구조이다. 트리 내에 있는 각 공간을 "노드"라고하며, 가장 위쪽에 있는 노드를 "루트 노드"라고 한다. 또한 트리는 트리 안에 하위 트리를 가지고, 그 트리가 또 다시 하위 트리를 가지는 재귀적 구조이다. 위 그림에 있는 트리를 보면, 전체 트리에서 다시 왼쪽, 오른쪽으로 나뉘어서 하위 트리를 가지는걸 볼 수 있다. 컴퓨터에서 폴더(Directory)구조가 트리 구조의 예가 될 수 있다. 이제 트리에 대한 용어에 대해서 알아보도록 하자. 노드(Node) 트리를 구성하는 요소(데이터) 각 노드는 키 또는 값과 하위 노드에 대한 포인터를 가지고있다. A, B, C, D, E, F, G, H, I 간선(Edge) 노드와 노드를 ..

Computer Science 2022.01.13

동기(Synchronous)와 비동기(Asynchronous)

프로그래밍을 하다 보면 동기적, 비동기적이라는 말을 듣곤 한다. 여기서 말하는 동기와 비동기가 뭔지에 대해 알아보도록 하자. 동기적 처리(Synchronous) 동시에 일어난다는 뜻, 요청과 결과가 동시에 일어날 때 노드 A와 노드 B사이의 작업 처리 단위를 동시에 맞추겠다. 요청한 결과가 그 자리에서 동시에 주어진다. 비동기적 처리(Asynchronous) 동시에 일어나지 않는다는 뜻, 요청과 결과가 동시에 일어나지 않을 때 노드 사이의 작업 처리 단위를 동시에 맞추지 않겠다. 요청한 결과가 그 자리에서 주어지지 않는다. 네트워크 통신과 같은 시간이 오래 걸리는 작업에 사용된다. 동기와 비동기 길동이는 다가오는 개학 전에 그동안 밀린 숙제들을 끝내려고 했다. 수학, 과학, 영어, 미술 등 길동이가 해야..

Computer Science 2022.01.11

JSON이란?

JSON(제이슨)? JSON이란 JavaScript Object Notation의 축약어로, JavaScript에서 객체를 표현하는 방법이지만, 주로 데이터를 저장하거나 전송할 때 사용하는 경량 DATA 교환 형식으로 사용된다. JSON은 하나의 속성이 키-값의 한 쌍으로 구성되어 데이터를 표현한다. { "name" : "홍길동", "age" : "26" } 위와 같이 name, age라는 '속성'과 홍길동, 26이라는 '값'이 각각 서로 쌍을 짓는 형태이다. JSON은 다음과 같은 문법을 사용한다. JSON객체는 { } (중괄호)로 표기한다. 배열은 [ ] (대괄호)로 표기한다. 각 속성은 Key와 Value쌍으로 이루어지며, 둘은 : (콜론)으로 구분한다. 각 속성들은 , (쉼표)를 사용해서 구분한다..

Computer Science 2022.01.10

탐색 알고리즘(선형, 이진, 해시)

선형 탐색(Linear Search) 선형 탐색은 가장 간단한 탐색 방법이라고 할 수 있다. 위와 같은 배열에서 10을 찾으려고 할 때, 선형 탐색에서는 가장 왼쪽 칸부터 한 칸 씩 오른쪽으로 가면서 각각의 값을 비교한다. 선형 탐색의 경우 단순하며, 이해하기 쉽고 찾는 대상이 앞쪽에 있으면 빠르게 찾을 수 있겠지만 찾는 대상이 뒤쪽에 있으면 그만큼 찾는 속도가 느려진다. 또한 각각의 값들을 일일이 확인해야 하기 때문에 값이 많아질수록 시간이 더 오래걸리게된다. Big-O표기법으론 O(n)으로 볼 수 있다. fun main(){ var arr = arrayOf(1, 5, 63, 51, 8, 97, 13, 15, 22, 30) var cnt = 0 for(i in arr){ if(i == 15) break..

Computer Science 2022.01.09
반응형