의견.png

컴퓨터과학

위키원
hr9805 (토론 | 기여)님의 2021년 8월 24일 (화) 18:00 판
이동: 둘러보기, 검색

컴퓨터과학(computer science)은 전산 이론, 하드웨어 및 소프트웨어에 중점을 둔 정보과학의 한 분야이다.

개요

네덜란드의 유명한 수학자이자 컴퓨터 과학자인 에츠허르 비버 데이크스트라(Edsger Wybe Dijkstra)는 "천문학이 망원경에 대한 학문이 아닌 것처럼 컴퓨터과학은 컴퓨터에 대한 학문이 아니다" 라고도 말했다. 별을 보기위해 먼저 좋은 망원경을 만들고자 노력했던 시기에 좋은 망원경의 확보 여부는 연구에 끼치는 영향이 더 컸었지만, 망원경은 천문학을 돕는 도구이지 연구대상은 아니다. 이처럼 컴퓨터 역시 컴퓨터과학에서 도구이지 주된 연구 대상은 아니다. 컴퓨터과학은 컴퓨터기기(하드웨어)가 아닌 자동 연산장치에 의한 계산 및 정보의 연구와 관련한 학문을 분류한 학문이다. 주로 연산, 알고리즘, 컴퓨터 시스템 하드웨어, 소프트웨어응용프로그램의 설계 이론을 연구하고 통신제어, 인지 능력과 데이터 베이스의 학습 등 만들어낸 자연정보 및 프로세스 일체를 취급한다. 컴퓨터 과학은 세부적으로 들어가면 실용적인 부분과 이론적인 부분으로 나눌 수 있다.[1][2]

분야

컴퓨터과학 이론

이산수학

이산수학이란 실수처럼 연속성이 있는 것들이 아니라 주로 정수, 논리 연산같이 서로의 값들이 연속적이지 않고 뚝뚝 떨어져 있거나 구분되어 셀 수 있는 것들을 주로 연구하므로 유한 수학이라고도 불린다. 이산적인 데이터를 취급하는 컴퓨터를 분석하기 위한 수학이다. 컴퓨터 소프트웨어와 관련된 이산수학의 내용은 집합, 명제 관계, 함수, 알고리즘, 그래프이론, 미분, 적분, 부울 대수, 확률 및 통계의 이론수학분야에서부터 부호이론, 암호이론, 선형계획법 등의 응용수학 분야까지 이산수학의 범주에 포함될 수 있다.[3] 이산적인 과정을 통해서 데이터를 저장하고, 동작하는 디지털 컴퓨터의 개발으로 인해 20세기 후반에 이산수학에 대한 연구가 점점 활기를 띄기 시작했다. 이산수학에 포함된 개념과 기호들은 컴퓨터 알고리즘, 프로그래밍 언어, 암호학, 자동 이론 증명, 소프트웨어 개발 등의 문제를 연구하는 데 유용하다.[4]

그래프 이론

그래프 이론은 수학에서 객체 간에 짝을 이루는 관계를 모델링하기 위해 사용되는 수학 구조인 그래프에 대한 연구이다. 그래프 이론에서 그래프는 꼭짓점(버텍스/vertex), 교점(노드/node), 점(포인트/point)으로 구성되며 이것들은 변(엣지/edge, 간선)으로 연결된다.[5] 컴퓨터 과학에서 그래프 이론은 자료 구조와 검색 알고리즘, 네트워크 모델링 등의 바탕이 되는 이론이다.[6] 자료구조에서 이론적으로 그래프는 리스트와 행렬 구조 중의 하나로 구별 가능하다. 하지만 실제 적용에 있어서 최적의 자료 구조는 이 두 구조의 조합된 형태를 띤다.[7]

정보 이론

정보 이론은 정보의 처리와 통신의 바탕이 되는 이론으로 정보량이나 정보원에 수학적인 정의를 부여하고 통신의 정보전송용량, 정보원에서 발생하는 통신문(메시지)의 능률적 부호화, 예측 등을 수학적인 입장에서 연구한 것이다.[8] 정보 이론의 기본적인 주제가 적용되는 기술로 ZIP 파일(무손실 데이터 압축), MP3 파일(손실 데이터 압축), DSL(채널 부호화), MIMO(채널 모델) 등이 있다.[9]

수리논리학

수리논리학은 논리학에서 사용하는 명제들을 수학적인 기호로 표시하는 학문이다. 일상 언어와 같은 자연언어의 사용에서 올수있는 복잡성과 오류의 용이성을 제거하고 명제를 효과적으로 쉽게 다룰 수 있도록 하기 위해 도입한 현대 논리학 이론으로서, 기호를 많이 사용하여 기호 논리학이라고도 한다.[10]

도메인 이론

도메인 이론은 수학에서 특별한 종류의 일반적으로 도메인이라 불리는 부분순서에 대하여 연구하는 분야이다. 컴퓨터 과학에서 표기 의미론을 특정지을 때 사용되며, 특히 함수형 프로그래밍 언어의 연구에서 주로 사용된다.[11]

확률론과 통계학

확률론은 확률에 대해 연구하는 수학의 한 분야이고, 통계학은 산술적 방법을 기초로 하여, 주로 다량의 데이터를 관찰하고 정리 및 분석하는 방법을 연구하는 수학의 한 분야이다. 통계학에서 정보화사회와 빅데이터 시대를 맞아 다양한 사회정보의 수집, 분석, 활용을 하고있다.[12][13]

계산 이론

어떤 문제를 컴퓨터로 풀 수 있는지, 계산 가능한 문제에 대해서는 얼마나 효율적으로 풀 수 있는지 계산을 하는 데 소요되는 시간과 필요한 기억량을 평가하는 이론이다. 이때 계산에 소요되는 시간과 필요한 기억량 등을 재는 척도를 일반적으로 계산량 또는 계산의 복잡함이라고 한다. 계산 이론을 위한 평가에는 튜링 머신이 모델로서 잘 쓰인다. 크게 계산 가능성 이론과 계산 복잡도 이론으로 나뉘어 있다.[14]

  • 계산 가능성 이론

계산 가능성 이론의 기초는 가산 집합 상에서 함수의 해를 찾는 문제와 관련이 있다. 1930년대 불완전성 정리와 함께 람다 대수와 튜링 기계라는 계산 모형이 만들어지면서, 어떤 집합이 효율적으로 계산 가능한지의 문제는 실질적으로 그 집합을 효율적으로 계산해 내는 함수를 만들어 내는 것과 같은 일이 되었다. 계산 가능성 이론의 초기 성과는 이들 집합을 계산적으로 동치인 것들로 묶어 위계로 분류한 것이다. 수학적으로 유한히 정의된 함수를 계산 가능성에 따라 분류했을 때 어떤 함수의 계산 가능성 문제를 다른 함수(다른 함수들)의 문제로 환원할 수 있다는 것을 보임으로써, 굳이 알고리즘 자체를 증명에 끌어들이지 않고도 계산 가능성을 증명할 수 있는 것이다. 컴퓨터 과학의 핵심과제는 컴퓨터로 푸는 문제들을 이해하여 연산장치의 한계를 밝히는 것이다. 어떤 관점에서 문제가 어려운지를 판단해야 하는가? 특정한 문제가 컴퓨터로 풀기에 얼마나 난해한지를 어떻게 정의할 것인가? 이러한 물음에 답하는 것이 계산가능성 이론의 목적이다.[15]

  • 계산 복잡도 이론

계산 복잡도 이론은 컴퓨터 과학에서 계산 이론의 분야로, 문제를 해결하는 특정한 알고리즘이 있을 때, 이 알고리즘이 문제를 얼마만큼 효율적으로 수행될 수 있는지를 연구하는 것이다. 이 때 알고리즘의 수행은 실제 컴퓨터가 할 수 있지만, 평가하는 데에는 튜링 기계와 관련이 있는 정량화된 방법을 사용한다. 알고리즘이 문제를 풀 때, 얼마만큼의 시간을 소모하는지를 측정하는 시간복잡도, 얼마만큼의 메모리를 사용하는지를 측정하는 공간복잡도 등을 통해 해당 알고리즘이 얼마나 효율적인지 기준을 세운다.[16]

컴퓨터의 실행

알고리즘과 자료 구조
  • 알고리즘

알고리즘이란 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것으로, 넓게는 사람 손으로 해결하는 것, 컴퓨터로 해결하는 것, 수학적인 것, 비수학적인 것을 모두 포함한다.[17] 대부분의 알고리즘은 유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성하기 위한 일반화된 작업을 정의한다. 좋은 알고리즘의 특성은 변하지 않는 명확한 작업 단계(정밀성), 각 단계마다 명확한 다음 단계(유일성), 구현할 수 있고 실용적(타당성), 특정 수의 작업 이후에 정지(유한성), 정의된 입력들에 일반적으로 적용(일반성)할 수 있어야 하고 정의된 입력을 받아들이고 답으로 출력을 내보낼 수 있어야 한다.[18]

  • 자료구조

자료구조란 데이터에 편리하게 접근하고, 변경하기 위해서 데이터를 저장하거나 조직하는 방법을 말한다.[19] 자료의 특성과 크기, 주요 사용법과 수행하는 연산의 종류, 구현에 필요한 기억 공간 크기에 따라 여러 가지 종류의 자료구조 중 하나를 선택할 수 있다. 구현에 따라서는 배열, 튜플, 연결 리스트, 원형 연결 리스트, 이중 연결 리스트, 환형 이중 연결 리스트, 해시 테이블 등이 있고, 형태에 따라서는 크게 순차적으로 나열한 형태인 선형구조와 하나의 자료뒤에 여러개의 자료가 존재할 수 있는 형태인 비선형 구조로 나뉜다.[20] 먼저 선형 구조에는 스택, 큐, 환형 큐, 덱 등이있고, 비선형 구조에는 그래프, 유향/무향 그래프, 트리, 이진 트리, 힙 등이 있다.[21]

프로그래밍 언어와 컴파일러

프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어로, 고급 언어일수록 사람이 사용하는 언어에 가깝다. 프로그래밍언어에서는 모든 언어의 전반에 깔려 있는 특성과 기본적인 설계 사상, 구현 방법들을 살피게 되며, 이를 바탕으로 하여 기존 언어들의 설계개념과 구현방법들을 연구해 컴퓨터와의 의사소통 방법은 물론 컴퓨터를 좀 더 잘 이해하는 데 도움을 줄 수 있으며, 새로운 언어를 설계하고 구현하는 데에도 커다란 도움을 줄 수 있다. 이러한 프로그래밍 언어들은 컴퓨터가 이해하지 못하기 때문에 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주는 일을 하는 프로그램을 컴파일러라고 한다. 원래의 문서를 소스 코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 목적 코드는 주로 다른 프로그램이나 하드웨어가 처리하기에 용이한 형태로 출력되지만 사람이 읽을 수 있는 문서 파일이나 그림 파일 등으로 옮기는 경우도 있다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 컴파일러는 소스 프로그램을 읽어서 즉시 결과를 출력하는 인터프리터와는 구분된다. 그러나 현대에 들어 많은 인터프리터가 JIT 컴파일 등의 기술로 실시간 컴파일을 수행하므로, 컴파일러와 인터프리터 사이의 기술적 구분은 사라져 가는 추세이다.[22][23]

동시, 병렬, 분산 처리
  • 동시 처리

동시처리는 서로 독립적으로 수행될 수 있는 두 개 이상의 프로세스를 단일 처리기 시스템에서는 시분할 제어 방식으로, 다중 처리기 시스템에서는 처리기마다 프로세스를 할당하여 동시에 처리하는 방식이다. 순차적 수행보다 시간의 절약과 시스템 이용률을 높이는 장점이 있다.[24] 첫 번째 프로그램이 실행되다가 주변장치의 처리를 기다려야 하게 되면, 이 프로그램의 문맥은 저장이 되고, 두 번째 프로그램이 실행될 기회를 얻게 된다. 이런식의 처리 과정이 모든 프로그램의 작업이 완료될 때까지 반복적으로 일어난다.[25]

  • 병렬 처리

병렬 처리는 동시에 동작하는 복수의 마이크로프로세서를 갖추고 있는 컴퓨터에 의해서만 실행될 수 있는 처리 방식으로, 복수의 처리 장치를 사용해 모든 처리 장치가 하나의 프로그램상의 서로 다른 태스크를 동시에 처리함으로써 처리의 부하를 분담하여 처리 속도를 향상시키는 방법이다.[26] 하지만 이러한 병렬 처리에는 단점이 있다. 기존의 단일 프로세서에 비해 더 많은 다중 프로세서이고 그러한 많은 프로세서를 통해 또한 다양하게 지원하는 각종 운영체제나 언어 등의 영향을 받게 되면서 그러한 설계나 구조를 만들기가 굉장히 복잡해졌다. 가장 특징적인 세가지는 어떻게 태스크를 얼마만큼 어느정도로 나눠서 처리해야 하는 분할, 각 분리된 태스크들을 각 여러 프로세서에 어떻게 배정해서 처리해야 하는 스케줄링, 각 프로세서에 공유된 데이터가 임의의 한 프로세서에 의해 변경되지 않도록 해야 하는 동기화이다.[27]

  • 분산 처리

분산 처리는 중앙처리장치가 처리 또는 제어하고 있던 기능을 여러개의 처리장치에 분산시키거나 또는 중앙에서 집중처리하고 있던 것을 지방으로 분산하는 것을 말한다. 인터넷에 연결된 유휴 상태의 개인용 컴퓨터의 프로세싱 자원을 활용하려는 프로젝트가 여러개 있다.

컴퓨터 구조

컴퓨터 시스템의 응용

소프트웨어 공학
통신
인공지능
데이터베이스
컴퓨터 그래픽스

각주

  1. 길현영, 〈컴퓨터과학에 대한 오해와 진실〉, 《소프트웨어정책연구소》, 2017-10-30
  2. 컴퓨터 과학의 역사로 알아보는 컴퓨터 공학과의 차이.〉, 《티스토리》, 2020-06-23
  3. 전상표, 〈컴퓨터 소프트웨어 분야 연구를 위한 이산수학 분야에 대한 연구〉, 《사이언스온》, 2010-12-27
  4. 이산수학〉, 《위키백과》
  5. 그래프 이론〉, 《위키백과》
  6. 컴퓨터 과학〉, 《위키백과》
  7. 그래프 (자료 구조)〉, 《위키백과》
  8. Information Theory〉, 《AIStudy》
  9. 정보 이론〉, 《위키백과》
  10. 수리 논리학〉, 《위키백과》
  11. 도메인 이론〉, 《위키백과》
  12. 확률론〉, 《위키백과》
  13. 통계학〉, 《위키백과》
  14. 계산 이론〉, 《네이버 지식백과》
  15. 계산 가능성 이론〉, 《위키백과》
  16. 계산복잡도이론〉, 《네이버 지식백과》
  17. 알고리즘〉, 《네이버 지식백과》
  18. 알고리즘〉, 《위키백과》
  19. 초보몽키, 〈강의노트 17. 알고리즘, 자료구조 개요〉, 《깃허브 블로그》, 2019-04-28
  20. botho, 〈(자료구조) 자료구조의 선형, 비선형 분류에 따른 각 종류와 자료구조별 특징 간단 정리〉, 《티스토리》, 2019-08-01
  21. 자료 구조〉, 《위키백과》
  22. 프로그래밍언어〉, 《네이버 지식백과》
  23. 〈[https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC 컴파일러 ]〉, 《위키백과》
  24. 동시 처리〉, 《정보통신용어사전》
  25. 다중작업〉, 《위키백과》
  26. 병렬 처리〉, 《네이버 지식백과》
  27. 마팸, 〈병렬 처리에 대해서〉, 《티스토리》, 2017-08-18

참고자료

]〉, 《위키백과》


같이 보기


  의견.png 이 컴퓨터과학 문서는 소프트웨어에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.