|
|
(사용자 4명의 중간 판 13개는 보이지 않습니다) |
1번째 줄: |
1번째 줄: |
− | '''컴퓨터과학'''<!--컴퓨터 과학-->(computer science)은 전산 이론, 하드웨어 및 소프트웨어에 중점을 둔 정보과학의 한 분야이다. | + | '''컴퓨터과학'''<!--컴퓨터 과학-->(computer science, 컴퓨터 사이언스) 또는 '''전산학'''(電算學)은 [[계산]](computation), [[정보]](information) 그리고 [[자동화]](automation)에 대한 학문이다. 컴퓨터과학은 [[알고리즘]], [[계산]] 및 [[정보]]에 대한 이론적 [[연구]]에서부터 [[하드웨어]]와 [[소프트웨어]]의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다. 전산 이론 및 시스템 설계를 다루는 전문가를 [[컴퓨터과학자]] 또는 [[전산학자]]라고 부른다. |
| | | |
| == 개요 == | | == 개요 == |
− | 네덜란드의 유명한 수학자이자 컴퓨터 과학자인 [[에츠허르 비버 데이크스트라]](Edsger Wybe Dijkstra)는 "천문학이 망원경에 대한 학문이 아닌 것처럼 컴퓨터과학은 컴퓨터에 대한 학문이 아니다" 라고도 말했다. 별을 보기위해 먼저 좋은 망원경을 만들고자 노력했던 시기에 좋은 망원경의 확보 여부는 연구에 끼치는 영향이 더 컸었지만, 망원경은 천문학을 돕는 도구이지 연구대상은 아니다. 이처럼 컴퓨터 역시 컴퓨터과학에서 도구이지 주된 연구 대상은 아니다. 컴퓨터과학은 컴퓨터기기(하드웨어)가 아닌 자동 연산장치에 의한 계산 및 정보의 연구와 관련한 학문을 분류한 학문이다. 주로 [[연산]], [[알고리즘]], 컴퓨터 시스템 하드웨어, [[소프트웨어]] 및 [[응용프로그램]]의 설계 이론을 연구하고 [[통신]]과 [[제어]], 인지 능력과 [[데이터 베이스]]의 학습 등 만들어낸 자연정보 및 [[프로세스]] 일체를 취급한다. 컴퓨터 과학은 세부적으로 들어가면 실용적인 부분과 이론적인 부분으로 나눌 수 있다.<ref> 길현영, 〈[https://spri.kr/posts/view/21907?code=column 컴퓨터과학에 대한 오해와 진실]〉, 《소프트웨어정책연구소》, 2017-10-30 </ref><ref> 〈[https://jinkun-happy2you.tistory.com/25 컴퓨터 과학의 역사로 알아보는 컴퓨터 공학과의 차이.]〉, 《티스토리》, 2020-06-23 </ref>
| + | '''컴퓨터과학'''(컴퓨터 사이언스) 또는 '''전산학'''(電算學)은 [[계산 이론|계산]](computation), [[정보]](information) 그리고 [[자동화]](automation)에 대한 학문이다. |
| + | |
| + | 컴퓨터과학은 알고리즘, 계산 및 정보에 대한 이론적 연구에서부터 하드웨어와 소프트웨어의 계산 시스템 구현에 대한 실질적인 문제에 이르기까지 다양한 주제에 걸쳐 있다. |
| + | |
| + | 전산 이론 및 시스템 설계를 다루는 전문가를 [[컴퓨터과학자]] 또는 [[전산학자]]라고 부른다. |
| + | |
| + | 외국에서는 [[컴퓨터공학]](computer engineering)을 컴퓨터과학(computer science, 컴퓨터 사이언스) 분야 중에서 하드웨어를 다루는 세부 영역의 명칭으로 사용하는데 대한민국에서는 컴퓨터과학과 같은 뜻으로 자리 잡았다. Stanford의 경우 Computer Science전공에서 Computer Engineering트랙을 제공한다.[[https://www.cs.stanford.edu/bachelors-compsci-tracks-overview]] |
| + | |
| + | [https://en.m.wikipedia.org/wiki/Computer_science_and_engineering Computer Science and Engineering] (CSE)이라는 이름으로 교육 프로그램을 운영하는 대학도 존재한다. |
| + | |
| + | 컴퓨터과학의 분야는 ([[알고리즘]], [[계산이론]], [[정보이론]] 같은) 이론적인 분야와 (하드웨어와 소프트웨어 설계 및 구현을 포함한) 실용적인 분야로 나눌 수 있다. 예를 들어, [[컴퓨터 그래픽스]]나 [[계산기하학]]은 보다 구체적인 응용을 강조하는 반면, [[계산이론]]은 추상적인 계산 모델과 그것들을 사용하여 해결할 수 있는 일반적인 종류의 문제에 관한 것이다. [[알고리즘]]과 [[자료구조]]는 컴퓨터과학의 심장이라고 불려왔다. [[프로그래밍 언어론]]은 계산 프로세스의 설명에 대한 접근 방식을 고려하는 반면, [[컴퓨터 프로그래밍]]은 복잡한 시스템을 만들기 위해 그것들을 사용하는 것을 포함한다. [[컴퓨터 구조]]는 컴퓨터 구성요소와 컴퓨터 작동원리를 설명한다. [[인공지능]]은 인간과 동물에게서 발견되는 문제 해결, 의사결정, 환경 적응, 계획, 학습과 같은 목표 지향적인 과정을 종합하는 것을 목표로 한다. 디지털 컴퓨터는 다양한 정보 과정을 시뮬레이션할 수 있다. 컴퓨터과학의 근본적인 관심사는 자동화할 수 있는 것과 없는 것을 결정하는 것이다. 컴퓨터과학자들은 보통 학술 연구에 집중한다. [[튜링상]]은 일반적으로 컴퓨터과학에서 가장 뛰어난 상으로 인정받고 있다. |
| | | |
| == 분야 == | | == 분야 == |
− | === 컴퓨터과학 이론 === | + | 컴퓨터과학은 그 이론의 적용법에 따라 여러 분야로 나뉜다. 일반적인 분류는 다음과 같다. |
− | ;이산수학
| + | |
− | [[이산수학]]이란 실수처럼 연속성이 있는 것들이 아니라 주로 정수, 논리 연산같이 서로의 값들이 연속적이지 않고 뚝뚝 떨어져 있거나 구분되어 셀 수 있는 것들을 주로 연구하므로 유한 수학이라고도 불린다. 이산적인 데이터를 취급하는 컴퓨터를 분석하기 위한 수학이다. 컴퓨터 소프트웨어와 관련된 이산수학의 내용은 집합, 명제 관계, 함수, 알고리즘, 그래프이론, 미분, 적분, 부울 대수, 확률 및 통계의 이론수학분야에서부터 부호이론, 암호이론, 선형계획법 등의 응용수학 분야까지 이산수학의 범주에 포함될 수 있다.<ref> 전상표, 〈[https://www.koreascience.or.kr/article/JAKO201110264496076.pdf 컴퓨터 소프트웨어 분야 연구를 위한 이산수학 분야에 대한 연구]〉, 《사이언스온》, 2010-12-27 </ref> 이산적인 과정을 통해서 데이터를 저장하고, 동작하는 디지털 컴퓨터의 개발으로 인해 20세기 후반에 이산수학에 대한 연구가 점점 활기를 띄기 시작했다. 이산수학에 포함된 개념과 기호들은 컴퓨터 알고리즘, 프로그래밍 언어, 암호학, 자동 이론 증명, 소프트웨어 개발 등의 문제를 연구하는 데 유용하다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%82%B0%EC%88%98%ED%95%99 이산수학]〉, 《위키백과》 </ref> | + | ===인접 학문=== |
− | ;그래프 이론
| + | * [[정보철학]] |
− | [[그래프 이론]]은 수학에서 객체 간에 짝을 이루는 관계를 모델링하기 위해 사용되는 수학 구조인 그래프에 대한 연구이다. 그래프 이론에서 그래프는 꼭짓점(버텍스/vertex), 교점(노드/node), 점(포인트/point)으로 구성되며 이것들은 변(엣지/edge, 간선)으로 연결된다.<ref> 〈[https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%84_%EC%9D%B4%EB%A1%A0 그래프 이론]〉, 《위키백과》 </ref> 컴퓨터 과학에서 그래프 이론은 자료 구조와 검색 알고리즘, 네트워크 모델링 등의 바탕이 되는 이론이다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99 컴퓨터 과학]〉, 《위키백과》 </ref> 자료구조에서 이론적으로 그래프는 리스트와 행렬 구조 중의 하나로 구별 가능하다. 하지만 실제 적용에 있어서 최적의 자료 구조는 이 두 구조의 조합된 형태를 띤다.<ref> 〈[https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%84_(%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0) 그래프 (자료 구조)]〉, 《위키백과》 </ref> | + | * [[정보심리학]] |
− | ;정보 이론
| + | * [[인지과학]] |
− | 정보 이론은 정보의 처리와 통신의 바탕이 되는 이론으로 정보량이나 정보원에 수학적인 정의를 부여하고 통신의 정보전송용량, 정보원에서 발생하는 통신문(메시지)의 능률적 부호화, 예측 등을 수학적인 입장에서 연구한 것이다.<ref> 〈[http://www.aistudy.co.kr/control/information_theory.htm Information Theory]〉, 《AIStudy》 </ref>
| + | * [[언어학]] |
− | 정보 이론의 기본적인 주제가 적용되는 기술로 ZIP 파일(무손실 데이터 압축), MP3 파일(손실 데이터 압축), DSL(채널 부호화), MIMO(채널 모델) 등이 있다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%A0%95%EB%B3%B4_%EC%9D%B4%EB%A1%A0 정보 이론]〉, 《위키백과》 </ref>
| + | * [[사이버네틱스]] |
− | ;수리논리학
| + | |
− | 수리논리학은 논리학에서 사용하는 명제들을 수학적인 기호로 표시하는 학문이다. 일상 언어와 같은 자연언어의 사용에서 올수있는 복잡성과 오류의 용이성을 제거하고 명제를 효과적으로 쉽게 다룰 수 있도록 하기 위해 도입한 현대 논리학 이론으로서, 기호를 많이 사용하여 기호 논리학이라고도 한다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%88%98%EB%A6%AC_%EB%85%BC%EB%A6%AC%ED%95%99 수리 논리학]〉, 《위키백과》 </ref>
| + | ===바탕이 되는 이론=== |
− | ;도메인 이론
| + | * [[이산수학]] |
− | 도메인 이론은 수학에서 특별한 종류의 일반적으로 도메인이라 불리는 부분순서에 대하여 연구하는 분야이다. 컴퓨터 과학에서 표기 의미론을 특정지을 때 사용되며, 특히 함수형 프로그래밍 언어의 연구에서 주로 사용된다.<ref> 〈[https://ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EC%9D%B4%EB%A1%A0 도메인 이론]〉, 《위키백과》 </ref>
| + | * [[정보이론]] |
− | ;확률론과 통계학
| + | * [[수리논리학]] |
− | 확률론은 확률에 대해 연구하는 수학의 한 분야이고, 통계학은 산술적 방법을 기초로 하여, 주로 다량의 데이터를 관찰하고 정리 및 분석하는 방법을 연구하는 수학의 한 분야이다. 통계학에서 정보화사회와 빅데이터 시대를 맞아 다양한 사회정보의 수집, 분석, 활용을 하고있다.<ref> 〈[https://ko.wikipedia.org/wiki/%ED%99%95%EB%A5%A0%EB%A1%A0 확률론]〉, 《위키백과》 </ref><ref> 〈[https://ko.wikipedia.org/wiki/%ED%86%B5%EA%B3%84%ED%95%99#%ED%86%B5%EA%B3%84%EB%B6%84%EC%84%9D_%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4 통계학]〉, 《위키백과》 </ref>
| + | * [[도메인 이론]] |
− | ;계산 이론
| + | * [[확률론]]과 [[통계학]] |
− | 어떤 문제를 컴퓨터로 풀 수 있는지, 계산 가능한 문제에 대해서는 얼마나 효율적으로 풀 수 있는지 계산을 하는 데 소요되는 시간과 필요한 기억량을 평가하는 이론이다. 이때 계산에 소요되는 시간과 필요한 기억량 등을 재는 척도를 일반적으로 계산량 또는 계산의 복잡함이라고 한다. 계산 이론을 위한 평가에는 [[튜링 머신]]이 모델로서 잘 쓰인다. 크게 계산 가능성 이론과 계산 복잡도 이론으로 나뉘어 있다.<ref> 〈[https://terms.naver.com/entry.naver?docId=839591&cid=42344&categoryId=42344 계산 이론]〉, 《네이버 지식백과》 </ref>
| + | * [[암호학]] |
− | * '''계산 가능성 이론''' | + | |
− | 계산 가능성 이론의 기초는 가산 집합 상에서 함수의 해를 찾는 문제와 관련이 있다. 1930년대 불완전성 정리와 함께 람다 대수와 튜링 기계라는 계산 모형이 만들어지면서, 어떤 집합이 효율적으로 계산 가능한지의 문제는 실질적으로 그 집합을 효율적으로 계산해 내는 함수를 만들어 내는 것과 같은 일이 되었다. 계산 가능성 이론의 초기 성과는 이들 집합을 계산적으로 동치인 것들로 묶어 위계로 분류한 것이다. 수학적으로 유한히 정의된 함수를 계산 가능성에 따라 분류했을 때 어떤 함수의 계산 가능성 문제를 다른 함수(다른 함수들)의 문제로 환원할 수 있다는 것을 보임으로써, 굳이 알고리즘 자체를 증명에 끌어들이지 않고도 계산 가능성을 증명할 수 있는 것이다. 컴퓨터 과학의 핵심과제는 컴퓨터로 푸는 문제들을 이해하여 연산장치의 한계를 밝히는 것이다. 어떤 관점에서 문제가 어려운지를 판단해야 하는가? 특정한 문제가 컴퓨터로 풀기에 얼마나 난해한지를 어떻게 정의할 것인가? 이러한 물음에 답하는 것이 계산가능성 이론의 목적이다.<ref> 〈[https://ko.wikipedia.org/wiki/%EA%B3%84%EC%82%B0_%EA%B0%80%EB%8A%A5%EC%84%B1_%EC%9D%B4%EB%A1%A0 계산 가능성 이론]〉, 《위키백과》 </ref>
| + | ===이론 컴퓨터과학=== |
− | * '''계산 복잡도 이론''' | + | * [[계산이론]] |
− | 계산 복잡도 이론은 컴퓨터 과학에서 계산 이론의 분야로, 문제를 해결하는 특정한 알고리즘이 있을 때, 이 알고리즘이 문제를 얼마만큼 효율적으로 수행될 수 있는지를 연구하는 것이다. 이 때 알고리즘의 수행은 실제 컴퓨터가 할 수 있지만, 평가하는 데에는 튜링 기계와 관련이 있는 정량화된 방법을 사용한다. 알고리즘이 문제를 풀 때, 얼마만큼의 시간을 소모하는지를 측정하는 시간복잡도, 얼마만큼의 메모리를 사용하는지를 측정하는 공간복잡도 등을 통해 해당 알고리즘이 얼마나 효율적인지 기준을 세운다.<ref> 〈[https://terms.naver.com/entry.naver?docId=4349216&cid=40942&categoryId=31530 계산복잡도이론]〉, 《네이버 지식백과》 </ref>
| + | * [[그래프이론]] |
− | === 컴퓨터의 실행 === | + | * [[계산이론|최적화 이론]] |
− | ;알고리즘과 자료 구조
| + | * [[오토마타 이론]] |
− | * '''알고리즘''' | + | * [[유형이론]] |
− | [[알고리즘]]이란 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것으로, 넓게는 사람 손으로 해결하는 것, 컴퓨터로 해결하는 것, 수학적인 것, 비수학적인 것을 모두 포함한다.<ref> 〈[https://terms.naver.com/entry.naver?docId=3597402&cid=58598&categoryId=59316 알고리즘]〉, 《네이버 지식백과》 </ref> 대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다. 좋은 알고리즘의 특성은 변하지 않는 명확한 작업 단계(정밀성), 각 단계마다 명확한 다음 단계(유일성), 구현할 수 있고 실용적(타당성), 특정 수의 작업 이후에 정지(유한성), 정의된 입력들에 일반적으로 적용(일반성)할 수 있어야 하고 정의된 입력을 받아들이고 답으로 출력을 내보낼 수 있어야 한다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 알고리즘]〉, 《위키백과》 </ref> | + | * [[정보이론]] |
− | * '''자료구조''' | + | * [[부호이론]] |
− | [[자료구조]]란 데이터에 편리하게 접근하고, 변경하기 위해서 데이터를 저장하거나 조직하는 방법을 말한다.<ref> 초보몽키, 〈[https://wayhome25.github.io/cs/2017/04/17/cs-18/ 강의노트 17. 알고리즘, 자료구조 개요]〉, 《깃허브 블로그》, 2019-04-28 </ref> | + | * [[양자컴퓨터|양자 컴퓨팅]] |
− | 자료의 특성과 크기, 주요 사용법과 수행하는 연산의 종류, 구현에 필요한 기억 공간 크기에 따라 여러 가지 종류의 자료구조 중 하나를 선택할 수 있다. 구현에 따라서는 배열, 튜플, 연결 리스트, 원형 연결 리스트, 이중 연결 리스트, 환형 이중 연결 리스트, 해시 테이블 등이 있고, 형태에 따라서는 크게 순차적으로 나열한 형태인 선형구조와 하나의 자료뒤에 여러개의 자료가 존재할 수 있는 형태인 비선형 구조로 나뉜다.<ref> botho, 〈[https://dnf-lover.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%9D%98-%EC%84%A0%ED%98%95-%EB%B9%84%EC%84%A0%ED%98%95-%EB%B6%84%EB%A5%98%EC%97%90-%EB%94%B0%EB%A5%B8-%EA%B0%81-%EC%A2%85%EB%A5%98%EC%99%80-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%B3%84-%ED%8A%B9%EC%A7%95-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC (자료구조) 자료구조의 선형, 비선형 분류에 따른 각 종류와 자료구조별 특징 간단 정리]〉, 《티스토리》, 2019-08-01 </ref>
| + | * [[계산 가능성 이론]] |
− | 먼저 선형 구조에는 스택, 큐, 환형 큐, 덱 등이있고, 비선형 구조에는 그래프, 유향/무향 그래프, 트리, 이진 트리, 힙 등이 있다.<ref> 〈[https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 자료 구조]〉, 《위키백과》 </ref>
| + | * [[형식언어|형식언어]] |
− | ;프로그래밍 언어와 컴파일러
| + | * [[람다대수]] |
− | 프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어로, 고급 언어일수록 사람이 사용하는 언어에 가깝다. 프로그래밍언어에서는 모든 언어의 전반에 깔려 있는 특성과 기본적인 설계 사상, 구현 방법들을 살피게 되며, 이를 바탕으로 하여 기존 언어들의 설계개념과 구현방법들을 연구해 컴퓨터와의 의사소통 방법은 물론 컴퓨터를 좀 더 잘 이해하는 데 도움을 줄 수 있으며, 새로운 언어를 설계하고 구현하는 데에도 커다란 도움을 줄 수 있다. 이러한 프로그래밍 언어들은 컴퓨터가 이해하지 못하기 때문에 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주는 일을 하는 프로그램을 컴파일러라고 한다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 컴파일러는 소스 프로그램을 읽어서 즉시 결과를 출력하는 인터프리터와는 구분된다. 그러나 현대에 들어 많은 인터프리터가 JIT 컴파일 등의 기술로 실시간 컴파일을 수행하므로, 컴파일러와 인터프리터 사이의 기술적 구분은 사라져 가는 추세이다.<ref> 〈[https://terms.naver.com/entry.naver?docId=2073348&cid=44414&categoryId=44414 프로그래밍언어]〉, 《네이버 지식백과》 </ref><ref> 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러 | + | |
− | ]〉, 《위키백과》 </ref> | + | ===알고리즘과 자료구조=== |
− | ;동시, 병렬, 분산 처리
| + | * [[알고리즘]] |
− | * '''동시 처리''' | + | * [[알고리즘 분석]] |
− | 동시처리는 서로 독립적으로 수행될 수 있는 두 개 이상의 프로세스를 단일 처리기 시스템에서는 시분할 제어 방식으로, 다중 처리기 시스템에서는 처리기마다 프로세스를 할당하여 동시에 처리하는 방식이다. 순차적 수행보다 시간의 절약과 시스템 이용률을 높이는 장점이 있다.<ref> 〈[http://word.tta.or.kr/dictionary/dictionaryView.do?subject=%EB%8F%99%EC%8B%9C+%EC%B2%98%EB%A6%AC 동시 처리]〉, 《정보통신용어사전》 </ref> 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장이 되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.<ref> 〈[https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%EC%9E%91%EC%97%85 다중작업]〉, 《위키백과》 </ref>
| + | * [[확률적 알고리즘]] |
− | * '''병렬 처리''' | + | * [[자료구조]] |
− | 병렬 처리는 동시에 동작하는 복수의 마이크로프로세서를 갖추고 있는 컴퓨터에 의해서만 실행될 수 있는 처리 방식으로, 복수의 처리 장치를 사용해 모든 처리 장치가 하나의 프로그램상의 서로 다른 태스크를 동시에 처리함으로써 처리의 부하를 분담하여 처리 속도를 향상시키는 방법이다.<ref> 〈[https://terms.naver.com/entry.naver?docId=850749&cid=42346&categoryId=42346 병렬 처리]〉, 《네이버 지식백과》 </ref> 하지만 이러한 병렬 처리에는 단점이 있다. 기존의 단일 프로세서에 비해 더 많은 다중 프로세서이고 그러한 많은 프로세서를 통해 또한 다양하게 지원하는 각종 운영체제나 언어 등의 영향을 받게 되면서 그러한 설계나 구조를 만들기가 굉장히 복잡해졌다. 가장 특징적인 세가지는 어떻게 태스크를 얼마만큼 어느정도로 나눠서 처리해야 하는 분할, 각 분리된 태스크들을 각 여러 프로세서에 어떻게 배정해서 처리해야 하는 스케줄링, 각 프로세서에 공유된 데이터가 임의의 한 프로세서에 의해 변경되지 않도록 해야 하는 동기화이다.<ref> 마팸, 〈[https://mafams.tistory.com/54 병렬 처리에 대해서]〉, 《티스토리》, 2017-08-18 </ref>
| + | * [[계산기하학]] |
| + | * [[조합최적화]] |
| + | |
| + | ===프로그래밍 언어론과 정형 기법=== |
| + | * [[프로그래밍 언어]] |
| + | * [[유형이론]] |
| + | * [[컴파일러]] |
| + | * [[자동 정리 증명]] |
| | | |
− | * '''분산 처리'''
| + | ===병행·병렬·분산 컴퓨팅=== |
− | 분산 처리는 중앙처리장치가 처리 또는 제어하고 있던 기능을 여러개의 처리장치에 분산시키거나 또는 중앙에서 집중처리하고 있던 것을 지방으로 분산하는 것을 말한다. 각 컴퓨터 시스템들은 자기만의 일을 처리할 수도 있으며 데이터 통신망을 이용하여 다른 컴퓨터 시스템과 통신하여 나누어 처리하기도 한다. 하나의 컴퓨터 시스템에 의한 집중 처리와는 달리 다른 컴퓨터 시스템에 일을 나누어 처리하는 방식은 통신 네트워크의 발달과 고성능 소형 컴퓨터 출현을 바탕으로 실용화되었다.<ref> 〈[https://terms.naver.com/entry.naver?docId=849136&cid=42346&categoryId=42346 분산 처리]〉, 《네이버 지식백과》 </ref> 예를 들어, 거대한 웹사이트의 저장소라던가, 맵리듀스(MapReduce)와 같은 빅데이터 계산이라던가, peer-to-peer(P2P) 파일 공유 같은 것이 있다. 분산 처리 시스템은 어떤 문제가 발생했을 때, 컴퓨터간에 복잡하게 연결되어있는 부분이 있고, 시간에 의존적인 것도 있다. 하나의 컴퓨터로 할 때는 잘 실행되건 것이, 분산 시스템에서는 크래쉬가 발생하거나 알 수 없는 이유로 실패할 수 있다. 이러한 부분적 실패가 분산 처리 시스템이 어려운 이유 중 하나이다.<ref> 장철원, 〈[https://losskatsu.github.io/os-kernel/dist-sys-concept01/# 분산 처리 시스템의 개념 이해(1)]〉, 《깃허브 블로그》, 2020-03-12 </ref>
| + | * [[병렬 컴퓨팅]] |
− | ;컴퓨터 구조
| + | * [[그리드 컴퓨팅]] |
− | [[컴퓨터]] 구조는 컴퓨터를 구성하는 CPU, 메모리, 입출력장치의 기본이 되는 디지털 회로소자의 특성과, CPU의 동작 원리와 설계방법을 익히며, CPU의 제어회로 및 마이크로프로그램 등을 연구함으로써 컴퓨터 구조에 대한 원리와 특성을 익히는 학문이다. 구체적으로는 컴퓨터 성능 구분 요소, 이진 데이터 연산, 데이터 패스 설계, 컨트롤 로직 설계, 파이프라인 기법, 메모리 시스템 설계, 그리고 주변장치 및 멀티프로세서 시스템에 대해 연구한다. 컴퓨터 구조의 기본 개념 및 동작원리를 이해하고 그 응용분야를 학습하고 MIPS CPU의 어셈블리 언어 및 기계어 명령을 학습함으로써 CPU의 내부 동작원리를 이해한다.<ref> 〈[https://terms.naver.com/entry.naver?docId=2073343&cid=44414&categoryId=44414 컴퓨터구조]〉, 《네이버 지식백과》 </ref> | + | * [[병행 컴퓨팅]] |
− | * 컴퓨터 구조의 연구영역
| + | * [[병행성]] |
− | ** 디지털 논리 회로 : 논리 게이트, 불대수, 조합 논리회로, 순차 논리 회로, 집적회로 등에 대해 연구한다.
| + | * [[분산 컴퓨팅]] |
− | ** 데이터의 표현 : 진법과 진법변환, 연산과 보수, 데이터와 데이터 구조의 표현을 연구한다.
| |
− | ** 컴퓨터 연산방법 : 수치와 비수치 연산에 대해 연구한다. | |
− | ** 기억장치의 종류 : 주기억장치, 보조기억장치, 고성능 기억장치에 대해 연구한다.
| |
− | ** 중앙처리장치 : 컴퓨터 레지스터, 산술 논리 연산 장치(ALU), 컴퓨터 명령어, CISC(Complex Instruction Set Computer)와 RISC(Reduced Instruction Set Computer)에 대해 연구한다.
| |
− | ** 제어장치 : 메이저 상태와 타이밍 상태, 명령어 사이클, 제어장치의 구현 방법에 대해 연구한다.
| |
− | ** 인터럽트 : 인터럽트의 발생 원인과 종류, 인터럽트 체제와 동작원리, 우선순위 인터럽트 체제에 대해 연구한다.
| |
− | ** 입출력장치 : 주기억장치와 입출력장치, 주기억장치 버스와 입출력 버스, 입출력장치 인터페이스, 입출력 주소 공간, 데이터전송 방식에 대해 연구한다.
| |
− | ** 병렬 컴퓨터구조 : 병렬 컴퓨터구조의 분류, 병렬 프로세서(parallel processor), 결합 허용(fault tolerance)에 대해 연구한다.
| |
− | ** 데이터통신 : 데이터통신시스템의 구성요소, 데이터통신 방식, 전송 형태 및 속도, 데이터의 전송 방식, 근거리 통신망(LAN), 부가가치 통신망(VAN), 통신 프로토콜에 대해 연구한다.
| |
− | ;운영체제
| |
− | [[운영체제]]는 모든 하드웨어와 소프트웨어를 관리하고 컴퓨터 자원을 관리하며, 컴퓨터 사용자에게 편의성을 제공하고 응용 프로그램들의 실행을 도와주고 사용자와 하드웨어 사이의 매개체 역할을 하는 소프트웨어이다. 운영체제는 제어 프로그램과 처리 프로그램으로 구성된다. 제어 프로그램은 시스템 전체의 동작 상태를 감시, 감독하고 자원들을 관리하며 각종 입출력 장치를 제어, CPU 스케줄링과 작업관리, 기억장치 관리 등을 담당하며, 감시, 작업 관리, 데이터 관리 프로그램이 있다. 감시 프로그램은 시스템 전체의 동작 상태를 감독하고 지원하여 슈퍼바이저(supervisor)라고도 불리며, 감시 프로그램의 중추적인 역할을 담당한다. 작업 관리 프로그램은 작업을 처리하고 다른 작업으로의 자동적 이행을 위한 준비와 처리를 수행한다. 데이터 관리 프로그램은 주 기억장치와 보조 기억 장치사이의 데이터 전송, 입출력 데이터와 프로그램의 논리적 연결, 파일 조직 및 처리 등을 담당한다. 처리 프로그램은 제어 프로그램의 감시아래 컴퓨터의 특정한 문제를 해결하기 위해 필요한 여러가지 기능을 처리할 수 있도록 하는 프로그램이며, 언어 번역 프로그램, 서비스 프로그램, 문제 처리 프로그램이 있다. 언어 번역 프로그램은 원시 프로그램을 컴퓨터가 알 수 있는 기계어로 번역시키는 프로그램으로 컴파일러, 어셈블러, 인터프리터 등이있다. 서비스 프로그램은 시스템에서 사용 빈도가 높은 프로그램을 미리 개발하여 놓은 프로그램으로, 연계 편집 프로그램, 로더, 디버깅 프로그램, 정렬/병합 프로그램, 라이브러리 등이 있다. 문제 처리 프로그램은 컴퓨터 사용자가 필요한 업무에 맞게 개발한 프로그램으로 급여 관리, 인사 관리, 회계 관리 등이 있다.<ref> IT양햄찌, 〈[https://jhnyang.tistory.com/16 운연체제(Operating System:OS)란?운영체제 종류]〉, 《티스토리》, 2019-01-23 </ref> | |
− | 운영체제의 종류에는 일괄처리 운영체제, 대화형 운영체제, 실시간 운영체제, 하이브리드 운영체제가 있다. 일괄처리 운영체제는 작업을 모아서 처리, 사용자와의 상호작용 없이 순차적으로 실행한다. 대화형 운영체제는 시분할시스템이라고도 하며 일괄처리보다 반환시간이 빠르고 이용자에게 즉각적인 피드백을 제공한다. 실시간 운영체제는 모든 시스템 중 가장 빠른 응답시간을 보이고 결과값이 현재의 결정에 영향을 받으며 데이터의 처리가 매우 빠르고 반환시간이 매우 중요한 환경에 적합하다. 하이브리드 운영체제는 일괄처리와 대화형 처리의 합성한 운영체계로 대화형 작업이 많지 않을 경우 백그라운드에서 배치 프로그램을 실행하며, 대부분의 컴퓨터 시스템으로 사용하고 있다.<ref> 〈[https://terms.naver.com/entry.naver?docId=2073347&cid=44414&categoryId=44414 운영체제]〉, 《네이버 지식백과》 </ref>
| |
− | === 컴퓨터 시스템의 응용 ===
| |
− | ;소프트웨어 공학
| |
− | 소프트웨어공학은 소프트웨어를 분석, 설계, 개발, 운영, 유지보수 등 개발수명주기 전반에 걸친 계획, 개발, 검사, 보수, 관리, 방법론 등을 연구하는 분야이다. 소프트웨어는 하드웨어를 동작시켜 사용자가 작업을 편하게 수행하도록 하는 프로그램과 자료구조 등을 총칭하는 말인데, 프로그램 자체뿐만 아니라 프로그램의 개발, 운용 및 유지보수에 관련된 모든 문서와 정보도 포함한다. 컴퓨터 시스템에서 소프트웨어가 차지하는 비율은 1955년경에는 20% 미만이었지만, 80년대 후반에는 요구되는 소프트웨어의 규모가 커짐에 따라 복잡해져 80~90% 에 이르렀다. 이에 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생했는데, 이를 소프트웨어 위기라고 불리는 징후가 나타나기 시작했다. 이에 소프트웨어에 대한 개발 인력의 부족과 인건비가 상승되어 개발 기간 지연 및 개발 비용 증가, 성능 및 신뢰성 부족,
| |
| | | |
− | ;통신
| + | === 소프트웨어 공학 === |
− | ;인공지능
| + | * [[소프트웨어 공학]] |
− | ;데이터베이스
| + | * [[컴퓨터 프로그래밍]] |
− | ;컴퓨터 그래픽스
| |
| | | |
− | {{각주}}
| + | ===컴퓨터 시스템=== |
| + | * [[컴퓨터공학]] |
| + | * [[컴퓨터 아키텍처]] |
| + | * [[마이크로 아키텍처]] |
| + | * [[명령어 집합 구조]] |
| + | * [[다중처리]] |
| + | * [[운영체제]] |
| + | * [[실시간 컴퓨팅]] |
| + | * [https://en.m.wikipedia.org/wiki/Processor_design 프로세서 디자인] |
| + | |
| + | ===네트워크=== |
| + | * [[컴퓨터 네트워크]] |
| + | |
| + | ===인공지능=== |
| + | * [[자동 추론]] |
| + | * [[로봇공학|로보틱스]] |
| + | * [[컴퓨터 비전]] |
| + | * [[기계학습]] |
| + | * [[진화연산]] |
| + | * [[자율컴퓨팅]] |
| + | * [[패턴인식]] |
| + | * [[지식표현]] |
| + | * [[강화학습]] |
| + | * [[딥러닝]] |
| + | * [[인공신경망]] |
| + | * [[떼지능]] |
| + | * [[게임이론]] |
| + | * [[알고리즘 게임이론]] |
| + | * [[인공생명]] |
| + | |
| + | ===데이터베이스=== |
| + | * [[데이터베이스]] |
| + | * [[데이터마이닝]] |
| + | * [[검색엔진]] |
| + | |
| + | ===컴퓨터 그래픽스와 시각화=== |
| + | * [[2차원 컴퓨터 그래픽스]] |
| + | * [[3차원 컴퓨터 그래픽스]] |
| + | * [[계산기하학]] |
| + | * [[컴퓨터 애니메이션]] |
| + | * [[렌더링]] |
| + | * [[혼합현실]] |
| + | * [[가상현실]] |
| + | * [[솔리드 모델링]] |
| + | |
| + | ===이미지 처리와 음향 처리=== |
| + | * [[고속 푸리에 변환|FFT 알고리즘]] |
| + | * [[영상처리]] |
| + | * [[음성인식]] |
| + | * [[데이터 압축]] |
| + | * [[음성합성]] |
| + | |
| + | ===소셜 컴퓨팅과 인간과 컴퓨터 상호작용=== |
| + | * [[소셜컴퓨팅]] |
| + | * [[인간-컴퓨터 상호 작용|인간과 컴퓨터 상호작용]] |
| + | |
| + | ===계산과학=== |
| + | * [[수치해석학]] |
| + | * [[계산생물학]] |
| + | * [[계산물리학]] |
| + | * [[계산화학]] |
| + | * [[생물정보학]] |
| + | * [[신경정보학]] |
| + | * [[계산신경과학]] |
| + | * [[기호계산]] |
| | | |
| == 참고자료 == | | == 참고자료 == |
91번째 줄: |
156번째 줄: |
| * 〈[https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 자료 구조]〉, 《위키백과》 | | * 〈[https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 자료 구조]〉, 《위키백과》 |
| * 〈[https://terms.naver.com/entry.naver?docId=2073348&cid=44414&categoryId=44414 프로그래밍언어]〉, 《네이버 지식백과》 | | * 〈[https://terms.naver.com/entry.naver?docId=2073348&cid=44414&categoryId=44414 프로그래밍언어]〉, 《네이버 지식백과》 |
− | * 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러 | + | * 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러]〉, 《위키백과》 |
− | ]〉, 《위키백과》 | |
| * 〈[http://word.tta.or.kr/dictionary/dictionaryView.do?subject=%EB%8F%99%EC%8B%9C+%EC%B2%98%EB%A6%AC 동시 처리]〉, 《정보통신용어사전》 | | * 〈[http://word.tta.or.kr/dictionary/dictionaryView.do?subject=%EB%8F%99%EC%8B%9C+%EC%B2%98%EB%A6%AC 동시 처리]〉, 《정보통신용어사전》 |
| * 〈[https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%EC%9E%91%EC%97%85 다중작업]〉, 《위키백과》 | | * 〈[https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%EC%9E%91%EC%97%85 다중작업]〉, 《위키백과》 |
| * 〈[https://terms.naver.com/entry.naver?docId=850749&cid=42346&categoryId=42346 병렬 처리]〉, 《네이버 지식백과》 | | * 〈[https://terms.naver.com/entry.naver?docId=850749&cid=42346&categoryId=42346 병렬 처리]〉, 《네이버 지식백과》 |
| * 마팸, 〈[https://mafams.tistory.com/54 병렬 처리에 대해서]〉, 《티스토리》, 2017-08-18 | | * 마팸, 〈[https://mafams.tistory.com/54 병렬 처리에 대해서]〉, 《티스토리》, 2017-08-18 |
− | | + | * 〈[https://terms.naver.com/entry.naver?docId=849136&cid=42346&categoryId=42346 분산 처리]〉, 《네이버 지식백과》 |
| + | * 장철원, 〈[https://losskatsu.github.io/os-kernel/dist-sys-concept01/# 분산 처리 시스템의 개념 이해(1)]〉, 《깃허브 블로그》, 2020-03-12 |
| + | * 〈[https://terms.naver.com/entry.naver?docId=2073343&cid=44414&categoryId=44414 컴퓨터구조]〉, 《네이버 지식백과》 |
| + | * IT양햄찌, 〈[https://jhnyang.tistory.com/16 운영체제(Operating System : OS)란 ? 운영체제 종류]〉, 《티스토리》, 2019-01-23 |
| + | * wondong2, 〈[https://wondong2.tistory.com/11 1장 소프트웨어 공학의 개요]〉, 《티스토리》, 2017-02-06 |
| + | * 〈[https://terms.naver.com/entry.naver?docId=2073346&cid=44414&categoryId=44414 소프트웨어공학]〉, 《네이버 지식백과》 |
| + | * 〈[https://terms.naver.com/entry.naver?docId=1114230&cid=40942&categoryId=32837 소프트웨어공학]〉, 《네이버 지식백과》 |
| + | * 〈[https://terms.naver.com/entry.naver?docId=1166447&cid=40942&categoryId=32204 암호학]〉, 《네이버 지식백과》 |
| + | * 〈[https://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%95%99 암호학]〉, 《위키백과》 |
| + | * heecheolman, 〈[https://www.heecheolman.dev/post/%EC%95%94%ED%98%B8%ED%95%99/ 가볍게 배우는 암호학]〉, 《깃허브 블로그》, 2020-12-14 |
| + | * Yunnie, 〈[https://6u2ni.tistory.com/38 인공지능(Artificial Intelligence)의 유형]〉, 《티스토리》, 2021-03-07 |
| + | * 〈[https://namu.wiki/w/%EA%B0%95%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5 강인공지능]〉, 《나무위키》 |
| + | * 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B7%B8%EB%9E%98%ED%94%BD%EC%8A%A4 컴퓨터 그래픽스]〉, 《위키백과》 |
| + | * 〈[https://terms.naver.com/entry.naver?docId=1624925&cid=42171&categoryId=42188 컴퓨터그래픽스]〉, 《네이버 지식백과》 |
| | | |
| == 같이 보기 == | | == 같이 보기 == |
103번째 줄: |
180번째 줄: |
| * [[과학]] | | * [[과학]] |
| | | |
− | {{소프트웨어|토막글}} | + | {{소프트웨어|검토 필요}} |