객체 지향 프로그래밍 (Object-Orientation Programming) 지금까지 배운 객체지향 프로그래밍은 대체로 C++ 문법에 대한 내용, 그 중에서도 상속에 대한 C++ 문법이었다. C++ 뿐만 아니라 JAVA와 같은 대표적인 OOP 프로그래밍 문법들도 배웠을 것이다. 그러나 이번에는 문법을 배우는 것이 아니라, 실제 소프트웨어 개발에 어떻게 적용되는지를 배울 것이다. 소프트웨어를 개발하는 이상적인 방법 인터페이스 컴퓨터(하드웨어)를 생각해보자. 컴퓨터를 한 회사에서 처음부터 끝까지 다 만들지는 않는다. 삼성에서 만든 컴퓨터의 스펙을 보면 아래와 같지만, 이 모든 부품을 삼성에서 다 만든 것이 아니다. 다른 회사들이 만든걸 모아서 만든 것이다. 그런데 굉장히 신기하게도 각 부품들을 다 다른 ..
개요 System Call 이란? System Call은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 정말 간단하게 다시 말하자면, System Call은 커널에 접근하기 위한 수단 혹은 도구 이다. 그렇다면 우리는 커널에 왜 접근해야하는지를, 그리고 커널에 접근하는 수단과 도구가 따로 만들어진 이유를 알면 System Call에 대해 이해할 수 있다는 것이다. System Call이 필요한 이유 커널에 왜 접근해야할까? 우리가 일반적으로 쓰는 프로그램들은 OS, 시스템의 힘을 빌려서 만들어진다. 유저 레벨의 함수들로는 고차원적인 동작을 하는 프로그램을 만드는게 사실상 불가능하다. 그렇기에 커널(kernel)의 도움을 반드시 받아야 한다...
운영체제의 구조 운영체제의 구조는 아래의 부품들의 구조와 유사하다. 운영체제의 역할이 바로 이 하드웨어들을 다루는 것이기 때문이다. ▼ 그렇기에 각 하드웨어들의 입장에서 운영체제를 볼 수 있다. 각 하드웨어들의 입장에서 본 운영체제가 바로 운영체제가 하는 일이라고 볼 수 있다. CPU의 입장 CPU는 일을 처리하는 핵심 부품이다. 그렇다면 일을 어떤 순서로 처리해야 효율적이고 공평할까? 사회의 시선으로 보면 먼저 들어온 일 부터 처리하는게 공평하지만, 효율적이라고는 하기 힘들다. 은행업무를 예시로 보자. ▼ 사회의 관점에서는 먼저 온 사람부터 업무를 봐주는게 공평하고 당연한 처사다. 번호표를 뽑았으니까 말이다. 그런데 먼저 온 사람의 업무가 2시간이 걸린다면 그건 조금 낭패다. ▼ 뒤의 사람들은 기껏해야..
개요 요구사항과 관련해서 단순히 전부 적고 끝내는 것이 아니라, 어떤 요구 사항이 언제 들어왔고 사라졌는지에 관한 세부적인 내용도 관리를 해야한다. 기능 요구사항(Functional requirements)으로는 use case diagrams를, 모든 유형의 요구사항(All types of requirements)으로는 separate requirement lists를 작성하면 된다. 위의 두 작업까지 하면 specification이 끝나고 design을 할 차례가 된다. Use Case Diagram 그리기 Use Case Diagram을 처음 보면 상당히 복잡한 형태로 그려져 있다고 느껴진다. 마치 시스템이 내부적으로 어떻게 돌아가는지 까지 다 그린 것 같은 느낌이지만, Use Case Diagra..
운영체제(Operating System) 운영체제란? 운영체제란 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층을 말한다.▼ 좁은 의미로는 커널이라고 말하고, 넓은 의미로는 커널뿐만 아니라 각종 주변 시스템 유틸리티를 포함한 개념을 말한다. 운영체제의 목적 운영체제의 목적은 크게 아래의 4가지가 있다. 컴퓨터 시스템의 자원을 효율적으로 관리 프로세서, 기억장치, 입출력 장치 등의 효율적 관리 사용자 및 운영체제 자신의 보호 프로세스, 파일, 메세지 등을 관리 컴퓨터 시스템의 자원들은 실행 도중에 추가되는 것들이 아니라 시작 전에 정해진 것들이다.▼ 메모리나 저장공간, 그리고 CPU의 성능까지 컴퓨터가 켜져있는 동안에는 바뀌지 않는다. 위에 운영체제..
개요 내용은 추후 추가될 예정입니다...! 더하기 / 곱하기 알고리즘 이진 탐색 합병 정렬 허프만 부호화
개요 트리(tree) 구조는 그래프의 일종으로, 한 노드에서 시작해서 다른 정점들을 순회하여 자기 자신에게 돌아오는 순환이 없는 연결 그래프이다. 말이 조금 어렵게 되어 있는데, 좀 더 쉽게 말하면 현재 노드를 떠나면 같은 길을 되돌아오는게 아닌 한 현재 노드로 돌아올 수 없다는 것이다. 버스를 탄다고 했을 때, 보통 반대 차선으로 가면 똑같은 버스가 있기 마련인데 가끔 편도로 가는 버스들이 있다. 일단 위의 말이 이해가 안된다면, 트리 구조를 편도로 가는 버스 정도로 이해하고 들어가자.▼ 앞에서 트리에 대한 설명으로 `순환이 없는 연결 그래프`라고 했다. 트리와 그래프와는 별개의 자료구조로 느껴지지만, 트리는 따지고 보면 그래프의 한 종류가 될 수 있다. 다만 그 특수성이 짙은 자료구조로서 그래프와 따..
개요 자료구조(data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 집합을 의미하며 각 원소들 사이의 관계가 논리적으로 정의된 일정한 규칙에 의하여 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 조직적, 체계적으로 구분하여 표현한 것을 말한다. 자료구조가 필요한 이유 데이터를 효율적으로 저장, 관리하여 메모리를 효율적으로 사용하기 위해서이다. 적절한 자료구조의 사용은 메모리의 용량을 절약해주고, 실행시간을 단축시켜줄 수 있다. 자료구조의 선택 기준 작업의 효율성, 추상화, 재사용성을 증가시키기 위하여 상황에 따른 적절한 자료구조의 사용이 필요하다. 따라서, 아래의 사항을 구려하여 자료를 좀 더 효율적으로 처리할 수 있도록 한다. 자료의 처리시간 자료..
요구사항 포착 Requirements를 다른 말로 specification이라고도 할 수 있다. 요구 사항을 들어준 것이 소프트웨어의 기능과 마찬가지이기 때문이다. 그렇기에 requirements를 정의하고 들어가는 것은 굉장히 중요하다. 그럼 requirements는 어떻게 찾을 수 있을까? 1. 단체가 현재 어떻게 돌아가고 있는지 이해해야 한다. 학교 관련 시스템을 개발한다고 해보자. 학교와 관련된 시스템을 만들기 위해서는 어떻게 돌아가는지를 알아야 하는데, 단순히 어떻게 돌아가겠지 하고 상상하는 것으로 학교가 어떻게 운영되고 있는지 알 수 없다. 직접 가서 학교가 어떻게 운영되고 있는지를 확인해봐야한다.▼ 2. 현재 시스템의 문제점이 무엇일까? 문제점이 없는데 개선할 필요가 있을까? 새로운 기능, ..
모델(Model)이란? 어플리케이션 영역에서 실존하는 것이나 상상의 것들을 표현하는 것을 모델이라고 한다. 예를 들면, 교각, 교통흐름, 건물, 경제 정책 등등을 모델이라 할 수 있다. 소프트웨어 측면에서는 Abstraction(추상화)을 말한다. Abstraction을 추상화라고 알고 있지만, 필요로 하는 것만 추출하는 것이라고 이해하는게 더 좋다. 학생들을 예로 보자. 우리는 실존하는 학생들이고, 개개인의 셀수 없이 많은 특성이 있다. 그런데 학교 시스템에서는 우리를 학번, 이름 등등의 처리하기 편한 정보로 우리를 특정화시킨다. 이렇게 컴퓨터로 가져오면서 공통적인, 대표적인 특징으로 표현한다. 또한 특정 요소 전부를 한 번에 표현하면 보기도 이해하기도 어렵기 때문에 계층적으로 표현하기도 한다. Dia..