경고 : 최신판이 아닙니다. 이 문서의 오래된 판을 편집하고 있습니다. 이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다. 로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요![[컴퓨터 프로그램]]을 짤 때 쓰는 언어. 보통의 [[자연어]]랑 구분해서 이렇게 부른다. == 언어의 특징에 따른 구분 == 아래의 예시는 프로그래밍 언어의 구분 방법 중 일부이다. === 언어의 수준에 따른 구분 === 프로그래밍 언어가 사람과 기계 중 어떤 쪽에 더 가까운지에 따른 구분이다. 저급 언어는 기계 종속적이며 기계가 해석하기 좋으나, 프로그래머가 코드의 의미를 해석하기 어려워진다. 고급 언어는 기계 독립적이며 자연어에 가까운 경우가 많아 프로그래머가 문법과 의미를 해석하기 수월하나, 고급 언어로 작성된 코드를 구동하기 위해서는 컴파일러, 또는 인터프리터를 거쳐 기계어로 번역을 해 주어야 한다. * 저급 언어 [[기계어]], 또는 기계어를 치환한 [[어셈블리어]]가 이에 속한다. * 고급 언어 문법을 자연어에 가깝게 하여 프로그래머가 쉽게 해석할 수 있도록 만든 언어이다. 대표적으로 [[C(프로그래밍 언어)|C 언어]]가 있다. === 번역기에 따른 구분 === 고급 언어로 작성된 원시 코드는 번역기가 기계어로 번역한 후 실행된다. 이 때 어떤 번역기에 의해 번역이 이루어지냐에 따라 언어를 구분할 수 있다. * 컴파일 언어 코드의 번역이 컴파일러, 또는 어셈블러 등에 의해 프로그램 시작 전에 이루어지는 언어를 말한다. 대표적으로 C언어, [[C++]] 등, 많은 언어들이 이에 속한다. * 인터프리트 언어 코드의 번역이 프로그램 실행 중에 인터프리터에 의해 동적으로 일어나는 언어를 말한다. [[파이선|Python]] * 하이브리드 언어 원시 코드를 컴파일러를 사용하여 중간 언어로 번역한 후, 이 중간 언어를 인터프리터를 사용하여 실행시키는 언어를 말한다. * 명령적 언어 * 선언적 언어 어떤 일을 프로그램으로 짤 때 그 일을 하기 위한 단계를 하나씩 써 나가는 언어를 '''명령적 언어''', 일에 대해서만 써 놓고 빈칸을 컴퓨터가 채워 넣는 언어를 '''선언적 언어'''라고 한다. 보통 선언적인 언어로 갈수록 과정에는 별 관심이 없는 경우가 많고, 반대로 과정을 잘 제어해야 할 수록 명령적 언어를 써야 한다. === 언어의 패러다임에 따른 구분 === 프로그래밍 방식에는 시대별로 패러다임이 존재하는데, 이러한 프로그래밍 패러다임으로 언어를 구분할 수 있다. 같은 패러다임의 언어들 끼리는 코드 작성 방식이 비슷하여 익히기 쉽지만, 서로 다른 패러다임의 언어들은 문법이나 구조가 상이한 경우가 있다. * 절차적 언어 순서대로 코드를 실행하기 때문에 절차적, 과거부터 사용한 방식이기 때문에 전통적 방식이라고도 한다. 코드의 구동 순서는 정해져 있으며 이 순서대로 코드가 작동한다. 흐름 제어를 제외하면 코드는 거의 변수와 배정문으로 이루어진다. C, Pascal 등 대부분의 언어가 이에 해당된다. * 병렬적 언어 병렬 처리 개념이 등장하며 만들어진 언어들이다. 코드의 실행 순서가 정해져 있지 않기 때문에 비결정적 언어라고도 한다. * 함수형 언어 함수 개념을 도입하여 문제를 해결하는 언어들을 말한다. 절차적 언어에서 반복문을 사용하여 해결하던 문제를 함수형 언어에서는 함수의 재귀 호출을 이용하여 해결하려는 경향이 있다. * 논리형 언어 사실과 규칙이라는 논리적 기술에 기반하여 문제를 해결하는 언어를 논리형 언어라고 한다. Prolog가 대표적인 논리형 언어이다. * 객체지향 언어 어떤 대상의 상태를 저장하는 기억공간과 이에 관련된 연산을 포함하는 객체 개념을 도입하여 문제를 해결하는 언어이다. C++, Java, Python 등이 객체지향 언어이다. === 형 검사에 따른 분류 === 전산학의 태동기에 등장했던 어셈블리어와 같은 언어들은 모든 데이터를 숫자로만 다룰 수 있었고, 그 숫자를 어떤 의미로 사용할지는 무슨 명령을 쓰냐에 따라서 좌우됐었다. 때문에 어느 데이터는 정수로 쓰이고 어느 데이터는 문자로 쓰이고 어느 데이터는 다른 데이터의 주소로 쓰이는지를 사람이 일일히 기억해 가며 써야만 했고, 실수는 바로 버그로 이어지기 일쑤였다. 이에 뒤에 등장하게 된 언어들은 점차 타입 이론을 사용하여 데이터에 타입을 부여하는 방법으로 버그를 조기에 잡고 안전한 방법으로 처리하도록 디자인되게 되었다. 타입을 더 엄격하게 적용할 수록 강한 타입(strong typing) 언어로 분류되며, 반대로 어셈블리어와 같이 타입 개념이 희박하거나, PHP와 JavaScript와 같이 사용성을 위해 다소 관대한 타입 시스템을 적용하는 약한 타입(weak typing) 언어도 존재한다. * 약한 형 언어 * 강성 형 언어 === 바인딩 시기에 따른 구분 === 타입을 언제 확인하느냐에 따라서도 분류를 나눌 수 있는데, 컴파일 시점과 같이 실행 전 시점에 타입이 올바른지를 체크하는 정적 타입(static typing) 언어가 있고, 실행 중에 동적으로 타입을 체크하는 동적 타입(dynamic typing) 언어가 있다. 보통 C나 Java와 같이 컴파일러를 쓰는 언어들이 정적 타입인 경우가 많고, Python이나 JavaScript처럼 별도의 컴파일 시점이 없는 스크립트 언어의 경우 동적 타입을 쓰는 경향이 있다. 하지만 반드시 그런 건 아니고, C#의 dynamic 변수처럼 컴파일을 하면서도 일부분 동적 타입을 쓰도록 허용하는 경우도 있고, TypeScript처럼 동적 타입을 쓰는 환경 위에 정적 타입 시스템을 얹어서 쓰는 경우도 있다. * 동적 타입 언어 * 정적 타입 언어 === 언어의 목적에 따른 구분 === 용도에 따른 구분. 많은 언어는 아무 용도로나 쓸 수 있지만, 어떤 언어는 [[시스템 프로그래밍]]에 특화되어 있고, 어떤 언어는 빠르게 짜고 버리는 코드(스크립트)에 특화되어 있고, [[Brainfuck|어떤 언어]]는 '''[[난해한 프로그래밍 언어|당신의 뇌를 엿먹이는데 특화되어 있다]]'''(...). 물론 용도에 맞는 언어를 쓰는 게 정답. 모든 용도에 최적인 언어 같은 거 없다. * 일반 목적 ↔ 시스템 ↔ 스크립팅 ↔ 난해 ↔ ... == 종류 == *[[ALGOL]] *[[APL]] *[[BASIC|BASIC]] *[[Brainfuck]] *[[C 언어|C]] *[[Common Lisp]] *[[C++|C++]] *[[C#|C#]] *[[D (프로그래밍 언어)|D]] *[[Go]] *[[Fortran|Fortran]] *[[Haskell|Haskell]] *[[Idris]] *[[J (프로그래밍 언어)|J]] *[[Java|Java]] *[[JavaScript|JavaScript]] *[[Lua|Lua]] *[[Objective-C]] *[[Pascal|Pascal]] *[[Perl|Perl]] *[[PHP|PHP]] *[[Python|Python]] *[[Ruby|Ruby]] *[[Rust]] *[[Scala]] *[[Scheme]] *[[Smalltalk]] *[[Swift]] 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:각주 (원본 보기) (준보호됨)