# 컴퓨터 과학

**컴퓨터 과학**(computer科學, 영어: computer science) 또는 **전산학**(電算學)은 계산, 정보, 자동화와 이를 수행하는 컴퓨터 및 계산 시스템을 연구하는 학문이다. 컴퓨터 과학은 계산이 무엇인지, 어떤 문제가 계산 가능한지, 계산을 얼마나 효율적으로 수행할 수 있는지, 그리고 그러한 계산을 실제 시스템으로 어떻게 구현할 수 있는지를 다룬다.

컴퓨터 과학은 알고리즘, 자료 구조, 계산 이론, 프로그래밍 언어, 컴퓨터 시스템, 데이터베이스, 인공지능, 컴퓨터 보안, 소프트웨어 공학 등 이론적·실용적 분야를 포함한다. 이 가운데 일부는 수학과 논리학에 가깝고, 일부는 공학과 시스템 설계에 가깝지만, 모두 계산과 정보 처리라는 공통된 대상을 중심으로 연결된다.

컴퓨터 과학에서 말하는 “컴퓨터”는 단순히 특정한 전자 기기만을 뜻하지 않는다. 연구의 핵심은 컴퓨터 자체의 사용법보다, 계산 절차를 알고리즘으로 표현하고, 정보를 자료 구조와 프로그래밍 언어로 나타내며, 이를 하드웨어와 소프트웨어 시스템에서 실행하는 원리를 밝히는 데 있다. 따라서 컴퓨터 과학은 실제 컴퓨터가 만들어지기 전부터 존재했던 계산과 논리의 문제까지 포함한다.

컴퓨터 과학은 현대 사회의 여러 기술과 밀접하게 관련된다. 인터넷, 검색 엔진, 암호학, 기계 학습, 컴퓨터 그래픽스, 분산 컴퓨팅, 클라우드 컴퓨팅, 데이터 과학 등은 모두 컴퓨터 과학의 이론과 방법을 바탕으로 발전하였다. 또한 자연과학·공학·사회과학·인문학에서 대규모 자료를 분석하거나 복잡한 과정을 모의실험하는 데에도 컴퓨터 과학의 방법이 사용된다.

## 정의와 범위

컴퓨터 과학은 넓게 말해 계산과 정보 처리의 이론, 설계, 구현, 응용을 연구하는 학문이다. 여기서 **계산**은 어떤 입력으로부터 정해진 절차에 따라 출력을 얻는 과정을 뜻하고, **알고리즘**은 그러한 계산을 수행하기 위한 명확한 절차를 뜻한다. 컴퓨터 과학은 알고리즘이 올바른 결과를 내는지, 얼마나 많은 시간과 기억 공간을 쓰는지, 어떤 문제는 원리적으로 계산할 수 없는지 등을 연구한다.

컴퓨터 과학의 범위는 단순한 컴퓨터 프로그래밍보다 넓다. 프로그래밍은 계산 절차를 실제 프로그래밍 언어로 표현하는 중요한 활동이지만, 컴퓨터 과학은 그보다 더 근본적인 계산 모델, 알고리즘의 설계와 분석, 정보의 표현, 시스템의 구조, 프로그램의 의미와 검증, 인간과 컴퓨터의 상호작용까지 다룬다. 이러한 이유로 컴퓨터 과학은 “컴퓨터를 사용하는 기술”이라기보다 “계산과 정보 처리의 원리를 연구하는 학문”으로 이해된다.

컴퓨터 공학, 소프트웨어 공학, 정보기술, 정보과학은 컴퓨터 과학과 밀접하지만 강조점이 다르다. 자세한 관계는 아래의 다른 분야와의 관계 절에서 다룬다.

### 명칭

영어의 computer science는 문자 그대로는 “컴퓨터 과학”이지만, 역사적으로는 컴퓨터라는 기계만을 연구하는 좁은 분야를 뜻하지 않는다. 오늘날 이 말은 계산의 이론적 기초, 알고리즘, 프로그래밍, 하드웨어와 소프트웨어 시스템, 정보 처리의 응용을 포괄하는 넓은 학문 분야를 가리킨다.

한국어에서는 **컴퓨터 과학**, **전산학**, **컴퓨터공학**이라는 말이 문맥에 따라 함께 쓰인다. 이 문서에서는 computer science에 대응하는 학문 분야를 주로 **컴퓨터 과학**이라고 부른다. 다만 대학 학과명이나 교육과정에서는 “컴퓨터공학”이라는 명칭이 같은 범위를 넓게 가리키는 경우도 있으므로, 문맥에 따라 구별이 필요하다.

영어권에서 computer engineering은 보통 컴퓨터 공학, 즉 하드웨어·소프트웨어·통신 요소를 통합한 컴퓨터 기반 시스템의 설계와 구현에 중점을 두는 분야를 가리킨다. 반면 computer science는 계산의 이론적 기초, 알고리즘, 프로그래밍 기법, 운영체제, 인공지능 등 더 넓은 계산 원리를 다룬다.

### 범위

컴퓨터 과학의 이론적 범위에는 계산 가능성 이론, 오토마타 이론, 형식 언어, 계산 복잡도 이론, 알고리즘 분석 등이 포함된다. 이러한 분야는 “무엇이 계산 가능한가”, “어떤 계산이 효율적인가”, “계산 과정은 어떤 수학적 모델로 표현할 수 있는가”와 같은 질문을 다룬다.

컴퓨터 과학의 시스템적 범위에는 컴퓨터 구조, 운영체제, 컴파일러, 컴퓨터 네트워크, 분산 컴퓨팅, 데이터베이스, 컴퓨터 보안 등이 포함된다. 이들 분야는 계산을 실제 장치와 소프트웨어 시스템 위에서 신뢰성 있고 효율적으로 실행하는 방법을 연구한다.

컴퓨터 과학의 응용적 범위에는 인공지능, 기계 학습, 컴퓨터 그래픽스, 인간-컴퓨터 상호 작용, 정보 검색, 데이터 마이닝, 생물정보학, 계산과학 등이 포함된다. 이러한 분야에서는 알고리즘과 계산 시스템을 사용하여 지능적 행동, 시각적 표현, 대규모 자료 분석, 과학적 모의실험 등 구체적인 문제를 해결한다.

현대 교육과정에서는 컴퓨터 과학의 지식 영역을 알고리즘 기초, 컴퓨터 구조, 인공지능, 데이터 관리, 프로그래밍 언어, 그래픽스와 상호작용, 수학·통계 기초, 네트워크, 운영체제, 병렬·분산 컴퓨팅, 보안, 소프트웨어 공학 등으로 나누어 설명하기도 한다. 이러한 분류는 컴퓨터 과학이 하나의 단일 기술이 아니라, 여러 하위 분야가 서로 연결된 학문임을 보여 준다.

## 역사

컴퓨터 과학의 역사는 현대적인 디지털 컴퓨터의 등장보다 앞선다. 사람들은 오래전부터 주판과 같은 계산 도구를 사용했고, 계산을 일정한 절차로 수행하는 방법도 발전시켜 왔다. 이러한 절차적 계산 방법은 오늘날의 알고리즘(영어: algorithm) 개념으로 이어졌으며, 컴퓨터 과학의 역사에서 하드웨어보다 더 오래된 뿌리를 이룬다.

다만 컴퓨터 과학의 역사는 계산 장치의 역사와 완전히 같지는 않다. 계산 가능성, 알고리즘, 정보 이론, 프로그래밍 언어처럼 실제 장치와 독립적으로 발전한 이론도 중요한 일부이다.

### 초기 계산 도구와 자동 계산

근대 이전의 계산 도구는 주로 산술 계산을 빠르고 정확하게 수행하기 위한 것이었다. 주판, 계산자, 기계식 계산기(영어: mechanical calculator)는 모두 수치 계산을 도와 주는 장치였지만, 임의의 절차를 일반적으로 표현하고 실행하는 현대적 의미의 컴퓨터와는 구별된다. 그러나 이러한 장치들은 계산을 물리적 과정으로 구현할 수 있다는 생각을 발전시키는 데 기여했다.

19세기에는 계산을 기계적으로 자동화하려는 시도가 더욱 구체화되었다. 찰스 배비지는 차분기관(영어: Difference Engine)과 해석기관(영어: Analytical Engine)을 구상했으며, 특히 해석기관은 계산 절차를 기계가 따를 수 있는 명령으로 표현한다는 점에서 중요한 의미를 가진다. 에이다 러브레이스는 배비지의 해석기관에 관한 글에서 기계가 일련의 명령, 곧 프로그램(영어: program)을 따라 복잡한 계산을 수행할 수 있음을 설명했으며, 흔히 초기의 컴퓨터 프로그래밍 개념과 관련되어 언급된다.

19세기 말과 20세기 초에는 천공 카드(영어: punched card)와 표 작성 기계가 통계 처리와 행정 업무에 사용되었다. 허먼 홀러리스의 표 작성 장치는 대규모 자료를 기계적으로 처리할 수 있음을 보여 주었고, 이러한 흐름은 뒤에 IBM과 같은 기업의 계산 장비 및 정보 처리 기술로 이어졌다. 이 시기의 장치들은 현대 컴퓨터 과학의 이론을 직접 만든 것은 아니지만, 계산과 자료 처리가 산업적·제도적으로 중요해지는 배경을 형성했다.

### 계산 이론의 형성

20세기 초에는 수리논리학과 기초론의 문제에서 계산의 본질을 묻는 질문이 제기되었다. 특히 어떤 절차가 “효과적으로 계산 가능하다”는 말이 무엇을 뜻하는지, 모든 수학적 명제를 판정하는 일반적인 절차가 존재하는지와 같은 문제가 중심이 되었다. 이러한 논의는 계산 가능성 이론(영어: computability theory)과 계산 이론의 출발점이 되었다.

앨런 튜링은 1936년에 튜링 기계(영어: Turing machine)라는 추상적 계산 모델을 제시하였다. 튜링 기계는 실제 기계라기보다 계산 절차의 핵심 구조를 추상화한 수학적 모형이며, 이후 디지털 컴퓨터의 이론적 기초를 설명하는 데 중요한 역할을 했다. 같은 시기 알론조 처치의 람다 계산(영어: lambda calculus)도 계산 가능한 함수의 개념을 형식화하였고, 두 접근은 오늘날 처치-튜링 명제(영어: Church–Turing thesis)와 관련되어 설명된다.

계산 이론의 형성은 컴퓨터 과학을 단순한 기계 제작이나 계산 기술에서 구별되게 만들었다. 정지 문제와 같은 결과는 어떤 문제는 원리적으로 알고리즘으로 해결할 수 없음을 보여 주었고, 이후 계산 복잡도 이론은 계산 가능한 문제들 사이에서도 필요한 시간과 기억 공간이 크게 다를 수 있음을 연구하게 되었다. 이러한 이론적 전통은 오늘날에도 컴퓨터 과학의 핵심 기반으로 남아 있다.

### 전자식 컴퓨터와 정보 이론

제2차 세계 대전 전후에는 전자 공학의 발전과 함께 전자식 계산 장치가 등장하였다. ENIAC은 초기의 전자식 범용 디지털 컴퓨터(영어: general-purpose electronic digital computer) 가운데 하나로 알려져 있으며, 이후 전자식 컴퓨터는 과학 계산, 군사 계산, 산업 계산에 빠르게 사용되기 시작하였다.

이 시기에는 프로그램과 자료를 같은 기억장치에 저장하는 저장 프로그램 방식(영어: stored-program concept)도 정식화되었다. 이 방식은 명령을 배선이나 외부 장치에 고정하지 않고 기억 장치 안에 저장하여, 같은 기계가 다양한 작업을 수행할 수 있게 한다. 이러한 발상은 폰 노이만 구조와 결합하여 현대 컴퓨터 구조의 기본 원리로 자리 잡았다.

클로드 섀넌의 연구는 정보 이론(영어: information theory)의 형성에 결정적인 역할을 했다. 정보 이론은 메시지의 의미와 별개로 신호의 전달, 부호화, 잡음, 통신 용량을 수학적으로 다루며, 통신 공학, 부호 이론, 데이터 압축, 암호학 등 여러 분야와 연결되었다.

### 학문 분야로서의 성립

1940년대 후반부터 컴퓨터가 단순한 계산 장치를 넘어 과학 연구와 정보 처리의 도구로 쓰이면서, 계산을 일반적으로 연구하는 학문 분야가 형성되기 시작하였다. IBM은 1945년에 컬럼비아 대학교에 왓슨 과학 계산 연구소(영어: Watson Scientific Computing Laboratory)를 열었고, 이와 같은 연구 환경은 학계와 산업계가 계산 기술을 함께 발전시키는 데 영향을 주었다.

1950년대에는 컴퓨터 과학 교육이 대학 안에서 별도의 과정으로 정착하기 시작하였다. 케임브리지 대학교의 컴퓨터 연구소는 1953년에 수치해석과 자동 계산 디플로마 과정(영어: Diploma in Numerical Analysis and Automatic Computing)을 시작했으며, 이는 영국에서 제도화된 초기 컴퓨팅 교육 과정 가운데 하나였다.

미국에서는 1962년에 퍼듀 대학교에 컴퓨터 과학과가 설치되었다. 이 시기에는 프로그래밍 언어, 운영체제, 컴퓨터 구조, 수치해석, 알고리즘 등의 교육과 연구가 점차 하나의 학문 분야로 묶였고, 컴퓨터 과학은 수학이나 전기공학의 부속 영역이 아니라 독립적인 학과와 교육과정을 갖춘 분야로 자리 잡기 시작하였다.

### 현대의 발전

1960년대와 1970년대에는 컴파일러, 운영체제, 데이터베이스, 컴퓨터 네트워크, 프로그래밍 언어론 같은 분야가 빠르게 발전하였다. 동시에 계산 복잡도 이론과 형식 언어 이론도 성장하면서, 컴퓨터 과학은 실제 시스템을 만드는 기술과 계산의 수학적 한계를 연구하는 이론을 함께 포함하는 학문이 되었다.

1970년대 이후 마이크로프로세서와 개인용 컴퓨터의 보급은 컴퓨터 과학의 사회적 영향력을 크게 넓혔다. 컴퓨터가 대학과 연구소의 특수 장비에서 사무실과 가정의 도구로 확산되면서, 소프트웨어 공학, 인간-컴퓨터 상호 작용, 컴퓨터 그래픽스, 정보 검색 같은 분야의 중요성도 커졌다.

1990년대 이후 인터넷과 월드 와이드 웹의 보급은 컴퓨터 과학의 연구 대상을 더욱 확장하였다. 분산 컴퓨팅, 컴퓨터 보안, 암호학, 데이터베이스, 검색 엔진, 사회 연결망 분석은 대규모 네트워크와 자료를 다루는 핵심 분야가 되었고, 컴퓨터 과학은 정보 사회의 기반 학문으로 자리 잡았다.

21세기에는 인공지능, 기계 학습, 데이터 과학, 클라우드 컴퓨팅, 양자 컴퓨팅, 생물정보학, 계산과학 등이 빠르게 성장하였다. 현대 컴퓨터 과학은 알고리즘과 계산 이론에서 출발한 원리를 바탕으로, 대규모 자료와 복잡한 시스템, 자동화 가능한 지능적 행위의 한계와 가능성을 함께 탐구하는 학문으로 발전하고 있다.

## 핵심 개념

컴퓨터 과학의 여러 분야는 서로 다른 문제를 다루지만, 그 바탕에는 몇 가지 공통된 개념이 있다. 대표적으로 계산, 알고리즘, 정보, 자료 구조, 추상화, 프로그래밍 언어, 컴퓨터 시스템이 있다. 이 개념들은 이론 컴퓨터 과학에서 실제 소프트웨어와 하드웨어 시스템에 이르기까지 넓게 사용된다.

### 계산과 계산 가능성

**계산** 또는 **컴퓨테이션**(영어: computation)은 어떤 입력으로부터 정해진 규칙이나 절차를 따라 출력을 얻는 과정이다. 컴퓨터 과학에서는 실제 전자식 컴퓨터에서 일어나는 계산뿐 아니라, 튜링 기계(영어: Turing machine), 람다 대수(영어: lambda calculus), 오토마타와 같은 추상적 계산 모델도 연구한다. 이러한 모델은 계산의 본질을 기계의 구체적인 형태와 분리하여 분석하게 해 준다.

**계산 가능성**(영어: computability)은 어떤 문제가 원리적으로 알고리즘에 의해 풀릴 수 있는지를 묻는 개념이다. 계산 가능성 이론은 어떤 함수나 문제가 계산 가능한지, 어떤 문제는 어떤 절차를 사용해도 해결할 수 없는지를 연구한다. 대표적인 예로 정지 문제는 임의의 프로그램이 언젠가 종료하는지를 판정하는 일반 알고리즘이 존재하지 않음을 보여 준다.

이 관점에서 컴퓨터 과학은 단순히 빠른 계산 방법을 찾는 학문이 아니라, 계산으로 해결할 수 있는 것과 해결할 수 없는 것의 경계를 연구하는 학문이기도 하다. 이러한 질문은 수리논리학, 형식 언어, 오토마타 이론, 계산 이론과 깊게 연결된다.

### 알고리즘과 복잡도

**알고리즘**(영어: algorithm)은 주어진 문제를 해결하기 위한 명확하고 유한한 절차이다. 예를 들어 수를 정렬하는 절차, 두 지점 사이의 최단 경로를 찾는 절차, 데이터베이스에서 원하는 항목을 검색하는 절차는 모두 알고리즘으로 표현될 수 있다. 알고리즘의 설계와 분석은 컴퓨터 과학의 중심 주제이다.

알고리즘을 평가할 때에는 단순히 정답을 내는지만이 아니라, 얼마나 효율적으로 동작하는지도 중요하다. 이를 위해 시간 복잡도(영어: time complexity)와 공간 복잡도(영어: space complexity)를 사용한다. 시간 복잡도는 입력 크기가 커질 때 필요한 계산 단계 수가 어떻게 증가하는지를 나타내고, 공간 복잡도는 필요한 기억 공간의 양을 나타낸다.

계산 복잡도 이론은 문제를 푸는 데 필요한 계산 자원의 양을 기준으로 문제들을 분류한다. 예를 들어 P-NP 문제는 효율적으로 검증할 수 있는 모든 문제가 효율적으로 풀 수도 있는지를 묻는 문제이다. 이처럼 복잡도 이론은 알고리즘의 한계와 효율성의 본질을 다룬다.

### 정보와 표현

**정보**(영어: information)는 컴퓨터 과학에서 계산의 대상이자 결과이다. 정보는 비트(영어: bit), 수, 문자, 이미지, 소리, 그래프, 논리식 등 다양한 형태로 표현될 수 있다. 컴퓨터 시스템에서는 이러한 정보가 일정한 규칙에 따라 부호화(영어: encoding)되어 저장되고 처리된다.

정보를 어떻게 표현하느냐는 계산의 효율성과 가능성에 큰 영향을 준다. 예를 들어 같은 수라도 이진수, 십진수, 부동소수점 수로 표현할 수 있고, 같은 자료도 배열, 연결 리스트, 해시 테이블, 트리, 그래프 등 서로 다른 자료 구조(영어: data structure)로 저장할 수 있다. 자료 구조는 알고리즘이 자료에 접근하고 수정하는 방식을 결정한다.

정보 이론은 정보량, 부호화, 압축, 통신의 한계를 수학적으로 연구한다. 데이터 압축, 오류 검출과 정정, 암호학, 통신 공학은 모두 정보의 표현과 전달 방식에 관한 문제와 관련된다.

### 프로그램과 프로그래밍 언어

**프로그램**(영어: program)은 알고리즘이나 계산 절차를 컴퓨터가 실행할 수 있는 형태로 표현한 것이다. 프로그램은 일반적으로 프로그래밍 언어(영어: programming language)로 작성되며, 프로그래밍 언어는 계산을 표현하기 위한 문법과 의미를 제공한다.

프로그래밍 언어론은 프로그래밍 언어의 구조, 의미, 타입 체계, 실행 방식, 표현력을 연구한다. 예를 들어 명령형 프로그래밍, 함수형 프로그래밍, 객체 지향 프로그래밍, 논리형 프로그래밍은 계산을 서로 다른 방식으로 표현하는 프로그래밍 패러다임(영어: programming paradigm)이다.

프로그램은 단순히 작성되는 것만으로 충분하지 않다. 프로그램이 명세(영어: specification)를 만족하는지, 오류 없이 실행되는지, 보안상 취약점이 없는지, 유지보수가 가능한지도 중요하다. 이를 위해 소프트웨어 테스트, 정형 기법, 프로그램 검증, 컴파일러 이론 등이 연구된다.

### 계산 시스템

컴퓨터 과학에서 계산은 추상적 알고리즘으로만 존재하지 않고, 실제 컴퓨터 시스템에서 실행된다. 계산 시스템은 중앙 처리 장치, 기억 장치, 입출력, 운영체제, 컴퓨터 네트워크, 데이터베이스, 응용 소프트웨어 등 여러 층으로 이루어진다. 각 층은 아래층의 세부 사항을 추상화하여 위층에 서비스를 제공한다.

**컴퓨터 구조**(영어: computer architecture)는 컴퓨터 하드웨어의 구성과 동작 원리를 연구한다. 운영체제는 프로세스, 메모리, 파일, 입출력 장치 같은 자원을 관리하고, 컴퓨터 네트워크는 여러 컴퓨터가 정보를 주고받을 수 있게 한다. 분산 컴퓨팅은 여러 계산 장치가 협력하여 하나의 작업을 수행하는 방법을 연구한다.

계산 시스템에서는 성능뿐 아니라 신뢰성, 보안, 확장성, 사용성도 중요하다. 컴퓨터 보안은 시스템과 정보를 무단 접근이나 변조로부터 보호하는 방법을 다루고, 인간-컴퓨터 상호 작용은 사람이 시스템을 효과적이고 안전하게 사용할 수 있도록 인터페이스와 상호작용 방식을 연구한다.

### 자동화와 인공지능

컴퓨터 과학의 중요한 질문 가운데 하나는 무엇을 자동화할 수 있는가이다. 자동화(영어: automation)는 사람이 수행하던 계산, 판단, 제어, 탐색, 계획 등의 과정을 기계나 프로그램이 수행하도록 만드는 것이다. 이 질문은 계산 가능성, 알고리즘의 효율성, 시스템 구현 가능성 모두와 관련된다.

**인공지능**(영어: artificial intelligence)은 문제 해결, 추론, 학습, 지각, 계획, 언어 처리와 같은 지능적 행위를 계산적으로 구현하려는 분야이다. 기계 학습은 자료로부터 규칙이나 패턴을 학습하는 방법을 연구하며, 컴퓨터 비전과 자연어 처리는 각각 영상 정보와 언어 정보를 처리하는 방법을 다룬다.

자동화는 단순히 사람의 작업을 기계로 대체하는 것에 그치지 않는다. 어떤 작업이 형식화될 수 있는지, 어떤 정보가 필요하며 어떤 판단이 가능한지, 자동화된 시스템이 사회적·윤리적으로 어떤 영향을 갖는지도 함께 고려해야 한다. 이러한 문제는 뒤의 분야와 응용 절에서 더 구체적으로 다룬다.

## 연구 방법과 관점

컴퓨터 과학은 수학처럼 형식적 정의와 증명을 사용하고, 공학처럼 실제 시스템을 설계·구현하며, 일부 분야에서는 실험과 측정을 통해 시스템의 성능과 동작을 분석한다. 따라서 컴퓨터 과학의 연구 방법은 하나로 환원되기 어렵고, 보통 이론, 추상화 또는 모델링, 설계, 실험이 함께 사용된다.

### 이론적 접근

**이론적 접근**(영어: theoretical approach)은 계산과 정보를 수학적 대상으로 형식화하고, 그 성질을 증명을 통해 밝히는 방법이다. 예를 들어 계산 가능성 이론은 어떤 문제가 알고리즘으로 해결될 수 있는지를 연구하고, 계산 복잡도 이론은 문제를 해결하는 데 필요한 시간과 기억 공간을 분석한다.

이론적 접근에서는 튜링 기계, 오토마타, 형식 언어, 람다 대수, 논리 회로와 같은 추상적 모델을 사용한다. 이러한 모델은 실제 컴퓨터의 세부 구조를 모두 반영하지는 않지만, 계산 과정의 핵심 성질을 명확하게 분석할 수 있게 한다.

알고리즘 연구에서도 이론적 방법은 중요하다. 알고리즘이 항상 올바른 결과를 내는지 증명하고, 입력 크기에 따라 실행 시간이 어떻게 증가하는지 분석하며, 어떤 문제에 대해서는 효율적인 알고리즘이 존재하지 않을 가능성을 탐구한다. 이때 빅 O 표기법, 귀납법, 그래프 이론, 확률론 등이 자주 사용된다.

### 추상화와 모델링

**추상화**(영어: abstraction)는 복잡한 대상에서 중요한 구조만 남기고 세부 구현을 숨기는 방법이다. 컴퓨터 과학에서는 자료 구조, 프로그래밍 언어, 운영체제, 컴퓨터 네트워크 등 거의 모든 층위에서 추상화가 사용된다. 예를 들어 파일, 프로세스, 객체, 함수, 데이터베이스 테이블은 모두 실제 하드웨어나 자료 배치의 세부 사항을 감춘 추상적 개념이다.

**모델링**(영어: modeling)은 실제 또는 가상의 계산 과정을 더 단순한 구조로 표현하는 방법이다. 그래프는 관계와 네트워크를 표현하는 모델이고, 확률 모형은 불확실성을 포함한 계산 과정을 나타내며, 유한 상태 기계는 상태 변화가 제한된 시스템을 분석하는 데 쓰인다.

추상화와 모델링은 설계와 분석을 분리할 수 있게 한다. 예를 들어 컴파일러는 고급 프로그래밍 언어의 프로그램을 더 낮은 수준의 기계 코드로 바꾸지만, 프로그래머는 대부분의 경우 기계어의 세부 사항을 직접 다루지 않는다. 이처럼 서로 다른 추상화 층위(영어: level of abstraction)를 나누는 것은 복잡한 계산 시스템을 이해하고 구축하는 기본 방법이다.

### 실험적·경험적 접근

**실험적 접근**(영어: experimental approach)은 알고리즘이나 시스템을 실제로 구현하고, 그 동작을 측정하여 성능과 성질을 평가하는 방법이다. 컴퓨터 시스템, 운영체제, 컴퓨터 네트워크, 데이터베이스 연구에서는 이론적 분석만으로 충분하지 않은 경우가 많으며, 실제 환경이나 모의 환경에서 실험을 수행한다.

컴퓨터 과학에서 실험은 벤치마크(영어: benchmark), 시뮬레이션(영어: simulation), 사용자 연구, 로그 분석, 대규모 자료 실험 등 여러 형태를 가진다. 예를 들어 새 정렬 알고리즘이나 기계 학습 모델을 제안할 때에는 입력 크기, 자료의 특성, 비교 대상, 평가 지표를 정하고 실제 실행 결과를 분석한다.

경험적 연구에서는 통계학과 실험 설계도 중요하다. 실험 결과가 우연한 사례에 의존하지 않도록 적절한 데이터셋과 반복 실험을 사용해야 하며, 다른 연구자가 결과를 확인할 수 있도록 코드, 자료, 실험 조건을 명확히 제시하는 재현성(영어: reproducibility)도 중요하다.

### 설계와 구현

**설계**(영어: design)는 주어진 요구를 만족하는 계산 절차나 시스템의 구조를 만드는 활동이다. 컴퓨터 과학에서 설계는 단순히 구현 전에 그림을 그리는 단계가 아니라, 성능, 정확성, 보안, 확장성, 유지보수성 사이의 균형을 정하는 지적 활동이다. 소프트웨어 공학과 컴퓨터 공학에서는 이러한 설계 관점이 특히 중요하다.

**구현**(영어: implementation)은 설계된 알고리즘이나 시스템을 실제 프로그램, 하드웨어, 네트워크, 데이터베이스 등의 형태로 실현하는 과정이다. 같은 알고리즘이라도 구현 방식에 따라 성능과 안정성이 크게 달라질 수 있으며, 같은 소프트웨어라도 사용하는 언어, 라이브러리, 운영체제, 하드웨어 구조에 따라 동작 특성이 달라질 수 있다.

설계와 구현은 이론적 접근과 대립하지 않는다. 예를 들어 분산 컴퓨팅 시스템을 설계할 때에는 합의 알고리즘의 이론적 한계, 네트워크 지연, 장애 허용성, 보안 요구, 실제 배포 환경이 함께 고려된다. 따라서 컴퓨터 과학의 설계 활동은 수학적 분석과 공학적 판단을 동시에 필요로 한다.

### 정형화와 검증

**정형화**(영어: formalization)는 자연어로 된 요구나 직관적 개념을 형식 언어나 수리논리학의 언어로 명확히 표현하는 과정이다. 컴퓨터 과학에서는 알고리즘, 프로그램, 프로토콜, 시스템 요구사항을 명세(영어: specification)로 나타내고, 그 명세를 기준으로 구현이 올바른지 판단한다.

**검증**(영어: verification)은 시스템이 주어진 명세를 만족하는지 확인하는 과정이다. 정형 기법(영어: formal methods)은 수학적 논리와 형식 모델을 사용하여 프로그램이나 하드웨어의 성질을 증명하거나 검사한다. 대표적인 방법으로는 정리 증명(영어: theorem proving), 모델 검사(영어: model checking), 타입 체계(영어: type system)를 이용한 정적 분석 등이 있다.

정형 검증은 소프트웨어 테스트와 구별된다. 테스트는 선택한 입력과 상황에서 시스템을 실행하여 오류를 찾는 방법이고, 정형 검증은 가능한 모든 경우 또는 명세로 표현된 전체 상태 공간에 대해 성질을 보이려 한다. 실제 개발에서는 두 방법이 상호 보완적으로 사용되며, 특히 항공우주, 암호학, 운영체제, 임베디드 시스템처럼 오류 비용이 큰 분야에서 정형 기법의 중요성이 크다.

### 학문적 성격

컴퓨터 과학은 수학, 공학, 과학의 성격을 모두 가진다. 이론 컴퓨터 과학은 형식적 정의와 증명을 중시하고, 소프트웨어 공학과 컴퓨터 시스템 연구는 설계와 구현을 중시하며, 인공지능과 인간-컴퓨터 상호 작용 같은 분야는 실험과 경험적 평가를 많이 사용한다.

이러한 복합적 성격 때문에 컴퓨터 과학의 연구 결과는 정리, 알고리즘, 프로그램, 시스템, 데이터셋, 실험 결과, 설계 원칙 등 다양한 형태로 나타난다. 어떤 연구가 좋은 연구인지 판단할 때에도 정확성, 효율성, 일반성, 구현 가능성, 실험적 성능, 사용성, 사회적 영향 등 여러 기준이 함께 고려된다.

따라서 컴퓨터 과학은 단순한 프로그래밍 기술이나 특정 기계의 사용법으로 한정되지 않는다. 컴퓨터 과학의 연구 방법은 계산 가능한 것의 한계를 밝히는 이론적 분석에서부터, 실제 사회에서 작동하는 안전하고 신뢰할 수 있는 계산 시스템을 만드는 설계와 검증에 이르기까지 넓게 걸쳐 있다.

## 분야

컴퓨터 과학의 하위 분야는 연구 대상과 방법에 따라 여러 갈래로 나뉜다. 어떤 분야는 계산의 수학적 한계를 연구하고, 어떤 분야는 컴퓨터 시스템의 설계와 구현을 다루며, 또 다른 분야는 정보와 자료를 분석하거나 인간과 컴퓨터의 상호작용을 연구한다. 이 구분은 엄격한 경계라기보다 편의적인 분류이며, 실제 연구와 산업에서는 여러 분야가 서로 겹치는 경우가 많다.

### 이론 컴퓨터 과학

**이론 컴퓨터 과학**(영어: theoretical computer science)은 계산과 정보의 수학적 성질을 연구하는 분야이다. 이 분야는 실제 기계의 세부 구현보다 계산 모델, 알고리즘의 한계, 문제의 난이도, 형식적 표현과 증명에 관심을 둔다. 수학, 논리학, 조합론, 확률론과 밀접하게 연결된다.

계산 이론은 어떤 문제가 계산 가능한지, 계산은 어떤 형식적 모델로 표현될 수 있는지를 연구한다. 그 하위 분야로는 오토마타 이론, 형식 언어, 계산 가능성 이론, 계산 복잡도 이론 등이 있다. 예를 들어 계산 가능성 이론은 원리적으로 알고리즘으로 해결할 수 없는 문제를 다루고, 계산 복잡도 이론은 계산 가능한 문제를 해결하는 데 필요한 시간과 공간의 양을 분석한다.

정보 이론과 부호 이론도 이론적 성격이 강한 분야이다. 정보 이론은 정보량, 압축, 통신의 한계 등을 연구하고, 부호 이론은 오류 검출과 정정, 자료 전송의 신뢰성, 저장 장치의 안정성과 관련된다. 암호학은 수학적 난해성을 이용하여 안전한 통신과 인증을 가능하게 하는 방법을 연구한다.

최근에는 양자 컴퓨팅과 양자 정보 이론도 이론 컴퓨터 과학의 중요한 주제가 되었다. 양자 계산 모델은 고전적인 계산 모델과 다른 자원과 연산을 사용하며, 특정 문제에서 고전 알고리즘보다 빠른 알고리즘이 가능한지와 같은 질문을 다룬다.

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

알고리즘과 자료 구조는 컴퓨터 과학의 중심 분야이다. 알고리즘은 문제를 해결하기 위한 명확한 절차이고, 자료 구조는 정보를 효율적으로 저장하고 접근하기 위한 조직 방식이다. 두 분야는 서로 밀접하게 연결되어 있으며, 적절한 자료 구조를 선택하면 알고리즘의 성능이 크게 달라질 수 있다.

알고리즘 연구에서는 정렬, 탐색, 그래프 알고리즘, 문자열 알고리즘, 수치 알고리즘, 조합 최적화 알고리즘 등이 다루어진다. 알고리즘의 성능은 보통 시간 복잡도와 공간 복잡도로 분석하며, 입력 크기가 커질 때 계산량이 어떻게 증가하는지가 중요하다.

자료 구조의 대표적인 예로는 배열, 연결 리스트, 스택, 큐, 힙, 해시 테이블, 트리, 그래프 등이 있다. 이들은 자료를 저장하는 방식뿐 아니라, 삽입·삭제·검색·순회 같은 연산의 비용을 결정한다.

이 분야에는 무작위 알고리즘, 근사 알고리즘(영어: approximation algorithm), 온라인 알고리즘(영어: online algorithm), 매개변수화 알고리즘(영어: parameterized algorithm)처럼 특수한 계산 환경이나 난해한 문제를 다루는 방법도 포함된다. 이러한 연구는 계산 복잡도 이론과 최적화에도 깊게 연결된다.

### 프로그래밍 언어와 정형 기법

프로그래밍 언어 분야는 계산 과정을 어떤 언어로 표현하고, 그 표현이 어떤 의미를 가지며, 어떻게 실행되는지를 연구한다. 주요 주제로는 언어의 문법과 의미, 타입 이론, 형식 의미론(영어: formal semantics), 실행 시점의 동작, 메모리 관리, 병행성과 예외 처리 등이 있다.

컴파일러 연구는 고급 프로그래밍 언어로 작성된 프로그램을 기계가 실행할 수 있는 코드로 변환하는 방법을 다룬다. 컴파일러는 구문 분석, 의미 분석, 최적화, 코드 생성 등 여러 단계를 거치며, 오토마타 이론, 그래프 이론, 컴퓨터 구조와도 관련된다.

정형 기법(영어: formal methods)은 프로그램이나 하드웨어 시스템의 성질을 수학적으로 명세하고 검증하는 방법이다. 정리 증명(영어: theorem proving), 모델 검사(영어: model checking), 정적 분석(영어: static analysis), 타입 체계를 이용한 오류 방지 등이 여기에 포함된다.

이 분야는 소프트웨어 테스트와도 관련되지만, 테스트가 특정 실행 사례에서 오류를 찾는 데 비해 형식 기법은 명세된 조건이 모든 경우에 성립하는지를 보이려 한다. 따라서 운영체제, 암호학, 임베디드 시스템, 안전 필수 시스템에서 중요한 역할을 한다.

### 컴퓨터 시스템과 보안

컴퓨터 시스템 분야는 계산이 실제 하드웨어와 소프트웨어 위에서 어떻게 수행되는지를 연구한다. 이 분야에는 컴퓨터 구조, 운영체제, 컴퓨터 네트워크, 분산 컴퓨팅, 병렬 컴퓨팅, 임베디드 시스템, 실시간 컴퓨팅 등이 포함된다.

컴퓨터 구조는 중앙 처리 장치, 기억 장치, 명령어 집합, 캐시, 파이프라인, 병렬 처리 장치 같은 하드웨어의 구성과 동작 원리를 다룬다. 운영체제는 프로세스, 메모리, 파일, 입출력 장치, 권한 관리를 통해 여러 프로그램이 하나의 시스템 자원을 안정적으로 사용할 수 있도록 한다.

컴퓨터 네트워크는 여러 컴퓨터가 정보를 주고받는 구조와 프로토콜을 연구한다. 인터넷, 라우팅, 혼잡 제어, 무선 통신, 데이터센터 네트워크는 모두 네트워크 연구의 대상이다. 분산 컴퓨팅은 여러 컴퓨터가 협력하여 하나의 계산을 수행하는 방법을 다루며, 장애 허용성, 합의, 복제, 일관성 같은 문제가 중요하다.

컴퓨터 보안과 암호학은 정보와 시스템을 무단 접근, 변조, 파괴, 유출로부터 보호하는 방법을 연구한다. 보안 분야는 암호 프로토콜, 접근 제어, 운영체제 보안, 네트워크 보안, 웹 보안, 악성 코드 분석, 보안 취약점 분석 등을 포함한다. 현대 컴퓨터 시스템에서는 보안이 별도의 부가 기능이 아니라 설계 단계부터 고려해야 할 핵심 요구사항이다.

### 소프트웨어 공학

소프트웨어 공학(영어: software engineering)은 대규모 소프트웨어를 체계적으로 개발하고 유지하기 위한 원리와 방법을 연구한다. 소프트웨어는 단순히 프로그램 코드만을 뜻하지 않고, 요구사항, 설계 문서, 시험, 배포, 운영, 유지보수, 사용자 지원까지 포함하는 복합적인 산출물이다.

소프트웨어 공학의 주요 주제에는 요구공학(영어: requirements engineering), 소프트웨어 설계, 소프트웨어 테스트, 형상 관리, 소프트웨어 유지보수, 품질 보증, 프로젝트 관리, 개발 방법론이 있다. 특히 여러 사람이 장기간 개발하는 소프트웨어에서는 코드의 정확성뿐 아니라 변경 가능성, 재사용성, 신뢰성, 보안성도 중요하다.

애자일 소프트웨어 개발, 지속적 통합(영어: continuous integration), 지속적 배포(영어: continuous deployment), 데브옵스(영어: DevOps) 같은 방법은 소프트웨어 개발과 운영을 더 빠르고 안정적으로 연결하려는 실천적 접근이다. 이러한 주제들은 소프트웨어 공학의 실무적 성격을 잘 보여 준다.

### 데이터 관리와 정보 검색

데이터베이스 분야는 대량의 자료를 구조화하여 저장, 검색, 수정, 관리하는 방법을 연구한다. 데이터베이스 관리 시스템은 자료의 일관성, 동시성 제어, 장애 복구, 질의 최적화, 보안 등을 제공한다. 관계형 데이터베이스, 객체 데이터베이스, 그래프 데이터베이스, 분산 데이터베이스는 서로 다른 자료 모델을 사용한다.

정보 검색(영어: information retrieval)은 대규모 문서나 자료 집합에서 사용자가 원하는 정보를 찾아내는 방법을 연구한다. 검색 엔진은 정보 검색의 대표적인 응용이며, 색인 구조, 순위화, 질의 처리, 문서 유사도 계산, 사용자 피드백 등이 주요 주제이다.

데이터 마이닝과 빅 데이터 분석은 대규모 자료에서 의미 있는 패턴이나 지식을 찾는 방법을 다룬다. 이 분야는 통계학, 기계 학습, 데이터베이스, 정보 시각화와 밀접하게 연결된다. 자료의 크기뿐 아니라 다양성, 속도, 신뢰성도 중요한 문제가 된다.

최근에는 데이터 관리와 인공지능의 경계가 점점 가까워지고 있다. 대규모 언어 모델, 추천 시스템, 지식 그래프, 실시간 분석 시스템은 효율적인 자료 저장·검색·처리와 학습 알고리즘을 함께 필요로 한다.

### 인공지능과 기계 학습

인공지능(영어: artificial intelligence)은 문제 해결, 추론, 학습, 계획, 지각, 언어 이해와 같은 지능적 행위를 계산적으로 구현하려는 분야이다. 초기 인공지능은 기호와 규칙을 이용한 추론에 중점을 두었고, 현대 인공지능은 통계적 방법과 기계 학습을 폭넓게 사용한다.

기계 학습(영어: machine learning)은 자료로부터 규칙이나 패턴을 학습하는 알고리즘을 연구한다. 지도 학습, 비지도 학습, 강화 학습은 대표적인 학습 방식이다. 인공 신경망과 딥 러닝은 대규모 자료와 계산 자원을 바탕으로 영상, 음성, 언어, 게임, 과학계산 등 여러 분야에서 활용된다.

자연어 처리는 인간의 언어를 컴퓨터가 분석하고 생성하는 방법을 연구하고, 컴퓨터 비전은 이미지와 동영상을 이해하고 처리하는 방법을 다룬다. 로봇공학은 센서, 제어, 계획, 학습을 결합하여 물리적 세계에서 동작하는 시스템을 만든다.

인공지능 연구에는 기술적 성능뿐 아니라 설명 가능성, 공정성, 안전성, 개인정보 보호, 사회적 영향도 중요하다. 이러한 문제는 인공지능 윤리와 컴퓨터 과학의 사회적 책임 논의로 이어진다.

### 인간 중심·시각·상호작용 분야

인간-컴퓨터 상호 작용(영어: human-computer interaction)은 사람이 컴퓨터 시스템을 어떻게 사용하고 이해하는지, 그리고 더 나은 사용자 인터페이스를 어떻게 설계할 수 있는지를 연구한다. 이 분야는 컴퓨터 과학뿐 아니라 심리학, 디자인, 인지과학, 사회학과도 관련된다.

컴퓨터 그래픽스는 디지털 영상을 생성하고 조작하는 방법을 연구한다. 2차원·3차원 그래픽스, 렌더링(영어: rendering), 애니메이션, 물리 기반 시뮬레이션, 가상 환경은 모두 이 분야의 주제이다. 컴퓨터 그래픽스는 영화, 게임, 시뮬레이션, 설계 도구, 의학 영상 등에서 널리 사용된다.

이미지 처리와 컴퓨터 비전은 모두 시각 정보를 다루지만 초점이 다르다. 이미지 처리는 영상을 개선하거나 변환하는 방법을 주로 다루고, 컴퓨터 비전은 영상으로부터 물체, 장면, 움직임, 의미를 인식하는 데 중점을 둔다. 두 분야는 인공지능과 신호 처리와도 연결된다.

데이터 시각화는 복잡한 자료를 사람이 이해하기 쉬운 시각적 형태로 표현하는 방법을 연구한다. 가상 현실과 증강 현실은 컴퓨터가 만든 정보와 사용자의 지각·행동을 결합하는 기술이며, 인간 중심 컴퓨팅(영어: human-centered computing)의 중요한 응용 영역이다.

### 계산과학과 응용 계산

계산과학(영어: computational science)은 수학적 모델과 컴퓨터 시뮬레이션을 사용하여 자연과학·공학·사회과학의 문제를 연구하는 분야이다. 이 분야에서는 수치해석학, 알고리즘, 고성능 컴퓨팅, 자료 분석이 결합된다.

시뮬레이션은 실제 실험이 어렵거나 비용이 큰 현상을 컴퓨터로 모의하는 방법이다. 예를 들어 계산유체역학, 계산화학, 계산물리학, 기후 모델, 구조 해석, 전자회로 분석 등은 모두 계산과학의 중요한 응용이다. 이러한 문제에서는 정확한 수치해법과 대규모 병렬 계산이 필요하다.

생물정보학은 생명과학 자료를 계산적으로 분석하는 분야이다. 유전체 자료, 단백질 구조, 생물학적 네트워크, 의학 자료를 분석할 때 알고리즘과 데이터베이스, 기계 학습이 사용된다. 이와 비슷하게 계산금융(영어: computational finance), 계산사회과학(영어: computational social science)도 각 분야의 문제를 계산적으로 다룬다.

응용 계산 분야는 특정 응용 문제를 다루지만, 단순한 컴퓨터 사용과는 다르다. 핵심은 문제의 수학적 모델을 세우고, 이를 계산 가능한 형태로 바꾸며, 알고리즘의 정확성·효율성·안정성을 분석하는 데 있다. 이런 점에서 계산과학은 컴퓨터 과학과 응용수학, 자연과학, 공학이 만나는 영역이다.

## 다른 분야와의 관계

컴퓨터 과학은 수학, 공학, 자연과학, 사회과학, 인지과학 등 여러 분야와 깊게 연결되어 있다. 계산과 정보 처리는 여러 학문에서 공통적으로 나타나는 구조이므로, 컴퓨터 과학은 한편으로는 독자적인 이론과 방법을 가진 학문이고, 다른 한편으로는 다양한 분야의 문제를 계산적으로 다루는 도구이기도 하다.

### 수학과의 관계

컴퓨터 과학은 수학과 밀접한 관계를 가진다. 계산 이론, 계산 복잡도 이론, 알고리즘 분석, 암호학, 오토마타 이론은 수리논리학, 이산수학, 조합론, 그래프 이론, 확률론, 대수학 등의 방법을 사용한다. 특히 계산 가능성과 계산 복잡도의 문제는 수학적 정의와 증명을 통해 다루어진다.

초기 컴퓨터 과학은 쿠르트 괴델, 앨런 튜링, 알론조 처치, 존 폰 노이만 등 수학자와 논리학자의 연구에서 큰 영향을 받았다. 튜링 기계와 람다 대수는 계산을 수학적으로 형식화한 대표적인 예이며, 이들은 현대 프로그래밍 언어와 계산 이론의 개념적 기초가 되었다.

그러나 컴퓨터 과학은 단순히 수학의 한 분야로만 환원되지는 않는다. 수학적 이론은 컴퓨터 과학의 중요한 기반이지만, 실제 컴퓨터 시스템, 소프트웨어, 데이터베이스, 컴퓨터 네트워크를 설계하고 구현하며 실험적으로 평가하는 일도 컴퓨터 과학의 중요한 부분이다. 이런 점에서 컴퓨터 과학은 수학적 이론과 공학적 설계가 함께 작용하는 분야이다.

### 공학과의 관계

컴퓨터 과학은 공학과도 밀접하게 연결된다. 특히 컴퓨터 공학(영어: computer engineering)은 컴퓨터 하드웨어와 소프트웨어, 통신 요소를 통합하여 실제 계산 시스템을 설계하고 구현하는 분야이다. 전기공학과 전자공학은 회로, 반도체, 신호, 통신 기술을 제공하며, 컴퓨터 과학은 이러한 장치 위에서 실행되는 계산 원리와 시스템 구조를 연구한다.

컴퓨터 구조, 운영체제, 임베디드 시스템, 실시간 컴퓨팅, 분산 컴퓨팅은 컴퓨터 과학과 공학의 접점에 놓인 분야이다. 이들 분야에서는 알고리즘의 이론적 효율성뿐 아니라 전력 소모, 지연 시간, 장애 허용성, 하드웨어 제약, 비용과 같은 공학적 조건도 함께 고려한다.

공학적 관점에서 컴퓨터 과학의 결과는 실제로 동작하는 시스템으로 구현되어야 한다. 예를 들어 새로운 컴퓨터 네트워크 프로토콜이나 데이터베이스 관리 시스템은 수학적 모델만으로 평가되지 않고, 실제 부하, 장애 상황, 보안 위협, 사용 환경에서의 성능을 통해서도 평가된다.

### 소프트웨어 공학과의 관계

소프트웨어 공학(영어: software engineering)은 대규모 소프트웨어를 체계적으로 개발하고 유지하기 위한 원리와 방법을 연구한다. 컴퓨터 과학이 계산 원리, 알고리즘, 프로그래밍 언어, 시스템 구조를 폭넓게 다룬다면, 소프트웨어 공학은 실제 소프트웨어 제품과 서비스를 신뢰성 있게 만들고 관리하는 과정에 더 중점을 둔다.

두 분야는 서로 분리되어 있지 않다. 프로그래밍 언어론, 자료 구조, 알고리즘, 데이터베이스, 운영체제, 컴퓨터 보안은 소프트웨어 공학의 실제 개발 과정에서 사용되는 핵심 지식이다. 반대로 대규모 소프트웨어 개발에서 나타나는 문제는 컴퓨터 과학의 새로운 연구 주제를 만들기도 한다.

소프트웨어 공학에서는 요구사항 분석, 설계, 구현, 시험, 배포, 유지보수, 품질 보증, 프로젝트 관리가 중요하다. 따라서 이 분야는 컴퓨터 과학의 이론뿐 아니라 시스템 공학, 인간-컴퓨터 상호 작용, 경영학, 품질 관리와도 연결된다. 특히 안전 필수 시스템이나 보안이 중요한 시스템에서는 정형 기법과 소프트웨어 테스트가 함께 사용된다.

### 정보과학·정보기술과의 관계

정보과학(영어: information science)은 정보의 조직, 검색, 전달, 이용을 연구하는 분야이다. 컴퓨터 과학은 정보의 계산적 표현과 처리를 연구하고, 정보과학은 정보가 사람과 조직 안에서 어떻게 저장·검색·활용되는지에 더 넓게 관심을 둔다. 두 분야는 정보 검색, 데이터베이스, 디지털 도서관, 지식 표현 같은 주제에서 만난다.

정보기술(영어: information technology)은 컴퓨팅 기반 구조와 정보 시스템을 실제로 구축·운영·관리하는 실무적 분야로 쓰이는 경우가 많다. 예를 들어 서버, 네트워크, 저장 장치, 업무용 소프트웨어, 보안 정책, 사용자 지원은 정보기술의 중요한 대상이다. 컴퓨터 과학이 계산 원리와 시스템 설계를 연구한다면, 정보기술은 그러한 기술을 조직의 목적에 맞게 운영하는 데 중점을 둔다.

정보 시스템(영어: information systems)은 조직과 사람, 업무 과정, 정보기술이 결합된 시스템을 연구한다. 이 분야에서는 기술 자체뿐 아니라 조직의 의사결정, 업무 흐름, 사용자 요구, 경제적 효과도 중요하다. 따라서 정보 시스템은 컴퓨터 과학, 경영학, 사회과학의 접점에 놓여 있다.

### 인지과학과 인공지능의 관계

인지과학은 인간과 동물의 지각, 기억, 언어, 추론, 학습을 연구하는 학제적 분야이다. 인공지능은 이러한 지능적 행위의 일부를 계산적으로 모델링하고 구현하려는 컴퓨터 과학의 분야이며, 심리학, 언어학, 철학, 신경과학과도 연결된다.

예를 들어 자연어 처리는 인간 언어를 계산적으로 분석하고 생성하는 방법을 연구하므로 언어학과 밀접하다. 컴퓨터 비전은 시각 정보를 처리하고 해석하는 방법을 연구하므로 인간의 시각 인지와도 관련된다. 기계 학습은 자료로부터 일반화하는 방법을 다루며, 이는 통계학과 인지 모델 모두와 연결된다.

다만 인공지능은 인간 마음을 그대로 복제하는 것만을 목표로 하지 않는다. 많은 인공지능 시스템은 특정 과업에서 좋은 성능을 내는 계산 모델을 만드는 데 중점을 둔다. 따라서 인공지능은 인지과학의 이론을 참고하지만, 동시에 알고리즘 설계, 최적화, 데이터 처리, 시스템 구현의 문제를 포함하는 컴퓨터 과학의 분야이다.

### 자연과학과 계산과학의 관계

컴퓨터 과학은 물리학, 화학, 생물학, 지구과학 등 자연과학과도 깊게 연결된다. 자연과학에서는 실험과 이론만으로 다루기 어려운 복잡한 현상을 시뮬레이션과 대규모 계산으로 연구하는 경우가 많다. 이러한 접근은 계산과학(영어: computational science)이라고 불린다.

계산물리학, 계산화학, 생물정보학, 기후 모델링은 계산과학의 대표적인 예이다. 이들 분야에서는 수학적 모델을 세우고, 이를 수치적으로 풀기 위한 알고리즘을 설계하며, 대규모 계산 시스템에서 실행하고, 결과를 과학적 자료와 비교한다.

컴퓨터 과학은 자연과학에 도구를 제공할 뿐 아니라, 자연과학의 문제로부터 새로운 계산 문제를 얻기도 한다. 예를 들어 단백질 구조 예측, 유전체 분석, 입자 시뮬레이션, 기후 예측은 새로운 알고리즘과 자료 구조, 병렬 계산 기법, 기계 학습 방법을 요구한다.

### 사회과학과 인문학과의 관계

사회과학에서는 사회 연결망, 경제 활동, 정치적 의사소통, 이동 양상, 온라인 행동과 같은 현상을 계산적으로 분석하는 일이 늘고 있다. 사회 연결망 분석, 계산사회과학(영어: computational social science), 데이터 과학은 대규모 자료를 통해 사회적 구조와 행동을 연구한다.

인문학에서도 컴퓨터 과학의 방법이 사용된다. 디지털 인문학(영어: digital humanities)은 텍스트, 이미지, 지도, 기록물과 같은 인문 자료를 계산적으로 분석하고 시각화하는 분야이다. 예를 들어 대규모 문헌의 단어 사용, 저자 관계, 역사적 지리 정보, 문화 자료의 패턴을 알고리즘으로 분석할 수 있다.

이러한 응용은 컴퓨터 과학의 사회적·윤리적 문제도 함께 제기한다. 개인정보 보호, 알고리즘 편향, 자동화의 영향, 디지털 격차, 플랫폼의 권력 구조는 기술적 문제인 동시에 사회적 문제이다. 따라서 현대 컴퓨터 과학은 정보 윤리, 기술철학, 법학, 정책학과도 점점 더 밀접하게 연결되고 있다.

## 응용과 사회적 영향

컴퓨터 과학의 응용은 계산 가능한 절차를 실제 문제 해결에 사용하는 데서 출발한다. 알고리즘, 자료 구조, 데이터베이스, 컴퓨터 네트워크, 인공지능, 컴퓨터 보안 같은 개념은 서로 다른 응용 분야에서 반복해서 사용된다. 예를 들어 자료를 저장하고 검색하는 문제, 복잡한 시스템을 모의실험하는 문제, 사람이 내리던 판단을 자동화하는 문제는 모두 컴퓨터 과학의 방법으로 다룰 수 있다.

### 정보 시스템과 인터넷

정보 시스템은 조직이나 개인이 정보를 저장, 처리, 검색, 전달하기 위해 사용하는 사람·절차·소프트웨어·하드웨어의 결합체이다. 컴퓨터 과학은 이러한 시스템의 핵심 원리인 데이터베이스, 운영체제, 컴퓨터 네트워크, 소프트웨어 공학을 제공한다. 기업의 업무 시스템, 전자상거래, 전자정부, 온라인 금융 서비스는 모두 이러한 정보 시스템의 예이다.

인터넷과 월드 와이드 웹은 컴퓨터 과학의 여러 분야가 결합된 대표적인 응용이다. 컴퓨터 네트워크는 자료가 여러 장치를 거쳐 전달되는 방법을 다루고, 정보 검색은 대규모 문서 집합에서 관련 있는 정보를 찾는 방법을 연구한다. 검색 엔진은 크롤링, 색인, 순위화, 질의 처리, 사용자 상호작용을 결합한 대규모 계산 시스템이다.

데이터베이스 관리 시스템은 많은 사용자가 동시에 자료를 저장하고 갱신할 수 있도록 지원한다. 여기에는 질의 언어, 트랜잭션, 동시성 제어, 장애 복구, 접근 제어 같은 개념이 사용된다. 현대의 웹 서비스와 모바일 서비스는 대개 데이터베이스와 분산 저장 시스템에 의존한다.

### 과학과 공학의 계산

계산과학(영어: computational science)은 자연과학과 공학의 문제를 수학적 모델과 컴퓨터 계산으로 연구하는 분야이다. 기후 변화, 유체 흐름, 신소재, 분자 구조, 천체 운동, 전염병 확산처럼 직접 실험하기 어렵거나 비용이 큰 현상은 시뮬레이션과 수치 계산을 통해 분석할 수 있다.

이러한 응용에서는 수치해석학, 병렬 컴퓨팅, 고성능 컴퓨팅, 데이터 시각화가 중요하다. 예를 들어 계산유체역학은 유체의 운동을 편미분방정식과 수치 알고리즘으로 근사하고, 계산화학은 분자와 물질의 성질을 계산적으로 예측한다. 대규모 계산은 종종 슈퍼컴퓨터나 클라우드 기반 계산 자원을 필요로 한다.

공학 설계에서도 컴퓨터 과학은 중요한 역할을 한다. 컴퓨터 지원 설계, 구조 해석, 회로 시뮬레이션, 제어 시스템 설계, 제조 공정 최적화는 모두 계산 모델과 알고리즘에 의존한다. 실제 제품을 만들기 전에 컴퓨터 모의실험을 수행하면 비용과 위험을 줄이고 설계안을 빠르게 비교할 수 있다.

### 데이터 분석과 인공지능 서비스

대규모 자료가 축적되면서 데이터 과학과 기계 학습은 컴퓨터 과학의 중요한 응용 영역이 되었다. 추천 시스템, 음성 인식, 이미지 분류, 이상 탐지, 자동 번역, 검색 순위화는 데이터 과학과 기계 학습이 실제 서비스에 적용되는 대표적인 예이다. 데이터 분석에서는 자료를 수집·정제·저장한 뒤, 통계적 방법과 알고리즘을 사용해 패턴을 찾고 예측 모델을 만든다. 데이터 마이닝은 큰 자료 집합에서 유용한 패턴과 관계를 발견하는 과정으로, 데이터베이스·통계학·인공지능의 방법을 함께 사용한다.

기계 학습(영어: machine learning)은 명시적으로 모든 규칙을 작성하기 어려운 문제에서 자료로부터 규칙이나 판단 기준을 학습하게 하는 방법이다. 추천 시스템, 음성 인식, 이미지 분류, 이상 탐지, 자동 번역, 검색 순위화는 기계 학습이 사용되는 대표적인 예이다.

인공지능 서비스는 자연어 처리, 컴퓨터 비전, 계획, 추론, 지식 표현, 로봇공학 등의 기술을 결합한다. 예를 들어 대화형 시스템은 언어 모델, 검색, 사용자 인터페이스, 안전 장치, 서버 인프라가 함께 작동해야 한다. 따라서 실제 인공지능 응용은 하나의 알고리즘만이 아니라 데이터 관리, 시스템 설계, 보안, 평가 방법을 모두 필요로 한다.

### 산업과 자동화

자동화(영어: automation)는 사람이 수행하던 절차를 기계나 소프트웨어가 수행하도록 만드는 것이다. 제조업에서는 센서, 제어 알고리즘, 로봇, 임베디드 시스템, 산업용 네트워크가 결합되어 생산 공정을 자동화한다. 물류와 유통에서는 경로 계획, 재고 관리, 수요 예측, 창고 자동화가 컴퓨터 과학의 방법에 의존한다.

로봇공학은 물리적 세계에서 움직이고 작업하는 기계를 설계하는 분야로, 인공지능, 제어이론, 컴퓨터 비전, 센서 처리, 경로 계획을 결합한다. 자율주행 차량, 물류 로봇, 수술 보조 로봇, 탐사 로봇은 모두 컴퓨터 과학과 공학 기술이 함께 사용되는 예이다.

금융 분야에서도 컴퓨터 과학은 거래 시스템, 위험 관리, 이상 거래 탐지, 신용 평가, 포트폴리오 최적화에 사용된다. 암호학과 분산 시스템은 전자 결제와 디지털 자산의 기술적 기반을 제공하며, 대규모 자료 처리는 금융 시장의 분석과 규제에도 활용된다.

### 보안과 사회 기반 시설

현대 사회의 많은 기반 시설은 컴퓨터 시스템에 의존하므로 컴퓨터 보안은 중요한 응용 분야이다. 전력망, 통신망, 금융망, 교통 시스템, 의료 정보 시스템은 모두 공격이나 장애에 취약할 수 있으며, 이를 보호하기 위해 접근 제어, 암호화, 침입 탐지, 보안 감사, 취약점 분석이 사용된다.

암호학은 안전한 통신과 인증을 위한 수학적·계산적 방법을 제공한다. 현대 암호 시스템은 전자상거래, 인터넷 뱅킹, 메신저, 전자서명, 소프트웨어 업데이트, 클라우드 서비스에서 널리 사용된다. 암호학은 단순히 메시지를 숨기는 기술이 아니라, 무결성, 인증, 부인 방지, 개인정보 보호 같은 보안 목표를 지원한다.

사회 기반 시설에서 컴퓨터 과학의 응용은 신뢰성과 안전성도 요구한다. 운영체제, 네트워크 프로토콜, 제어 시스템, 데이터베이스는 장애가 발생해도 중요한 기능을 유지해야 하며, 일부 분야에서는 정형 기법과 엄격한 소프트웨어 테스트가 사용된다. 이는 보안이 기능 추가가 아니라 시스템 설계의 기본 조건임을 보여 준다.

### 의료·교육·공공 분야

의료 분야에서는 의료정보학, 영상 처리, 생체 신호 분석, 임상 의사결정 지원, 유전체 분석, 원격 진료 시스템에 컴퓨터 과학이 사용된다. 컴퓨터 비전은 의료 영상에서 병변을 찾는 데 활용될 수 있고, 기계 학습은 환자 자료에서 위험 요인을 예측하는 데 사용될 수 있다.

교육 분야에서는 교육공학, 온라인 학습 플랫폼, 자동 채점, 학습 분석, 맞춤형 학습 시스템이 컴퓨터 과학의 방법을 사용한다. 학습자의 상호작용 자료를 분석하면 학습 과정의 어려움을 파악하거나, 개인별 학습 경로를 조정할 수 있다. 다만 교육 자료와 학습자 정보의 사용에는 개인정보 보호와 공정성 문제가 함께 따른다.

공공 분야에서는 행정 서비스의 디지털화, 교통 관리, 재난 대응, 도시 계획, 환경 감시, 공공 데이터 개방 등에 컴퓨터 과학이 적용된다. 스마트 시티와 같은 구상은 센서 네트워크, 데이터 분석, 최적화, 보안, 사용자 인터페이스를 결합하여 도시 기능을 효율적으로 운영하려는 시도이다.

### 문화와 창작

컴퓨터 그래픽스, 컴퓨터 애니메이션, 가상 현실, 증강 현실, 디지털 오디오는 문화와 예술 분야에서 널리 사용된다. 영화, 게임, 미디어 아트, 음악 제작, 디지털 출판은 모두 컴퓨터 과학의 알고리즘과 시스템 기술을 활용한다.

비디오 게임은 컴퓨터 과학의 여러 분야가 결합된 응용이다. 실시간 그래픽스, 물리 시뮬레이션, 인공지능, 네트워크 통신, 사용자 인터페이스, 소프트웨어 공학이 함께 사용된다. 특히 대규모 온라인 게임은 분산 시스템과 데이터베이스, 보안 기술도 필요로 한다.

창작 분야에서 컴퓨터 과학은 단순한 도구를 넘어 새로운 표현 방식을 만든다. 생성 모델, 절차적 생성(영어: procedural generation), 대화형 매체, 알고리즘 작곡은 계산 절차 자체가 창작 과정의 일부가 되는 예이다. 이러한 응용은 예술, 디자인, 인문학과 컴퓨터 과학의 접점을 넓히고 있다.

### 사회적 영향과 한계

컴퓨터 과학의 응용은 사회에 큰 이익을 주지만, 동시에 새로운 문제도 만든다. 자동화는 생산성을 높일 수 있지만 일자리 구조를 바꿀 수 있고, 인공지능 시스템은 의사결정을 돕지만 편향된 자료나 불투명한 모델 때문에 불공정한 결과를 낼 수 있다.

대규모 자료 처리와 연결된 응용에서는 개인정보 보호, 감시, 데이터 소유권, 알고리즘 책임성도 중요하다. 컴퓨터 보안의 실패는 개인 피해뿐 아니라 공공 기반 시설의 위험으로 이어질 수 있다. 따라서 컴퓨터 과학의 응용은 기술적 성능뿐 아니라 법적·윤리적·사회적 조건을 함께 고려해야 한다.

이러한 이유로 현대 컴퓨터 과학에서는 알고리즘의 정확성, 효율성, 확장성뿐 아니라 설명 가능성, 공정성, 안전성, 지속 가능성도 점점 더 중요해지고 있다. 예를 들어 채용·대출·의료와 같은 영역에서 알고리즘이 사용될 경우, 학습 자료의 편향이 결과의 차별로 이어질 수 있다. 또한 대규모 감시와 개인정보 수집은 개인의 자유와 민주적 통제에 관한 문제를 제기한다. 컴퓨터 과학의 응용은 단순히 계산을 빠르게 하는 것이 아니라, 계산 시스템이 사회 안에서 어떤 방식으로 사용되고 어떤 결과를 낳는지까지 포함하는 문제로 확장되고 있다.

## 교육과 연구

컴퓨터 과학의 교육과 연구는 수학적 기초, 프로그래밍, 컴퓨터 시스템, 소프트웨어 공학, 인공지능 등 여러 영역을 함께 다룬다. 대학 교육에서는 계산의 원리와 실제 구현 능력을 함께 기르는 것이 중요하며, 연구에서는 이론적 정리, 알고리즘, 시스템 구현, 실험 결과, 소프트웨어와 데이터셋 등이 모두 중요한 산출물이 될 수 있다.

### 교육과정

대학교의 컴퓨터 과학 교육과정은 보통 기초 프로그래밍, 자료 구조, 알고리즘, 이산수학, 컴퓨터 구조, 운영체제, 데이터베이스, 컴퓨터 네트워크, 프로그래밍 언어 등을 포함한다. 이러한 과목들은 계산의 이론과 실제 시스템 구현 사이를 연결하는 핵심 기반으로 여겨진다.

현대의 컴퓨터 과학 교육과정은 전통적인 프로그래밍과 시스템 과목에 더해 인공지능, 기계 학습, 컴퓨터 보안, 데이터 과학, 인간-컴퓨터 상호 작용, 병렬 컴퓨팅과 분산 컴퓨팅 같은 주제를 포함하는 방향으로 넓어지고 있다. 이는 컴퓨터 과학이 계산의 기초 이론뿐 아니라 사회와 산업에서 쓰이는 복잡한 계산 시스템까지 포괄하기 때문이다.

교육과정에서는 지식뿐 아니라 역량도 중요하게 다루어진다. 예를 들어 학생은 프로그래밍 언어의 문법을 아는 데 그치지 않고, 문제를 분석하고, 적절한 알고리즘과 자료 구조를 선택하며, 프로그램을 시험하고, 결과를 설명할 수 있어야 한다. 이러한 관점은 컴퓨터 과학 교육을 단순한 기술 훈련이 아니라 이론과 실천을 결합한 교육으로 만든다.

컴퓨터 과학 교육은 컴퓨터 공학, 소프트웨어 공학, 정보기술, 정보 시스템, 데이터 과학, 사이버 보안 교육과 밀접하게 관련되지만, 각 분야의 강조점은 다르다. 예를 들어 컴퓨터 과학은 계산 원리와 알고리즘, 소프트웨어와 시스템의 이론적 기초를 넓게 다루는 반면, 정보기술은 실제 정보 시스템의 운영과 관리에 더 중점을 두는 경우가 많다.

### 교육 방식

컴퓨터 과학 교육에서는 강의와 함께 실습, 과제, 프로젝트, 코드 리뷰(영어: code review), 팀 개발이 자주 사용된다. 이는 많은 주제가 추상적인 이론을 이해하는 것과 실제 프로그램이나 시스템을 구현하는 것을 함께 요구하기 때문이다. 예를 들어 알고리즘 과목에서는 정당성 증명과 복잡도 분석을 배우는 동시에, 실제 입력에 대해 알고리즘을 구현하고 성능을 비교할 수 있다.

프로젝트 기반 학습(영어: project-based learning)은 소프트웨어 공학과 시스템 과목에서 특히 중요하다. 학생들은 요구사항을 정리하고, 설계를 문서화하며, 버전 관리 도구를 사용하고, 시험과 디버깅을 수행하면서 실제 소프트웨어 개발의 과정을 경험한다. 이러한 학습 방식은 단순한 문법 지식보다 문제 해결 능력과 협업 능력을 기르는 데 초점을 둔다.

컴퓨터 과학 교육에서는 윤리학과 사회적 영향도 점점 더 중요해지고 있다. 인공지능의 편향, 개인정보 보호, 컴퓨터 보안, 자동화의 영향, 접근성, 저작권과 같은 문제는 기술적 문제인 동시에 사회적 문제이다. 따라서 현대 교육과정은 계산 시스템을 만들 수 있는 능력뿐 아니라, 그 시스템이 사회에 미치는 영향을 판단하는 능력도 요구한다.

### 학술 연구와 발표

컴퓨터 과학 연구는 대학교, 공공 연구기관, 기업 연구소, 오픈소스 공동체 등 다양한 환경에서 이루어진다. 연구 주제는 계산 이론의 추상적 정리에서부터 대규모 분산 컴퓨팅 시스템의 구현, 기계 학습 모델의 평가, 컴퓨터 보안 취약점 분석에 이르기까지 넓다.

컴퓨터 과학의 연구 결과는 학술지뿐 아니라 학술회의에서도 활발하게 발표된다. 특히 여러 하위 분야에서는 엄격한 동료평가를 거친 학술회의 논문이 빠른 결과 공유와 토론의 중요한 수단으로 기능한다. 이러한 관행은 분야의 빠른 변화와 구현·실험 결과의 신속한 검증 필요성과 관련된다.

연구 산출물은 논문에만 한정되지 않는다. 오픈 소스 소프트웨어, 공개 데이터셋, 벤치마크, 프로토타입 시스템, 형식 검증 도구, 실험 재현을 위한 코드도 중요한 기여가 될 수 있다. 특히 인공지능, 데이터베이스, 컴퓨터 시스템, 컴퓨터 보안 분야에서는 논문과 함께 공개 구현이나 자료가 연구 결과의 검증과 확산에 큰 역할을 한다.

### 연구 분야의 분류

컴퓨터 과학 연구는 매우 넓기 때문에, 학술 문헌에서는 주제를 분류하기 위한 체계가 사용된다. 대표적으로 ACM Computing Classification System은 컴퓨팅 분야의 논문과 연구 주제를 계층적으로 분류하는 데 쓰인다. 이러한 분류 체계는 학술지와 학술 데이터베이스에서 관련 문헌을 찾고 연구 주제를 조직하는 데 도움을 준다.

교육과 연구의 분류는 완전히 같지 않다. 교육과정은 학생이 갖추어야 할 기본 지식과 역량을 기준으로 구성되는 반면, 연구 분류는 논문과 학술 공동체의 세부 주제를 더 세밀하게 나누는 경향이 있다. 예를 들어 인공지능은 교육과정에서는 하나의 큰 지식 영역으로 다루어질 수 있지만, 연구에서는 기계 학습, 지식 표현, 자연어 처리, 컴퓨터 비전, 로봇공학 등 여러 세부 분야로 나뉜다.

이러한 분류는 고정된 것이 아니다. 양자 컴퓨팅, 데이터 과학, 사이버 보안, 책임 있는 인공지능처럼 새롭게 중요해지는 주제는 교육과 연구 체계에 계속 반영된다. 따라서 컴퓨터 과학의 교육과 연구는 빠르게 변화하는 기술 환경과 사회적 요구에 맞추어 지속적으로 조정된다.

### 연구 공동체와 산업계

컴퓨터 과학 연구는 학회, 학술회의, 학술지, 온라인 저장소, 오픈소스 프로젝트를 통해 이루어지는 국제적 공동체 활동이다. 연구자는 논문을 발표하고, 구현을 공개하며, 다른 연구자의 결과를 재현하거나 개선하면서 지식을 축적한다. 이러한 과정은 동료평가와 공개 검증을 통해 연구의 신뢰성을 높인다.

산업계도 컴퓨터 과학 연구에서 큰 역할을 한다. 검색 엔진, 클라우드 컴퓨팅, 반도체, 인공지능, 컴퓨터 보안 분야에서는 기업 연구소와 대학 연구실이 모두 중요한 기여를 한다. 실제 서비스에서 발생하는 대규모 자료와 시스템 문제는 새로운 연구 질문을 만들고, 연구 결과는 다시 제품과 기반 시설에 반영된다.

산업계와 학계의 밀접한 관계는 장점과 함께 주의점도 가진다. 대규모 계산 자원과 자료를 활용하면 새로운 성과를 낼 수 있지만, 연구의 재현성, 자료 접근의 불평등, 이해관계, 개인정보 보호와 같은 문제가 생길 수 있다. 따라서 현대 컴퓨터 과학 연구에서는 기술적 성능뿐 아니라 연구 윤리와 공개성도 중요한 기준이 된다.

* 컴퓨터
* 컴퓨팅
* 알고리즘
* 자료 구조
* 계산 이론
* 계산 복잡도 이론
* 프로그래밍 언어
* 소프트웨어 공학
* 컴퓨터 공학
* 정보과학
* 정보기술
* 인공지능
* 데이터베이스
* 컴퓨터 네트워크
* 운영체제
* 컴퓨터 보안
* 이산수학
* 데이터 과학
* 계산과학
* 컴퓨터 과학자
* 튜링상

### 서적

* Brookshear, J. Glenn; Brylow, Dennis (2019). 《Computer Science: An Overview》 13판 (영어). Pearson. ISBN 978-1-292-26342-7.
* Sedgewick, Robert; Wayne, Kevin (2016). 《Computer Science: An Interdisciplinary Approach》 (영어). Addison-Wesley. ISBN 978-0-13-407642-3.
* Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2022). 《Introduction to Algorithms》 4판 (영어). MIT Press. ISBN 978-0-262-04630-5.
* Tucker, Allen B. 편집 (2004). 《Computer Science Handbook》 2판 (영어). Chapman and Hall/CRC. doi:10.1201/9780203494455. ISBN 978-1-58488-360-9.
* Harel, David; Feldman, Yishai (2012). 《Algorithmics: The Spirit of Computing》 3판 (영어). Springer. ISBN 978-3-642-27265-3.
* Tedre, Matti (2014). 《The Science of Computing: Shaping a Discipline》 (영어). Chapman and Hall/CRC. doi:10.1201/b17764. ISBN 978-1-4822-1769-8.

### 웹사이트

* “Computer science” (영어). 《Encyclopaedia Britannica》. 2026년 5월 8일에 확인함.
* “CS2023 – ACM/IEEE-CS/AAAI Computer Science Curricula” (영어). 《CS2023》. ACM/IEEE-CS/AAAI. 2026년 5월 8일에 확인함.
* “Knowledge Areas – CS2023” (영어). 《CS2023》. ACM/IEEE-CS/AAAI. 2026년 5월 8일에 확인함.
* “CS2023 – The Final Report” (영어). 《CS2023》. ACM/IEEE-CS/AAAI. 2026년 5월 8일에 확인함.
* “Curricula Recommendations” (영어). 《Association for Computing Machinery》. 2026년 5월 8일에 확인함.
* “The 2012 ACM Computing Classification System” (영어). 《Association for Computing Machinery》. 2026년 5월 8일에 확인함.
* Turner, Raymond; Angius, Nicola. “The Philosophy of Computer Science” (영어). 《Stanford Encyclopedia of Philosophy》. 2026년 5월 8일에 확인함.

* 위키미디어 공용에 컴퓨터 과학 관련 미디어 분류가 있습니다.
* Association for Computing Machinery
* IEEE Computer Society
* CS2023: ACM/IEEE-CS/AAAI Computer Science Curricula
* ACM Curricula Recommendations
* ACM Computing Classification System
* DBLP Computer Science Bibliography