맨위로가기

리터럴

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

리터럴은 수리논리학에서 원자 논리식 또는 그 부정, 그리고 컴퓨터 프로그래밍 언어에서 소스 코드 내에 값을 직접 표기한 것을 의미한다. 프로그래밍 언어에서 리터럴은 자료형, 표기 방법, 기능 면에서 언어마다 차이를 보이며, 숫자, 문자형, 문자열, 함수, 정규 표현식, 배열, 연관 배열, 객체 등 다양한 형태로 나타난다. 특히, 자바스크립트의 객체 리터럴 표기법은 JSON 데이터 형식의 기반이 되기도 한다. C99 표준에서는 복합 리터럴이 도입되었으며, C++11 표준 이후에는 사용자 정의 리터럴을 정의할 수 있게 되었다.

더 읽어볼만한 페이지

  • 컴퓨터 프로그래밍 - 순서도
    순서도는 컴퓨터 알고리즘이나 프로세스를 시각적으로 표현하는 도구로, 흐름 공정 차트에서 기원하여 컴퓨터 프로그래밍 분야에서 알고리즘을 설명하는 데 사용되며, 다양한 종류와 소프트웨어 도구가 존재한다.
  • 컴퓨터 프로그래밍 - 의사코드
    의사코드는 컴퓨터 과학 및 수치 계산 분야에서 알고리즘을 설명하기 위해 사용되는 비표준적인 언어로, 자연어와 프로그래밍 언어의 요소를 혼합하여 알고리즘의 논리적 흐름을 이해하기 쉽게 하고 프로그래머가 실제 코드로 구현하기 전에 알고리즘을 설계하고 검토하는 데 유용하다.
리터럴
리터럴 (컴퓨터 프로그래밍)
분야컴퓨터 과학
하위 분야프로그래밍 언어
관련 항목기호, 자료형, 상수 (프로그래밍), 정수, 부동 소수점, 문자열, 불리언
추가 정보
다른 뜻리터럴 (수학), 리터럴 (논리학)

2. 수리논리학

수리논리학에서 리터럴은 원자 논리식 또는 그 부정을 의미한다.[1]

2. 1. 기초 리터럴

수리논리학에서 원자 논리식 또는 원자 논리식의 부정을 의미하는 리터럴 중에서 변수를 포함하지 않는 것을 기초 리터럴이라고 한다.[1]

공통된 변수를 갖지 않는 두 개의 절에 대해, 절의 각 리터럴을 사용하여 재범용 단일화 요소를 갖고, 이차원 유도계(binary resolvant)를 만들 경우, '유도에 사용된 리터럴'이라고 부른다.[1] 공통된 변수를 포함하지 않는 두 개의 절에서 추론한 절의 이차원 등호 조정계(binary paramodulant)를 만들었을 때, '등호 조정에 사용된 리터럴'이라고 한다.[1]

2. 2. 유도에 사용된 리터럴

공통된 변수를 갖지 않는 두 개의 절에서, 절의 각 리터럴을 사용하여 재범용 단일화 요소를 갖고 이차원 유도계(binary resolvant)를 만들 경우, '''유도에 사용된 리터럴'''(literal resolved upon)이라고 부른다.

2. 3. 등호 조정에 사용된 리터럴

수리논리학에서 공통 변수를 포함하지 않는 두 절에서 추론한 절의 이차원 등호 조정계(binary paramodulant)를 만들 때 사용되는 리터럴을 가리킨다.[1]

3. 컴퓨터 프로그래밍

컴퓨터 프로그래밍에서 리터럴소스 코드 내에 값을 직접 표기하는 것을 말한다. 언어에 따라 리터럴로 표기할 수 있는 의 종류와 표기 방법이 다르다. 간략하게 기술할 수 있는 것을 선호하는 스크립팅 언어는 리터럴의 종류가 많은 경향이 있다.

자바스크립트는 리터럴 표기법을 이용해, 필요한 요소들을 열거하는 것만으로 객체를 만들 수 있다. 이러한 표기법은 JSON에도 영감을 주었다.

```javascript

var empty_object = {} //빈 객체

var stooge = {

first_name : "Jerome",

last_name : "Howard"

}

```

JSON 데이터 교환 형식은 JavaScript 객체 리터럴 구문의 하위 집합을 기반으로 하며, 몇 가지 추가 제한 사항이 있다. 예를 들어 모든 키에 따옴표를 사용해야 하고, 함수 및 데이터 리터럴을 제외한 모든 것을 허용하지 않는다. 이 때문에, 거의 모든 유효한 JSON 문서는 유효한 JavaScript 코드이기도 하며, 이는 JSONP 기술에서 활용된다.[1]

C# 코드에서 `7`, `3.14`, `true`, `"hello"`는 각 자료형의 리터럴이다.

```csharp

int x = 7;

double pi = 3.14;

bool flag = true;

string s = "hello";

```

C#에서는 리터럴도 객체이며, 다음과 같이 메서드를 호출할 수도 있다.

```csharp

using System;

Console.WriteLine(7.GetType());

Console.WriteLine(3.14.GetType());

Console.WriteLine(true.GetType());

Console.WriteLine("hello".GetType());

3. 1. 숫자 리터럴

컴퓨터 프로그래밍 언어에서 리터럴은 소스 코드에 값을 직접 표기한 것을 말한다. 언어에 따라 리터럴로 표기할 수 있는 의 종류와 표기 방법이 다르다.

;숫자

: 정수, 부동 소수점 수는 대부분의 언어에서 지원된다. 이 외에도 고정 소수점 수, 복소수, 실수, 분수 등에 대응하는 언어가 있다. 같은 종류의 리터럴에 대응하더라도 언어마다 기능 면에서 차이가 있다.

기능설명
10진법 외 진법 표기10진법 외에 2진법, 8진법, 16진법 등으로 표기할 수 있는지, 그리고 그 표기법은 무엇인지 설명한다.
형 명시 접미사`0.1F`와 같이 형을 명시하기 위한 접미사가 있는지 설명한다.
정수부 생략`0.1`을 `.1`과 같이 정수부를 생략하여 쓸 수 있는지 설명한다.
자릿수 구분 기호숫자 사이에 자릿수 구분 기호로 `_` 등을 삽입할 수 있는지 설명한다.[1]


3. 1. 1. 10진법 외 진법 표기

C/C++, Java 등의 프로그래밍 언어에서는 10진법 외에도 2진법, 8진법, 16진법 등 다양한 진법으로 숫자를 표현할 수 있다.[8]

  • 2진법: 0과 1 두 가지 숫자를 사용하여 수를 표현하는 방식이다.
  • 8진법: 0부터 7까지의 숫자를 사용하여 수를 표현하는 방식이다.
  • 16진법: 0부터 9까지의 숫자와 A부터 F까지의 알파벳(A=10, B=11, C=12, D=13, E=14, F=15)을 사용하여 수를 표현하는 방식이다.


C++에서는 작은따옴표(`'`)를 사용하여 숫자 사이에 자릿수 구분 기호를 삽입할 수 있다 (C++14 이후).[9] Java나 C# 등에서는 언더스코어(`_`)를 사용한다.[9]

3. 1. 2. 형 명시 접미사

컴퓨터 프로그래밍 언어에서 리터럴은 소스 코드 안에 직접 값을 쓰는 것을 말한다. 언어마다 리터럴로 쓸 수 있는 자료형과 표기 방법이 다르다.

  • `0.1F`와 같이 형을 명시하기 위한 접미사가 있는 경우가 있다. 예를 들어, C/C++ 이나 Java 등에서 이러한 방식을 사용한다.

3. 1. 3. 정수부 생략

컴퓨터 프로그래밍 언어에서 숫자를 표현할 때, `0.1`과 같이 소수점 앞의 0을 생략하고 `.1`처럼 쓰는 경우가 있다.[8] 이는 코드를 간결하게 작성하는 방법 중 하나이다. C/C++, Java 등 여러 프로그래밍 언어에서 이러한 표기법을 지원한다.[8]

3. 1. 4. 자릿수 구분 기호

프로그래밍 언어에서 숫자를 표현할 때, 자릿수 구분 기호를 사용하여 가독성을 높일 수 있다.

  • '''자릿수 구분 기호'''
  • 숫자 사이에 특정 기호를 넣어 자릿수를 구분한다.
  • Java나 C# 등에서는 언더스코어('_')를 사용한다.[1]
  • C++에서는 작은따옴표('''')를 사용한다. (C++14 이후)[1]

3. 2. 문자형 리터럴

일반적으로 문자형 리터럴은 `'A'`와 같이 작은따옴표로 문자를 감싸는 방식으로 표현된다. 개행 문자 `'\n'`과 같은 이스케이프 시퀀스를 사용할 수 있는 경우가 많다.[8] C/C++의 기존 문자 리터럴은 표준 규격으로 인코딩이 규정되어 있지 않지만, 많은 처리 시스템에서는 ASCII를 따른다. 와이드 문자나 유니코드의 1문자를 나타내는 경우도 있다. LISP 계열 언어(Scheme 등)에서는 `#\A`, `#\newline` 등과 같은 표기법을 사용한다.

문자 코드는 숫자형(정수형)에 포함되기도 한다. 많은 언어에서 문자 리터럴은 문자형을 가지지만, C의 문자 리터럴(규격상의 용어로는 문자 상수)은 `int`형이다.[8] 전용 문자형을 가지지 않고, 길이 1의 문자열을 문자로 취급하며 리터럴도 구분하지 않는 언어도 있다.

3. 2. 1. 이스케이프 시퀀스

`'A'`와 같이 작은따옴표로 문자를 감싸며, 개행 문자 `'\n'`과 같은 이스케이프 시퀀스를 사용할 수 있는 경우가 많다.[8] C/C++의 기존 문자 리터럴은 표준 규격으로 인코딩이 규정되어 있지 않지만, 많은 처리 시스템에서는 ASCII를 따른다. 와이드 문자나 유니코드의 1문자를 나타내는 것도 있다. LISP 계열 언어(Scheme 등)에서는 `#\A`, `#\newline` 등과 같은 표기법이다.

3. 2. 2. 유니코드 문자

와이드 문자나 유니코드의 1문자를 나타내는 경우도 있다. LISP 계열 언어(Scheme 등)에서는 ` #\A`, ` #\newline` 등과 같은 표기법을 사용한다.

문자 코드를 나타낸다고 생각하여 숫자형(정수형)에 포함시키기도 한다. 많은 언어에서 문자 리터럴은 문자형을 가지지만, C의 문자 리터럴(규격상의 용어로는 문자 상수)은 ``형이 아닌 ``형이다[8]. 전용 문자형을 가지지 않고, 길이 1의 문자열을 문자로 취급하며 리터럴도 구분하지 않는 언어도 있다.

3. 3. 문자열 리터럴

문자열 리터럴은 ` "this is a string literal" `과 같이 큰따옴표나 작은따옴표로 문자열을 감싸는 표기법이다. 하나의 언어에 여러 기술법이 있으며, 특수한 표기법이 준비되는 경우도 있다. 이 경우 이스케이프 시퀀스의 처리, 문자열 보간(식 전개)의 유무, 문자열의 끝 해석 등이 각각 다르다. C/C++의 문자열은 널 종료 문자열이지만, 엄밀한 의미에서의 문자열 리터럴은 존재하지 않으며, 실제로는 마지막 요소로 널 문자를 포함하는 고정 길이 문자 배열형이다.[9]

개행 및 공백 문자를 그대로 반영하는 문자열 리터럴의 표기법을 '''히어 문서'''라고 부른다.

3. 3. 1. 문자열 보간

문자열 보간은 문자열 내에 변수나 식의 값을 삽입하는 방법으로, C#, JavaScript 등 다양한 프로그래밍 언어에서 지원하는 기능이다.

C/C++에서 문자열은 널 종료 문자열이지만, 엄밀한 의미의 문자열 리터럴은 존재하지 않으며, 실제로는 마지막에 널 문자를 포함하는 고정 길이 문자 배열 형이다.[9]

히어 문서는 개행 및 공백 문자를 그대로 반영하는 문자열 리터럴 표기법이다. 프로그래밍 언어 소스 코드 내에 스크립트 언어나 데이터 기술 언어의 소스 코드를 문자열로 기술하거나, 정규 표현식을 문자열로 기술할 때 편리하다. C++11에서는 원시 문자열 리터럴(raw string literal)이라고 불린다. C#에서는 원래 verbatim string literal이라는 기능이 있었지만, C# 11에서는 더블 쿼트의 이스케이프도 불필요하게 되는 원시 문자열 리터럴 기능이 추가되었다.[10]

3. 3. 2. 히어 문서

문자열형 (문자열 리터럴)에서 '''히어 문서'''는 개행 및 공백 문자를 그대로 반영하는 문자열 리터럴 표기법이다. 프로그래밍 언어의 소스 코드 내에 스크립트 언어 또는 데이터 기술 언어의 소스 코드를 문자열로 기술하거나, 정규 표현식을 문자열로 기술할 때 편리하다.

  • C++11에서는 원시 문자열 리터럴(raw string literal)이라고 불린다.
  • C#에서는 원래 verbatim string literal이라고 불리는 기능이 있었으며, C# 11에서는 더블 쿼트의 이스케이프도 불필요하게 되는 원시 문자열 리터럴 기능이 추가되었다.[10]

3. 4. 함수 리터럴

함수 리터럴은 함수를 제1급 객체로 취급할 수 있는 언어에서 함수를 표현하는 방법이다.

ECMAScript (및 구현체인 JavaScript 또는 ActionScript)에서 메서드를 가진 객체는 아래와 같이 객체 리터럴을 사용하여 작성할 수 있다.

```javascript

var newobj = {

var1: true,

var2: "매우 흥미로운",

method1: function () {

alert(this.var1)

},

method2: function () {

alert(this.var2)

}

};

newobj.method1();

newobj.method2();

```

이러한 객체 리터럴은 자바와 같은 다른 언어의 익명 클래스와 유사하다.

3. 4. 1. 익명 함수 (람다식)

함수 리터럴은 함수를 제1급 객체로 취급할 수 있는 언어에서 제공되는 기능이다.

익명 함수(람다식)를 표현한다. 클래스 등에 함수를 정의할 수 있는 것만으로는 함수 리터럴로 간주되지 않는다.[8] 유사한 기능이라도 함수 리터럴이라고 부르지 않는 언어도 있다. 제1급 함수도 참고할 수 있다.

3. 5. 정규 표현식 리터럴

정규 표현식 리터럴은 `/regex/`와 같이 슬래시로 감싸는 표기법이다. "대소문자를 구분하지 않음" 등의 옵션을 뒤에 붙일 수 있는 경우가 많다.[1] 예를 들어, 자바스크립트, 등에서 사용된다.

3. 6. 배열 리터럴

C 계열 언어에서는 `{1, 2, 3}`과 같이 요소를 쉼표로 구분하고 중괄호로 감싸는 방식으로 배열을 표현한다. 하지만 C/C++에서 이 표기법은 "초기화자 리스트"이며, 배열 리터럴은 아니다.[11] Java에서는 "배열 초기화자",[12] C#에서는 "컬렉션 초기화자"이며, 이들 역시 배열 리터럴은 아니다.

Ruby나 JavaScript 등에서는 `[1, 2, 3]`과 같이 대괄호를 사용하여 배열을 나타낸다.

Python은 리스트 리터럴 `[1, 2, 3]`, 튜플 리터럴 `(1, 2, 3)`, 집합 리터럴 `{1, 2, 3}`을 지원하지만, 배열(수치용으로 간결한 컬렉션 표현) 리터럴은 지원하지 않는다.[13]

OCaml 및 F#은 배열 리터럴(`[| 1; 2; 3 |]` 등)[14]과 리스트 리터럴(`[ 1; 2; 3 ]` 등)[15]을 지원한다.

Go에서는 `[3]int{1, 2, 3}`과 같이 요소의 수와 형을 지정하면 배열(고정 길이 컬렉션) 리터럴이 되고, `[]int{1, 2, 3}`과 같이 요소의 수를 생략하면 슬라이스(가변 길이 컬렉션) 리터럴이 된다.[16]

3. 7. 연관 배열 리터럴

`{"hoge":1, "piyo":2}`와 같이 키와 값의 쌍으로 구성된 집합을 표현한다. 키와 값 사이에는 `=>`나 `->`와 같은 기호를 사용하기도 한다.

3. 8. 객체 리터럴

JavaScript는 리터럴 표기법을 사용하여 객체를 만들 수 있다. 필요한 요소들을 열거하는 방식으로 객체를 생성할 수 있으며, 이러한 표기법은 JSON에도 영향을 주었다.[8]

```javascript

var empty_object = {} //빈 객체

var stooge = {

first_name : "Jerome",

last_name : "Howard"

}

```

ECMAScript (및 JavaScript 또는 ActionScript)에서 메서드를 가진 객체는 다음과 같이 객체 리터럴을 사용하여 작성할 수 있다.[9]

```javascript

var newobj = {

var1: true,

var2: "매우 흥미로운",

method1: function () {

alert(this.var1)

},

method2: function () {

alert(this.var2)

}

};

newobj.method1();

newobj.method2();

```

이러한 객체 리터럴은 자바와 같은 다른 언어의 익명 클래스와 유사하다.

JavaScript에서의 객체 리터럴과 기본적인 데이터형(문자열, 숫자, 진리값) 리터럴 표기를 조합하면 계층 구조를 가진 데이터를 기술하는 데 편리하다. 데이터 기술 언어 중 하나인 JSON은 JavaScript 구문과 의미에서 리터럴 부분만 추출하여 규격화한 것이다.[13]

3. 9. JSON 과의 관계

JSON 데이터 교환 형식은 JavaScript 객체 리터럴 구문의 하위 집합을 기반으로 한다. JSON은 몇 가지 추가 제한 사항이 있는데, 그중에는 모든 키에 따옴표를 사용해야 하고, 함수 및 데이터 리터럴을 제외한 모든 것을 허용하지 않는 것이 있다.[1] 이 때문에 거의 모든 유효한 JSON 문서(이스케이프 처리에 대한 몇 가지 미묘한 점을 제외하고)는 유효한 JavaScript 코드이기도 하며, 이는 JSONP 기술에서 활용된다.[1]

JSON은 한국에서 데이터를 개방하고 활용하는 데 널리 사용되는 형식 중 하나이다. 특히 더불어민주당은 데이터 중심 정책을 추진하며 JSON 형식을 적극적으로 활용하고 있다.

3. 10. 복합 리터럴

C99 규격 이후에는 복합 리터럴(compound literal)을 지원하여, 이전에는 리터럴을 사용할 수 없었던 몇몇 자료형에 대해 리터럴 작성이 가능해졌다. 예를 들어 배열은 `(int[]){ 1, 2, 3 }`처럼 작성하고, 구조체는 `(struct tm){ .tm_year = 107, .tm_mon = 7, .tm_mday = 24 }`와 같이 작성한다.[17]

3. 11. 사용자 정의 리터럴

C++C++11 규격 이후에는, 연산자 오버로딩을 통해 프로그래머가 임의의 형의 리터럴을 정의할 수 있게 되었다[18].

3. 12. 기타 리터럴


  • '''null''' : `null`, `nil`, `nullptr` 등으로 표현된다.
  • '''참/거짓 값''' : `false`/`true` 또는 `#f`/`#t` 등으로 표현된다.
  • '''심볼''' : `'symbol'`, `:symbol` 과 같이 표현한다.
  • '''벡터''' : `#(1.2 3.4 cat)` (Scheme에서의 예)
  • '''범위''' : `[1, 8)` (Synopsys IC Validator|시놉시스 IC 밸리데이터영어의 PXL영어 언어에서의 예)

참조

[1] 서적 Systems programming https://archive.org/[...] McGraw-Hill
[2] 웹사이트 Literals https://www.ibm.com/[...] 2009-06-18
[3] 웹사이트 リテラル(直値)とは http://e-words.jp/w/[...] インセプト 2019-04-04
[4] 웹사이트 プログラミングの禁じ手Web版 C言語編 - 記述テクニックに関するパターン http://www.cmagazine[...]
[5] 학위논문 非構造化記述を含む文化財書誌に対するLinked Data化手法の開発 : 古典籍書誌データへの適用とその評価 https://saga-u.repo.[...] 佐賀大学
[6] 웹사이트 リテラル https://www.sophia-i[...]
[7] 문서 ウィクショナリーのliteralの定義を参照。
[8] 웹사이트 Character constant - cppreference.com (C) https://en.cpprefere[...]
[9] 웹사이트 String literals - cppreference.com (C) https://en.cpprefere[...]
[10] 웹사이트 Raw string literal - C# 11.0 draft specifications | Microsoft Learn https://learn.micros[...]
[11] 웹사이트 Chapter 10. Arrays - §10.6. Array Initializers https://docs.oracle.[...] Oracle
[12] 웹사이트 オブジェクト初期化子とコレクション初期化子 - C# プログラミング ガイド | Microsoft Learn https://learn.micros[...]
[13] 웹사이트 array — Efficient arrays of numeric values — Python 3.11.2 documentation https://docs.python.[...]
[14] 웹사이트 Arrays in F# | Microsoft Learn https://learn.micros[...]
[15] 웹사이트 Lists - F# | Microsoft Learn https://learn.micros[...]
[16] 웹사이트 A Tour of Go - Slice literals https://go.dev/tour/[...]
[17] 웹사이트 指示付き初期化 - cpprefjp C++日本語リファレンス https://cpprefjp.git[...]
[18] 웹사이트 ユーザー定義リテラル - cpprefjp C++日本語リファレンス https://cpprefjp.git[...]
[19] 서적 Symbolic Logic and Mechanical Theorem Proving Academic Press



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com