용어사전

프로그래밍과 컴퓨터 과학에서 사용되는 핵심 용어를 정리한다.

용어 정의
가변(mutable) 생성 후에도 내용을 변경할 수 있는 객체의 속성. 리스트는 가변이고 문자열은 불변이다.
감소(decrement) 변수 값을 1만큼 줄이는 갱신 연산. n = n - 1 또는 n -= 1로 표현한다.
값(value) 키-값 페어(key-value pair)의 두 번째 부분으로 딕셔너리에 나타나는 객체.
구문 오류(syntax error) 프로그래밍 언어의 문법 규칙을 위반했을 때 발생하는 오류. 괄호 누락, 오타, 잘못된 들여쓰기 등이 원인이다. 프로그램 실행 전에 발견된다.
계수(counter) 항목 개수를 세기 위해 사용하는 변수. 0으로 초기화하고 매 반복마다 1씩 증가시킨다.
구문론(syntax) 프로그래밍 언어의 문법 규칙. 코드가 어떤 형식으로 작성되어야 하는지를 정의한다.
구분자(delimiter) 문자열을 분할할 위치를 표시하는 문자나 문자열. split('-')에서 하이픈이 구분자다.
구현(implementation) 연산(computation)을 수행하는 방법.
기계어 코드(machine code) 중앙처리장치(CPU)가 직접 실행할 수 있는 가장 낮은 수준의 프로그래밍 언어. 0과 1의 이진수로 구성된다.
논리 오류(logic error) 문법적으로는 올바르지만 프로그램의 실행 순서나 조건이 잘못되어 의도한 결과가 나오지 않는 오류. 찾기 어려운 경우가 많다.
누산기(accumulator) 루프 내에서 값을 누적하는 변수. 합계, 곱, 최대값 등을 계산할 때 사용한다. 루프 시작 전에 초기화해야 한다.
디버깅(debugging) 프로그램의 오류(버그)를 찾아서 수정하는 과정. 프로그래밍에서 가장 많은 시간이 소요되는 활동 중 하나다.
딕셔너리(dictionary) 키(key)에서 해당 값으로 매핑(mapping)하는 자료구조.
동등(equivalent) 두 객체가 같은 값을 가지는 상태. == 연산자로 확인한다.
동일(identical) 두 변수가 메모리 상 같은 객체를 참조하는 상태. is 연산자로 확인한다.
로우레벨 언어(low-level language) 기계어와 가까운 프로그래밍 언어. 하드웨어를 직접 제어할 수 있지만 사람이 읽고 쓰기 어렵다. 어셈블리 언어가 대표적이다.
룩업(lookup) 키를 가지고 해당 값을 찾는 딕셔너리 연산.
리스트(list) 순서가 있는 값의 시퀀스. 대괄호 []로 생성하고 인덱스로 요소에 접근한다.
리스트 순회(list traversal) for 루프로 리스트의 각 요소를 순차적으로 방문하는 패턴.
문제 해결(problem solving) 문제를 분석하고, 해결 방법을 설계하며, 그 해결책을 구현하는 과정. 프로그래밍의 본질적인 활동이다.
무한 루프(infinite loop) 종료 조건에 도달하지 못해 영원히 반복되는 루프. 반복 변수를 갱신하지 않거나 잘못된 조건을 사용하면 발생한다.
반복(iteration) 루프가 한 번 실행되는 것. 루프 몸통이 시작부터 끝까지 한 번 수행되는 과정을 말한다.
버그(bug) 프로그램의 오류를 일컫는 일반적인 용어. 1947년 하버드 대학의 Mark II 컴퓨터에서 실제 나방(bug)이 발견된 것에서 유래했다는 설이 있다.
변수(variable) 데이터를 저장하는 이름이 붙은 메모리 공간. 프로그램 실행 중에 값을 저장하고 참조하는 데 사용한다.
보조 기억장치(secondary memory) 전원이 꺼져도 데이터를 보존하는 저장 장치. 하드 디스크, SSD, USB 플래시 드라이브 등이 해당한다. 주기억장치보다 속도는 느리지만 용량이 크고 영구적이다.
슬라이스(slice) 리스트나 문자열의 일부분을 추출하는 연산. t[1:3]은 인덱스 1부터 2까지 추출한다.
소스 코드(source code) 프로그래머가 작성한 프로그램의 원본 텍스트. 하이레벨 언어로 작성되며, 사람이 읽고 수정할 수 있다.
소켓(socket) 네트워크 통신의 양 끝점을 추상화한 객체. 프로그램이 다른 컴퓨터와 데이터를 주고받을 수 있게 해주는 인터페이스다. 전화기의 수화기처럼 연결을 맺고, 데이터를 보내고 받고, 연결을 끊는 역할을 한다.
스크래핑(scraping) 웹 페이지에서 데이터를 자동으로 추출하는 기술. HTML 구조를 분석하여 필요한 정보만 골라내는 과정이다. 웹 크롤링과 함께 사용되어 대량의 웹 데이터를 수집하는 데 활용한다.
스크립트(script) 인터프리터가 실행할 수 있는 명령어들이 저장된 텍스트 파일. 파이썬 스크립트는 .py 확장자를 사용한다.
스파이더(spider) 웹을 자동으로 탐색하며 페이지를 수집하는 프로그램. 웹 크롤러(web crawler)라고도 한다. 하나의 페이지에서 링크를 추출하고 그 링크를 따라 다른 페이지로 이동하며 탐색을 확장한다.
에일리어싱(aliasing) 두 개 이상의 변수가 동일한 객체를 참조하는 상황. 한쪽을 변경하면 다른 쪽에도 영향을 준다.
예약어(reserved word) 프로그래밍 언어에서 특별한 의미를 가지며, 변수명이나 함수명으로 사용할 수 없는 단어. 파이썬의 if, for, def, return 등이 해당한다.
요소(element) 리스트에 담긴 개별 값. 항목(item)이라고도 한다. 인덱스로 접근한다.
의미론(semantics) 프로그램이나 명령문의 의미. 코드가 실행될 때 어떤 동작을 수행하는지를 나타낸다.
의미론적 오류(semantic error) 문법적으로 올바르고 실행도 되지만, 프로그래머가 의도한 것과 다른 동작을 하는 오류. 프로그램이 “잘못된 일을 올바르게” 수행하는 경우다.
이식성(portability) 프로그램이 다른 컴퓨터 환경에서도 실행될 수 있는 특성. 하이레벨 언어로 작성된 프로그램은 이식성이 높다.
인덱스(index) 리스트에서 요소의 위치를 나타내는 정수. 파이썬에서는 0부터 시작한다.
인터랙티브 모드(interactive mode) 프롬프트에서 명령어를 입력하면 즉시 실행 결과를 확인할 수 있는 모드. 파이썬 REPL(Read-Eval-Print Loop)이 대표적이다.
인터프리터(interpreter) 소스 코드를 한 줄씩 읽어서 즉시 실행하는 프로그램. 파이썬, 자바스크립트가 인터프리터 방식을 사용한다. 코드를 바로 실행할 수 있어 개발과 테스트가 편리하다.
입출력 장치(input/output device) 컴퓨터와 외부 세계 간에 데이터를 주고받는 장치. 키보드, 마우스, 모니터, 프린터 등이 해당한다.
주기억장치(main memory) CPU가 직접 접근하여 데이터를 읽고 쓸 수 있는 고속 저장 장치. RAM(Random Access Memory)이 대표적이며, 전원이 꺼지면 데이터가 사라지는 휘발성 메모리다.
중앙처리장치(central processing unit, CPU) 컴퓨터의 두뇌에 해당하는 핵심 부품. 프로그램의 명령어를 해석하고 실행하며, 연산과 제어를 담당한다. 3.0 GHz CPU는 초당 약 30억 개의 명령어를 처리할 수 있다.
중첩 리스트(nested list) 리스트 안에 또 다른 리스트가 요소로 포함된 구조. [[1,2], [3,4]]처럼 2차원 데이터를 표현한다.
중첩 루프(nested loops) 루프 내부에 하나 이상의 루프가 있는 구조. 외곽 루프가 1회 실행될 때, 내부 루프는 전체 반복을 완료한다.
증가(increment) 변수 값을 1만큼 늘리는 갱신 연산. n = n + 1 또는 n += 1로 표현한다.
초기화(initialize) 변수에 최초 값을 대입하는 것. 루프에서 누산기나 카운터는 루프 시작 전에 초기화해야 한다.
출력문(print statement) 프로그램의 결과를 화면에 표시하는 명령문. 파이썬에서는 print() 함수를 사용한다.
참조(reference) 변수와 객체 사이의 연결. 변수는 객체를 직접 담지 않고 객체를 가리킨다.
컴파일(compile) 하이레벨 언어로 작성된 소스 코드 전체를 기계어로 번역하는 과정. 컴파일된 프로그램은 실행 속도가 빠르지만, 수정 후 다시 컴파일해야 한다.
키(key) 키-값 페어(key-value pair)의 첫 번째 부분으로 딕셔너리에 나타나는 객체.
키-값 페어(key-value pair) 키에서 값으로의 매핑을 표현하는 딕셔너리의 기본 단위.
파싱(parsing) 소스 코드의 문법 구조를 분석하는 과정. 인터프리터나 컴파일러가 코드를 실행하거나 번역하기 전에 수행한다.
프로그램(program) 컴퓨터가 특정 작업을 수행하도록 작성된 명령어들의 집합. 소프트웨어라고도 부른다.
프롬프트(prompt) 사용자의 입력을 기다리는 상태를 나타내는 기호. 파이썬 인터랙티브 모드에서는 >>>가 프롬프트로 사용된다.
하이레벨 언어(high-level language) 사람이 이해하기 쉽게 설계된 프로그래밍 언어. 파이썬, 자바, C++ 등이 해당한다. 실행 전에 기계어로 번역되어야 한다.
해시 함수(hash function) 키에 대한 위치를 계산하기 위해서 해시테이블에서 사용되는 함수.
해시테이블(hashtable) 파이썬 딕셔너리를 구현하기 위해 사용된 알고리즘.
항목(item) 키-값 페어(key-value pair)에 대한 또 다른 이름.
비교가능(comparable) 동일한 자료형의 다른 값과 비교하여 크기를 확인할 수 있는 자료형. 비교가능한 자료형은 리스트에 넣어서 정렬할 수 있다.
싱글톤(singleton) 단일 요소를 가진 리스트나 튜플.
스캐터(scatter) 시퀀스를 개별 인자로 풀어서 전달하는 연산. *args 문법으로 구현한다.
자료 구조(data structure) 연관된 값의 집합을 조직화하는 방식. 리스트, 딕셔너리, 튜플 등이 대표적이다.
튜플(tuple) 불변 요소들의 시퀀스. 괄호 ()로 생성하고 한 번 생성하면 변경할 수 없다.
튜플 대입(tuple assignment) 오른쪽 시퀀스의 값을 왼쪽 튜플 변수에 한 번에 대입하는 문법. a, b = b, a처럼 값 교환에 유용하다.
해시형(hashable) 해시 함수를 가진 자료형. 정수, 실수, 문자열, 튜플 같은 불변형은 해시형이고, 리스트나 딕셔너리 같은 가변형은 해시형이 아니다.
히스토그램(histogram) 계수기(counter) 집합. 빈도를 계산하는 데 사용한다.
DSU 패턴(decorate-sort-undecorate) 리스트를 정렬할 때 (정렬키, 원본값) 튜플 리스트를 만들고, 정렬한 뒤, 원하는 부분만 추출하는 패턴.
모음(gather) 가변 길이 인자를 하나의 튜플로 모으는 연산. *args 매개변수로 구현한다.
형태(shape) 자료 구조의 자료형, 크기, 구성을 요약한 것. 형태 오류는 예상과 다른 구조의 데이터가 들어올 때 발생한다.
대입(assignment) 변수에 값을 대입하는 문장.
문자열 결합(concatenate) 두 개의 피연산자 끝과 끝을 합치는 것.
주석(comment) 다른 프로그래머나 소스코드를 읽는 다른 사람을 위한 프로그램 정보로 프로그램의 실행에는 아무런 영향이 없다.
평가(evaluate) 하나의 값을 만들도록 연산을 실행함으로써 표현식을 간단히 하는 것.
표현식(expression) 하나의 결과값을 만드는 변수, 연산자, 값의 조합.
포트(port) 컴퓨터 내에서 특정 서비스나 프로그램을 식별하는 번호. IP 주소가 건물 주소라면, 포트 번호는 그 건물 안의 호수다. HTTP는 80번, HTTPS는 443번 포트를 기본으로 사용한다.
부동 소수점(floating-point) 소수점을 가진 숫자를 표현하는 자료형.
버림 나눗셈(floor division) 두 숫자를 나누어 소수점 이하 부분을 절사하는 연산자.
정수(integer) 완전수를 나타내는 자료형.
연상기호(mnemonic) 기억 보조. 변수에 저장된 것을 기억하기에 도움이 되도록 변수에 연상되는 이름을 부여한다.
나머지 연산자(modulus operator) 퍼센트 기호(%)로 표시되고 정수를 가지고 한 숫자를 다른 숫자로 나누었을 때 나머지를 생성하는 연산자.
피연산자(operand) 연산자가 연산을 수행하는 값 중 하나.
연산자(operator) 덧셈, 곱셈, 문자열 결합 같은 간단한 연산을 표현하는 특별 기호.
우선순위 규칙(rules of precedence) 다수의 연산자와 피연산자를 포함한 표현식이 평가되는 실행 순서를 규정한 규칙 집합.
문장(statement) 명령이나 액션을 나타내는 코드 부문.
문자열(string) 일련의 문자를 나타내는 형식.
자료형(type) 값의 범주. 정수(int), 부동 소수점 수(float), 문자열(str) 등이 있다.
가디언 패턴(guardian pattern) 단락(short circuit) 평가를 활용하여 오류가 발생할 수 있는 연산 앞에 방어 조건을 배치하는 기법. y != 0 and x/y > 2처럼 구성한다.
단락 평가(short circuit) 논리 표현식 평가 중 최종 결과가 확정되면 나머지 표현식 평가를 생략하는 동작. and는 첫 번째가 거짓이면, or는 첫 번째가 참이면 두 번째를 평가하지 않는다.
몸통(body) 복합문에서 머리부분(header) 다음에 들여쓰기로 구분되는 실행 문장들. if문, for문, 함수 정의 등에서 실제 동작을 수행하는 부분이다.
분기(branch) 조건문에서 조건의 참/거짓에 따라 선택되는 실행 경로. if-else문에서 if 블록과 else 블록이 각각 하나의 분기다.
부울 표현식(boolean expression) 참(True) 또는 거짓(False) 중 하나의 값을 갖는 표현식. 비교 연산자나 논리 연산자로 만들 수 있다.
비교 연산자(comparison operator) 두 값을 비교하여 부울 값을 반환하는 연산자. ==, !=, >, <, >=, <=가 있다.
복합문(compound statement) 머리부분(header)과 몸통(body)으로 구성된 문장. 파이썬에서 머리부분은 콜론(:)으로 끝나며, 몸통은 들여쓰기로 구분한다.
역추적(traceback) 오류 발생 시 파이썬이 출력하는 호출 스택 정보. 오류가 발생한 위치와 그 위치에 도달하기까지의 함수 호출 경로를 보여준다.
연쇄 조건문(chained conditional) if-elif-else로 구성된 조건문. 여러 조건을 순차적으로 검사하여 첫 번째로 참인 조건의 분기만 실행한다.
예외(exception) 프로그램 실행 중 발생하는 오류 상황. try-except 문으로 처리할 수 있다. ValueError, TypeError 등 다양한 종류가 있다.
조건(condition) 조건문에서 분기를 결정하는 부울 표현식. if문의 괄호 안이나 콜론 앞에 위치한다.
조건문(conditional statement) 조건에 따라 서로 다른 코드를 실행하는 문장. if, if-else, if-elif-else 형태가 있다.
중첩 조건문(nested conditional) 조건문 내부에 또 다른 조건문이 포함된 구조. 가독성이 떨어지므로 가능하면 연쇄 조건문이나 논리 연산자로 대체하는 것이 좋다.
논리 연산자(logical operator) 부울 값을 조합하는 연산자. and, or, not이 있다. 복합 조건을 표현할 때 사용한다.
알고리즘(algorithm) 특정 범주의 문제를 해결하는 일반적인 프로세스.
인자(argument) 함수가 호출될 때 함수에 제공되는 값. 함수 내부에 상응하는 매개변수에 대입된다.
몸통 부문(body) 함수 정의 내부에 있는 일련의 문장.
구성(composition) 좀 더 큰 표현식의 일부분으로 표현식을 사용하거나, 좀 더 큰 문장의 일부로서의 문장.
결정론적(deterministic) 동일한 입력값이 주어지고 실행될 때마다 동일한 행동을 하는 프로그램에 관련된 것.
점 표기법(dot notation) 점과 함수명으로 모듈명을 명세함으로써 다른 모듈의 함수를 호출하는 구문.
실행 흐름(flow of execution) 프로그램 실행 동안 명령문이 실행되는 순서.
값 반환 함수(fruitful function) 반환값을 가지는 함수.
함수(function) 유용한 연산을 수행하는 이름을 가진 일련의 명령문. 함수는 인자를 가질 수도 갖지 않을 수도 있고, 결과값을 생성할 수도 생성하지 않을 수도 있다.
함수 호출(function call) 함수를 실행하는 명령문. 함수 이름과 인자 리스트로 구성된다.
함수 정의(function definition) 신규 함수를 정의하는 명령문으로 이름, 매개변수, 실행 명령문을 명세한다.
함수 객체(function object) 함수 정의로 생성되는 값. 함수명은 함수 객체를 참조하는 변수이다.
머리 부문(header) 함수 정의의 첫 번째 줄.
가져오기 문(import statement) 모듈 파일을 읽어 모듈 객체를 생성하는 명령문.
모듈 객체(module object) import문에 의해서 생성된 모듈에 정의된 코드와 데이터에 접근할 수 있는 값.
매개변수(parameter) 인자로 전달된 값을 참조하기 위해 함수 내부에 사용되는 이름.
의사 난수(pseudorandom) 난수처럼 보이는 일련의 숫자와 관련되어 있지만, 결정론적 프로그램에 의해 생성된다.
반환 값(return value) 함수의 결과. 함수 호출이 표현식으로 사용된다면, 반환값은 표현식의 값이 된다.
무반환 함수(void function) 반환값을 갖지 않는 함수.
문자 클래스(character class) 정규표현식에서 [...]로 지정한 문자 집합. 괄호 안의 문자 중 하나와 매칭한다.
메타문자(metacharacter) 정규표현식에서 특별한 의미를 갖는 문자. ^, $, ., *, +, ?, [], () 등이 있다.
비탐욕적 매칭(lazy matching) 정규표현식에서 +?, *? 수량자가 가능한 적은 문자를 매칭하려는 동작.
앵커(anchor) 정규표현식에서 위치를 지정하는 메타문자. ^(라인 시작), $(라인 끝)가 대표적이다.
정규 표현식(regular expression) 문자열 패턴을 표현하는 미니 언어. 검색, 치환, 추출에 사용한다. regex라고도 한다.
캡처 그룹(capture group) 정규표현식에서 괄호 ()로 지정한 부분. 전체 매칭 후 해당 부분만 추출할 수 있다.
탐욕적 매칭(greedy matching) 정규표현식에서 +, * 수량자가 가능한 많은 문자를 매칭하려는 동작.
BeautifulSoup 파이썬의 HTML/XML 파싱 라이브러리. 웹 페이지의 복잡한 HTML 구조를 파이썬 객체로 변환하여 태그, 속성, 텍스트를 쉽게 추출할 수 있게 한다.
grep 정규표현식으로 파일을 검색하는 유닉스 명령어. “Global Regular Expression Print”의 약자.
urllib 파이썬 표준 라이브러리로 URL을 다루는 모듈 모음. urllib.request로 웹 페이지를 가져오고, urllib.parse로 URL을 분석하고 조합한다. 소켓보다 높은 수준의 추상화를 제공한다.
API(Application Program Interface) 응용 프로그램 인터페이스. 두 프로그램 컴포넌트 간에 상호작용하는 패턴을 정의하는 계약. 웹 API는 HTTP를 통해 서비스를 제공하며, 요청 형식, 응답 형식, 에러 코드 등을 명세한다.
ElementTree 파이썬 표준 라이브러리의 XML 파싱 모듈. xml.etree.ElementTree로 임포트하며, XML 문서를 트리 구조로 파싱하고 탐색한다.
JSON(JavaScript Object Notation) 자바스크립트 객체 표기법. 중괄호 {}로 객체를, 대괄호 []로 배열을 표현하는 경량 데이터 교환 형식. 파이썬 딕셔너리와 리스트로 직접 매핑되어 웹 API의 사실상 표준이 되었다.
OAuth 제3자 애플리케이션에 제한된 접근 권한을 부여하는 인증 프레임워크. 사용자가 비밀번호를 직접 전달하지 않고도 특정 앱이 자신의 데이터에 접근하도록 허용한다.
REST(REpresentational State Transfer) 웹 API 설계 원칙. URL로 자원을 식별하고, HTTP 메서드(GET, POST, PUT, DELETE)로 자원에 대한 동작을 정의한다.
SOA(Service-Oriented Architecture) 서비스 지향 아키텍처. 응용 프로그램이 네트워크로 연결된 독립적인 서비스들의 조합으로 구성되는 소프트웨어 설계 방식.
XML(eXtensible Markup Language) 확장 마크업 언어. 태그와 속성으로 구조화된 데이터를 표현하는 마크업 형식. JSON보다 장황하지만 메타데이터 표현에 강점이 있다.
지수 백오프(exponential backoff) 재시도 간격을 점점 늘리는 전략. 서버 과부하 상황에서 즉시 재시도하면 상황이 악화되므로, 1초, 2초, 4초처럼 간격을 두배씩 늘린다.
웹서비스(web service) HTTP 프로토콜 위에서 프로그램 간 데이터 교환을 위해 설계된 인터페이스. HTML 대신 JSON이나 XML 형식으로 응답한다.
관계(relation) 데이터베이스에서 튜플과 속성을 담고 있는 내부 영역. 좀더 일반적으로 “테이블(table)”이라고 한다.
논리키(logical key) “외부 세계”가 특정 행의 정보를 찾기 위해서 사용하는 키. 사용자 계정 테이블에서 이메일 주소가 논리키의 좋은 예다.
데이터베이스 브라우저(database browser) 프로그램을 작성하지 않고 직접적으로 데이터베이스에 연결하거나 조작할 수 있는 소프트웨어.
외래키(foreign key) 다른 테이블에 있는 행의 주키를 가리키는 숫자 키. 외래키는 다른 테이블에 저장된 행 사이에 관계를 설정한다.
인덱스(index) 테이블에 행이 추가될 때 정보 검색을 빠르게 하기 위해서 데이터베이스 소프트웨어가 유지관리하는 추가 데이터.
정규화(normalization) 어떠한 데이터도 중복이 없도록 데이터 모델을 설계하는 것. 데이터베이스 한 장소에 각 항목 정보를 저장하고 외래키를 이용하여 다른 곳에서 참조한다.
제약(constraint) 데이터베이스가 테이블의 필드나 행에 규칙을 강제하는 것. 일반적인 제약은 특정 필드에 중복된 값이 없도록 하는 것이다.
주키(primary key) 다른 테이블에서 테이블의 한 행을 참조하기 위해서 각 행에 대입되는 숫자 키. 종종 데이터베이스는 행이 삽입될 때 주키를 자동 삽입하도록 설정되었다.
커서(cursor) 데이터베이스에서 SQL 명령어를 수행하고 데이터를 가져오는 객체. 네트워크 연결을 위한 소켓이나 파일 핸들러와 유사하다.
glob 패턴(glob pattern) 파일 이름을 매칭하는 와일드카드 문법. *는 모든 문자열, ?는 단일 문자, **는 재귀적 디렉터리를 의미한다. 파이썬 pathlib에서 glob(), rglob() 메서드로 사용한다.