전체 글 143

MVC pattern

1. MVC의 개념 MVC(Model View Controler)는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 사용되는 소프트웨어 디자인 패턴 중 하나입니다. 위의 사진 과 같이 사용자가 Controller를 조작하면 Controller는 Model을 이용해 data를 가져오고 그 data를 바탕으로 시각적 표현(View)를 제어하여 사용자에게 전달하는 것입니다. 이는 UI로부터 비즈니스 로직을 분리하여 애플레케이션의 시작적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있습니다. 너무 추상적이기 때문에, 쇼핑 리스트 애플리케이션을 예로 각 요소에 대해 설명해보겠습니다. 사용자가 원하는 것은 각 항목의 이름, 개수, 가격의 목록입니다. M..

테스트 주도 개발(TDD)

1. Test-Driven Development TDD는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스입니다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성합니다. 일단 테스트를 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거쳐 말 그대로 테스트가 코드 작성을 주도하는 프로세스입니다. Add a Test 테스트 주도형 개발에서는 새로운 기능을 추가하기 전에 테스트를 먼저 작성합니다. 테스트를 작성하기 위해 개발자는 해당 기능의 요구사항과 명세를 분명히 이해하고 있어야 합니다. 이는 사용자 케이스와 사용자 스토리 등으로 이해할 수 있으며, 이는 개발자가 코드를 작성하기 전에 보다 요구사항에 집중할 ..

메모리 관리

1. Memory 보통 메모리라 함은 메인 메모리인 RAM을 뜻합니다. 프로그램 실행 시 필요한 주소, 정보를 저장하고 가져다 사용할 수 있게 만드는 공간을 말하죠. 이 메모리를 관리해야하는 이유가 무엇일까요? 컴퓨터에서 각각의 프로세스는 독립된 메모리 공간을 갖고, OS 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있습니다. OS체제만이 OS 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않기 때문에, OS에서 메모리를 관리합니다. 또한 멀티프로그래밍 환경으로 변화하면서 한정된 메모리를 효율적으로 사용해야 했고, OS가 이를 어떻게 관리하는에 대한 관리 방법이 중요해졌습니다. OS의 역할은 실행파일이 로더에 의해 메모리에 올라오고 OS가 이 실행파일을 메모리의 어느 부분에 올..

Studying/Roadmap 2022.03.17

그리디 알고리즘 1

문제에 앞서 Greedy(탐욕법)가 무엇인지 알아보겠습니다. 각 단계마다 지금 당장 가장 좋은 방법만을 선택하는 해결 방법입니다. 많은 경우 최적해를 찾지 못하고 적용될 수 있는 경우가 두 가지로 제한됩니다 탐욕법을 사용해도 항상 최적해를 구할 수 있는 경우 시간이나 공간적 제약으로 최적해 대신 근사해를 찾아서 해결하는 경우 접근 방법 문제의 답을 만드는 과정을 여러 조각으로 나눈다. 각 조각마다 어떤 우선순위로 선택을 내려야 할지 결정한다. 작은 입력을 손으로 풀어본다. 다음 두 속성이 적용되는지 확인해본다. 탐욕적 성택 속성 : 항상 각 단계에서 우리가 선택한 답을 포함하는 최적해가 존재하는가 최적 부분 구조 : 각 단계에서 항상 최적의 선택만을 했을 때, 전체 최적해를 구할 수 있는가 한 개의 회의..

Algorism/Python 2022.03.17

UI & API

1. UI UI(User Interface)는 컴퓨터라는 시스템과 사용하는 사람의 접점에 존재하며, 사람이 생각하는걸 컴퓨터에게 전달하는 입력 장치, 컴퓨터의 상태를 사람에게 전달하는 출력장치가 UI입니다. 말보다 실제로 예시를 들어 알아보는게 편하겠죠. 우리가 사용하는 컴퓨터의 화면입니다. 브라우저나 메신저를 사용하려면 마우스를 프로그램 위에 두고 클릭하여 사용하겠죠. 웹 브라우저에서는 버튼 및 스크롤바를 이용하여 어떤 링크로 이동하거나 내용을 볼 때 사용하게 되겠죠. 이 때, 사용하는 버튼 및 스크롤 프로그램 아이콘을 UI라고 하는 것입니다. 2. API UI가 사용자(User) 차원에서 시스템을 제어한다면, API(Application Programing Interface)는 개발자 차원으로 넘어가..

결정알고리즘 2

지니레코드에서는 불세출의 가수 조영필의 라이브 동영상을 DVD로 만들어 판매하려 한다. DVD에는 총 N개의 곡이 들어가는데, DVD에 녹화할 때에는 라이브에서의 순서가 그대로 유지 되어야 한다. 순서가 바뀌는 것을 우리의 가수 조영필씨가 매우 싫어한다. 즉, 1번 노래와 5번 노래를 같은 DVD에 녹화하기 위해서는 1번과 5번 사이의 모든 노래도 같은 DVD에 녹화해야 한다. 또한 한 노래를 쪼개서 두 개의 DVD에 녹화하면 안된다. 지니레코드 입장에서는 이 DVD가 팔릴 것인지 확신할 수 없기 때문에 이 사업에 낭비되는 DVD를 가급적 줄이려고 한다. 고민 끝에 지니레코드는 M개의 DVD에 모든 동영상을 녹화하기 로 하였다. 이 때 DVD의 크기(녹화 가능한 길이)를 최소로 하려고 한다. 그리고 M개..

Algorism/Python 2022.03.16

객체 지향 프로그래밍

1. Object Oriented Programming 객체 지향 프로그래밍의 사전적 의미는 컴퓨터 프로그램의 명령어를 목록으로 보는 시각에서 벗어나, 하나의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 굉장히 추상적입니다.. 객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면 컴퓨터를 중심으로 컴퓨터가 사고하는대로 프로그래밍을 했지만, 객체 지향 프로그래밍은 인간 중심적 프로그래밍이라고 할 수 있습니다. 즉 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말하는데, 현실 세계의 사물을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것입니다. 이를 추상화 라고합니다. 객체지향으로 코드를 작성하면 이미 작성한 코드에 대한..

결정알고리즘 1

엘리트 학원은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이 다. 선생님은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm 은 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자를때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수 길이만큼 자른다고 가정하자. N개보다 많이 만드는 것도 N개를 만드는 것에 포함된다. 이때 만들 수 있는 최대 랜선의 길이를 구하는 프로그램을 작성하시오. ▣ 입력설명 첫째 줄에는 엘리..

Algorism/Python 2022.03.15

스레드와 동시성

1. Thread Thread(스레드)는 어떤 프로세스 내에서 실행되는 흐름을 말합니다. int main(void) { int n = 0; int m = 10; printf("%d\n", n * m); while(n < m) n++; printf("END\n"); } 위와 같은 코드는 하나의 흐름을 가지며 이를 스레드라합니다. 일반적으로 하나의 프로그램은 하나의 스레드를 갖습니다. 그런데 하나의 프로그램에 스레드가 2개 이상 존재하는 경우가 있습니다. 이를 다중 스레드라고 합니다. 한 프로그램(프로세스)에 여러 개의 스레드가 있을 수 있는 이유는 스레드가 빠른 시간 간격으로 스위칭(교체)되기 때문입니다. 이러한 동작으로 사용자는 스레드가 동시에 실행되는 것처럼 보는 것입니다. 이처럼 CPU가 하나인 환경..

Studying/Roadmap 2022.03.14

이분탐색

문제에 앞서 이분 탐색(Binary Search)이 무엇인지, 언제 사용하는 것인지에대해 알아보겠습니다. 이분 탐색이 가능한 주요 조건은 정렬되어 있어야 한다는 것입니다. 정렬되어 있는 배열에서 데이터를 찾으려고 시도할 때, 순차탐색처럼 처음부터 끝까지 하나씩 모든 데이터를 체크하면서 값을 찾는 것이 아니라 탐색 범위를 절반 씩 줄여가며 찾아가는 탐색법입니다. 아래 문제를 이분탐색법을 이용하여 풀어보겠습니다. 임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. 단 중복값은 존재하지 않습니다. ▣ 입력설명 첫 줄에 한 줄에 자연수 N(3

Algorism/Python 2022.03.14