자료형

덤프버전 :



'''이론 컴퓨터 과학
{{{#fff

Theoretical Computer Science
'''

[ 펼치기 · 접기 ]
이론
기본 대상
수학기초론(수리논리학(논리 연산) · 계산 가능성 이론 · 범주론 · 집합론) · 이산수학(그래프 이론) · 수치해석학 · 확률론통계학] · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론
재귀함수 · 튜링 기계 · 람다 대수 · 처치-튜링 명제 · 바쁜 비버
오토마타 이론
FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임
계산 복잡도 이론
점근 표기법 · 튜링 기계^고전, PRAM, 양자, 비결정론적^ · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)
수학적 최적화
조합 최적화
외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
볼록 최적화
내부점 방법 · 경사하강법
선형계획법
심플렉스법
정보이론
데이터 압축(무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
컴퓨팅 방법론
병렬 컴퓨팅(병렬 아키텍처 · 암달의 법칙 · 병렬 알고리즘) · 분산 컴퓨팅(분산 알고리즘 · 클러스터 컴퓨팅 · 그리드 컴퓨팅 · 클라우드 컴퓨팅) · 멀티코어 컴퓨팅 · 대칭형 다중 처리(SMP)
암호학
해시(MD5 · 암호화폐 · 사전 공격(레인보우 테이블) · SHA) · 양자 암호
대칭키 암호화 방식
블록 암호 알고리즘(AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
공개키 암호화 방식
공개키 암호 알고리즘(타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
프로그래밍 언어이론
프로그래밍 언어(함수형 언어 · 객체 지향 프로그래밍) · 메타 프로그래밍 · 형식언어 · 유형 이론 · 프로그래밍 언어 의미론 · 컴파일러 이론
주요 알고리즘 및 자료구조
기초
정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현
배열^벡터^ · 리스트^연결 리스트^ · 셋(set)^레드-블랙 트리, B-트리^ · 우선순위 큐^, 피보나치 힙^
계산 수론 및 암호학
밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘
계산기하학
볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론
탐색^BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학




1. 개요
1.1. 엄밀한 정의 (Type Theory)
2. 타입 시스템의 종류
2.1. 동적 타입 시스템
2.2. 정적 타입 시스템
3. 타입의 종류
3.1. 일반적인 타입
3.2. 특정 프로그래밍 패러다임, 언어의 타입
4. 다형성
4.1. 애드혹 다형성 (Ad-hoc Polymorphism)
4.2. 서브타입 다형성 (Subtype Polymorphism)
4.3. 파라메트릭 다형성 (Parametric Polymorphism)
5. 타입 추론
6. 관련 문서



1. 개요[편집]


Type

자료형(타입, Type)이란 프로그래밍 언어에서 변수 또는 값이 가질 수 있는 데이터의 종류를 정의한 것이다. 타입 시스템(type system)을 통해 프로그래밍 언어는 데이터의 해석 방법과 사용 가능한 연산의 종류를 결정하며, 이는 프로그램의 오류를 줄이고 개발의 효율성을 높이는 데 기여한다. 타입은 각 언어의 문법적 요소와 실행시의 안정성을 보장하는 중요한 역할을 한다.

타입은 여러가지 기능을 한다. 첫번째로, 타입은 코드의 "시그니처(Signature)"로 작용하여 그 자체로 문서의 역할을 할 수 있다. 예를 들어, 함수의 파라미터와 반환 타입을 명시함으로써, 해당 함수의 사용 방법과 기대되는 결과를 이해하는 데 도움을 줄 수 있다. 두번째로, 프로그램의 타입을 검사하여 타입의 관점에서 프로그램이 의미를 가지는지, 아니면 잘못 작성된 (ill-formed) 프로그램인지 자동으로 검사할 수 있다.


1.1. 엄밀한 정의 (Type Theory)[편집]




2. 타입 시스템의 종류[편집]


프로그래밍 언어에 대한 한가지 오해는 어떤 언어는 "타입 시스템" 자체가 존재하지 않는다는 것이다. 그러나 실제로는 그렇지 않다. 타입 시스템은 프로그래밍 언어가 (코드나 메모리 상에 존재하는) 값을 해석하고, 다루는 방식을 정의한 것이기 때문에 모든 언어는 어떤 형태로든 타입 시스템을 가질 수밖에 없다. 이것이 혼동되는 이유는 "컴파일 시간에 타입 체크"를 하지 않는 언어들을


2.1. 동적 타입 시스템[편집]


동적으로 타입되는 언어들은 변수의 타입이 실행 시간에 결정된다. 대표적인 예로 파이썬(Python), 루비(Ruby), 자바스크립트(JavaScript) 등이 있다. 유연성이 높고, 코드의 양을 줄이며 빠르게 개발할 수 있다는 장점이 있으나 런타임에 타입 오류가 발생할 수 있다는 문제가 있다. 또한, 런타임에 타입체크가 이루어지므로 속도에서 손해를 볼 수 있다.


2.2. 정적 타입 시스템[편집]


정적으로 타입되는 언어들은 변수의 타입이 컴파일 시간에 결정된다. OCaml, Haskell, C++, Java 등이 이 범주에 속한다. 이러한 언어들은 주로 컴파일을 통해 실행 전에 타입 체크를 완료하므로 런타임에 타입 오류가 발생하지 않는다. 그러나 타입 추론 알고리즘이 충분히 강력하지 않으면 타입을 꽤 많이 명시해야 하므로, 코드가 길어지고 유연성이 감소할 수 있다.


3. 타입의 종류[편집]



3.1. 일반적인 타입[편집]


정수형 (Integer), 실수형 (Float), 문자열 (String) 등은 대부분의 프로그래밍 언어에서 기본적으로 제공하는 타입들이다. 이들은 데이터의 가장 기본적인 형태를 나타내며, 일상적인 프로그래밍 작업에서 널리 사용된다.


3.2. 특정 프로그래밍 패러다임, 언어의 타입[편집]




4. 다형성[편집]




4.1. 애드혹 다형성 (Ad-hoc Polymorphism)[편집]


애드혹 다형성은 함수 오버로딩 또는 연산자 오버로딩을 통해 다양한 타입의 인자에 대해 같은 함수나 연산자를 사용할 수 있도록 하는 기능이다.


4.2. 서브타입 다형성 (Subtype Polymorphism)[편집]


서브타입 다형성은 하나의 타입이 다른 타입의 하위 타입으로 간주될 수 있는 경우를 의미한다. 예를 들어, 모든 클래스가 최상위 클래스인 Object의 서브타입인 Java에서는 Object 타입의 변수에 어떤 클래스의 인스턴스도 저장할 수 있다.


4.3. 파라메트릭 다형성 (Parametric Polymorphism)[편집]


파라메트릭 다형성은 타입을 매개 변수로 취급하여 다양한 타입에 대해 동일한 코드를 재사용할 수 있는 기능이다. 예를 들어, C++의 템플릿 또는 Java의 제네릭이 이에 해당한.


5. 타입 추론[편집]


타입 추론은 프로그래머가 명시적으로 타입을 선언하지 않아도 프로그래밍 언어의 컴파일러나 인터프리터가 자동으로 변수의 타입을 결정하는 기능이다. 정적 타입 시스템을 가진 언어는 런타임에 타입 오류가 발생하지 않는다는 매우 강력한 장점이 있지만 타입을 명시해줘야 하는 부분 때문에 불편하게 느껴지기도 하는데, 강력한 타입 추론이 가능하다면 개발자가 따로 타입을 명시해줄 필요가 없어 두가지 장점을 모두 사용할 수 있게 된다.

예를 들어, C++ 11부터는
auto
키워드를 활용해 자동으로 타입을 채우도록 할 수 있는데, 이 덕분에
위와 같은 코드를 아래와 같이 작성할 수 있다.


아주 강력한 타입 추론 알고리즘이 있는 프로그래밍 언어에서는 심지어 타입을 거의 명시하지 않고도 프로그램을 작성할 수 있다. 예를 들어, Ocaml 같은 경우,
let rec fib n =
    if n < 2 then n
    else fib (n-1) + fib (n-2)
이렇게 코드를 작성해도 자동으로
fib
int -> int
타입의 함수임을 추론해주는데, 그 이유는 Ocaml에서
+
-
int -> int -> int
형식의 operator 임을 기반으로 하여 함수의 타입 시그니처를 결정할 수 있는 강력한 타입 시스템인 HM 타입 시스템을 사용하고 있기 때문이다.

6. 관련 문서[편집]


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2024-04-21 20:29:01에 나무위키 자료형 문서에서 가져왔습니다.