변수 (컴퓨터 과학)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
변수는 컴퓨터 프로그래밍에서 데이터를 저장하고 참조하기 위한 명칭이다. 변수는 범위, 수명, 형(type), 선언, 대입, 참조 등의 특징을 가지며, 프로그래밍 언어에 따라 다양한 방식으로 구현된다. 변수의 범위는 변수가 사용될 수 있는 프로그램 텍스트 영역을 의미하며, 정적 범위와 동적 범위로 나뉜다. 변수의 수명은 메모리 할당이 보장되는 기간을 나타내며, 지역 변수와 전역 변수 등으로 구분된다. 변수는 특정 유형의 값만 저장할 수 있으며, 정적 타이핑 언어와 동적 타이핑 언어에서 다르게 처리된다. 변수의 선언, 대입, 참조는 프로그램에서 변수를 다루는 주요 연산이며, 매개변수와 메모리 할당 방식 또한 변수의 중요한 측면이다. 변수 명명 규칙은 언어별로 다르며, 가독성을 위해 명확하고 일관된 이름을 사용하는 것이 중요하다.
더 읽어볼만한 페이지
- 변수 (컴퓨터 과학) - 멤버 변수
멤버 변수는 객체 지향 프로그래밍에서 객체의 속성을 저장하고 관리하며 객체의 상태를 나타내는 변수로, 지역 변수와 달리 객체의 생명 주기와 함께 값을 유지한다. - 변수 (컴퓨터 과학) - 정적 변수
정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다. - 프로그래밍 언어 개념 - 참조
참조는 프로그래밍에서 메모리 주소나 다른 데이터를 가리키는 값으로, 데이터의 효율적인 전달과 공유를 위해 사용되며, 포인터, 파일 핸들, URL 등이 그 예시이다. - 프로그래밍 언어 개념 - 자료형
자료형은 프로그래밍 언어에서 데이터를 분류하고 관리하는 추상적인 분류 체계로, 값의 표현, 해석 및 구조에 제약 조건을 가하여 프로그램의 정확성을 검증하며, 단순형/복합형, 언어 정의형/사용자 정의형 등으로 분류되고 문자형, 수치형, 부울형 등 다양한 종류가 있다. - 유형 이론 - 형 변환
형 변환은 프로그래밍에서 변수의 데이터 타입을 변경하는 것으로, 암시적 형 변환과 명시적 형 변환으로 나뉘며, 객체 지향 프로그래밍에서는 업캐스팅과 다운캐스팅이 발생하고, 각 언어는 고유한 규칙과 방법을 제공하며 잘못된 형 변환은 오류를 유발할 수 있다. - 유형 이론 - 대수적 자료형
대수적 자료형은 합 타입과 곱 타입을 조합하여 새로운 자료형을 정의하는 방법으로, 단일 연결 리스트나 이진 트리와 같은 자료 구조를 표현하고 패턴 매칭을 통해 자료형의 구조를 분해 및 처리하는 데 유용하며, 함수형 프로그래밍 언어에서 널리 사용된다.
변수 (컴퓨터 과학) | |
---|---|
변수 (컴퓨터 과학) | |
기본 정보 | |
![]() | |
자료형 | 부울 대수 문자열 정수 부동소수점 |
정의 | 프로그램에서 값을 참조하거나 저장하는 데 사용되는 명명된 저장 위치 |
특징 | 이름, 주소, 값, 자료형을 가짐 |
활용 | |
용도 | 데이터 저장 및 참조 계산 결과 저장 프로그램 상태 추적 |
프로그래밍 패러다임 | 명령형 프로그래밍 객체 지향 프로그래밍 함수형 프로그래밍 |
상세 정보 | |
스코프 | 변수의 범위 |
생명 주기 | 변수가 메모리에 할당되어 사용 가능한 상태로 유지되는 기간 |
자료형 검사 | 정적 타이핑 동적 타이핑 |
역사 | |
기원 | 초기 프로그래밍 언어 (FORTRAN, COBOL) |
발전 | 추상화 수준 증가, 다양한 자료형 지원 |
프로그래밍 언어별 특징 | |
C 언어 | 명시적인 자료형 선언 필요, 포인터 사용 가능 |
Python | 동적 타이핑, 간결한 문법 |
Java | 객체 지향 프로그래밍 지원, 엄격한 자료형 검사 |
관련 개념 | |
상수 | 변하지 않는 값 |
포인터 | 메모리 주소를 저장하는 변수 |
참조 | 변수의 별칭 |
2. 범위
변수의 '''스코프'''(Scope, 범위)는 프로그램 소스 코드 텍스트 내에서 해당 변수 이름을 사용할 수 있는 영역, 즉 변수가 "보이는" 또는 "가시적인" 코드상의 구역을 의미한다.[11] 반면, 변수의 '''수명'''(Lifetime) 또는 '''익스텐트'''(Extent)는 프로그램 실행 중에 변수가 유효한 값이나 메모리 위치를 가지고 있는 시간을 뜻한다. 변수의 스코프는 변수 이름의 속성이며, 수명은 변수가 저장되는 메모리 공간의 속성이다. 일반적으로 스코프는 변수의 수명에 영향을 미치는데, 특정 스코프에 진입하면 변수의 수명이 시작되고, 스코프를 벗어나면 수명이 끝나는 경우가 많다.
스코프는 변수 이름 확인 과정에서 중요한 역할을 한다. 대부분의 프로그래밍 언어는 각 변수마다 특정 스코프를 정의하며, 이는 프로그램 내에서 다를 수 있다. 스코프는 주로 두 가지 방식으로 결정된다.
- '''렉시컬 스코프'''(Lexical Scope) 또는 '''정적 스코프'''(Static Scope): 변수의 스코프가 소스 코드의 구조(예: 함수, 블록)에 따라 결정된다. 코드를 작성할 때 정적으로 결정되며, 컴파일 시점에 확인될 수 있다. 예를 들어, C 언어에서 함수 내부에 선언된 변수는 해당 함수 내부(함수 스코프)나 특정 코드 블록(블록 스코프) 안에서만 유효하다.
- '''동적 스코프'''(Dynamic Scope): 변수의 스코프가 프로그램의 실행 흐름(함수 호출 순서 등)에 따라 런타임에 결정된다.[12]
스코프에 따라 변수는 '''지역 변수'''(Local Variable)와 '''전역 변수'''(Global Variable) 등으로 구분된다. 지역 변수는 특정 함수나 코드 블록 같은 제한된 스코프 내에서만 접근 가능하며, 전역 변수는 프로그램 전체 영역에서 접근할 수 있다.
스코프가 다르면 같은 이름의 변수를 서로 다른 의미로 사용할 수 있다. 예를 들어 함수 `f()` 안에 선언된 변수 `x`와 함수 `g()` 안에 선언된 변수 `x`는 이름은 같지만 서로 다른 메모리 공간을 가지는 별개의 변수이다. 스코프가 중첩된 경우, 안쪽 스코프에서 바깥쪽 스코프의 변수 이름과 같은 이름을 사용하면, 안쪽 스코프에서는 해당 이름이 안쪽 변수를 가리키게 되어 바깥쪽 변수가 가려지는 현상(변수 섀도잉)이 발생하기도 한다.
변수의 스코프를 적절히 관리하는 것은 메모리 관리와도 관련이 있다. 효율성을 위해 변수에 필요한 메모리는 해당 변수가 처음 사용될 때 할당하고, 더 이상 필요하지 않을 때(스코프를 벗어날 때) 해제하는 것이 일반적이다. 하지만 가비지 컬렉션 기능이 없는 언어에서는, 변수의 수명이 스코프보다 길게 유지될 경우 해당 메모리를 해제할 방법이 없어 메모리 누수가 발생할 수 있다. 반대로, 리스프(Lisp)의 클로저나 C 언어의 정적 지역 변수처럼 변수 바인딩이 스코프를 벗어나도 유지되는 경우도 있다.
스코프가 시작되기 전에 변수에 접근하면 값이 할당되지 않은 '''초기화되지 않은 변수''' 상태일 수 있으며, 이 경우 예측 불가능한 값을 가지거나 오류가 발생할 수 있다. 또한, 변수의 수명이 끝난 후에 해당 메모리 위치에 접근하려고 하면 '''댕글링 포인터''' 문제가 발생할 수 있다. 많은 언어에서는 유효하지 않거나 초기화되지 않은 상태를 나타내기 위해 `null`이나 `nil` 같은 특별한 값을 사용하기도 한다.
좋은 프로그래밍 습관은 변수의 스코프를 가능한 한 좁게 유지하는 것이다. 이는 프로그램의 서로 다른 부분이 의도치 않게 서로의 변수를 수정하는 것을 방지하여 오류 가능성을 줄이고(캡슐화), 코드의 특정 변경이 예상치 못한 다른 부분에 영향을 미치는 원격 작용을 막는 데 도움이 된다. 이를 위해 네임스페이스를 분리하거나, 변수를 특정 영역에서만 접근 가능하도록 제한하는 기법(예: 접근 제어자 사용) 등이 활용된다.
3. 수명
변수의 수명(lifetime영어) 또는 존속 기간은 프로그램 실행 중에 변수가 메모리에 할당되어 유효한 값을 가지는 기간을 의미한다.[13] 변수의 스코프가 프로그램 텍스트에서 변수 이름이 유효한 범위를 나타내는 것과 달리, 수명은 프로그램 실행 시간 동안 변수가 실제로 존재하는 기간을 나타낸다. 변수의 수명은 해당 변수의 저장 위치(메모리)와 관련된 속성이다.
변수의 수명은 메모리의 확보 및 해제와 밀접한 관련이 있다. 변수가 수명 내에 있을 때, 해당 변수는 메모리 공간을 차지하고 값을 저장하며 접근할 수 있다.[14] 수명이 끝나면 변수가 사용하던 메모리 공간은 다른 용도로 사용될 수 있도록 해제된다.
- 자동 변수 (스택-동적 변수): 일반적으로 함수나 코드 블록이 실행될 때 생성되고, 해당 함수나 블록이 종료되면 자동으로 소멸한다. 수명이 끝나면 메모리가 즉시 회수된다. 예를 들어 C나 C++의 함수 내 지역 변수(static 키워드 없이 선언된)가 이에 해당한다.
- 정적 변수: 프로그램이 시작될 때 메모리에 할당되어 프로그램이 종료될 때까지 계속 유지된다. 전역 변수나 함수 내부에 static 키워드로 선언된 변수가 대표적이다.
가비지 컬렉션 기능을 지원하는 프로그래밍 언어에서는 더 이상 사용되지 않는(수명이 끝난) 변수가 차지하고 있던 메모리를 시스템이 자동으로 감지하여 해제해 준다. 이는 프로그래머가 직접 메모리를 관리해야 하는 부담을 줄여주고 메모리 누수와 같은 오류를 방지하는 데 도움을 준다. 가비지 컬렉션이 없는 언어에서는 수명이 끝났음에도 메모리가 해제되지 않으면 메모리 누수가 발생할 수 있다.
변수의 스코프와 수명은 항상 일치하지는 않는다. 예를 들어, C나 C++에서는 함수 내부에 정적 지역 변수(static 키워드를 사용한 지역 변수)를 선언할 수 있다.[19][20] 이 변수는 해당 함수 내부에서만 접근 가능하지만(스코프는 함수 내부로 제한됨), 프로그램 실행 시간 동안 계속 메모리에 남아 있다(수명은 프로그램 전체). 즉, 함수 호출이 끝나 스코프를 벗어나도 변수의 값은 유지되며, 다음에 함수가 호출될 때 이전 값을 그대로 사용할 수 있다.
변수의 수명 관리는 중요하다. 수명이 시작되기 전에 변수에 접근하면 초기화되지 않은 상태일 수 있으며, 이는 예기치 않은 동작이나 오류를 유발할 수 있다. 반대로, 변수의 수명이 끝난 후에 해당 메모리 위치에 접근하려고 하면 댕글링 포인터 문제가 발생하여 프로그램 오류나 보안 취약점으로 이어질 수 있다.[15] 많은 언어에서는 유효하지 않거나 초기화되지 않은 변수를 나타내기 위해 ''null'' 또는 ''nil''과 같은 특별한 값을 사용하기도 한다.
효율적인 메모리 사용을 위해 변수는 필요한 시점에만 메모리를 할당받고, 더 이상 필요하지 않으면 해제하는 것이 좋다. 컴파일러는 때때로 선언되었지만 사용되지 않는 변수에 대해 경고하여 불필요한 메모리 낭비를 막도록 돕는다. 또한, 변수의 스코프를 가능한 한 좁게 만들어 프로그램의 다른 부분에 예기치 않은 영향을 미치는 것을 방지하는 것이 좋은 프로그래밍 습관으로 여겨진다.
언어에 따라 수명을 지칭하는 용어는 다양하다. C와 C++에서는 존속 기간(lifetime) 또는 저장 기간(storage duration)[16], Common Lisp에서는 익스텐트(extent)[17], C#에서는 유효 기간(lifetime)[18] 등으로 불린다.
4. 형 (타이핑)
정적으로 타입이 지정된 언어인 C, C++, Java 또는 C#에서는 변수가 '타입(type)'을 가지며, 이는 특정 종류의 값만 저장할 수 있음을 의미한다. 예를 들어, "정수" 타입의 변수에는 텍스트 값을 저장할 수 없다.[5] 대부분의 정적 타입 프로그래밍 언어에서는 변수를 선언할 때 이름뿐만 아니라 자료형도 지정해야 한다. 이를 통해 각 변수가 처리할 수 있는 데이터의 종류를 제한하고, 프로그램의 타입 안전성(type safety)을 보장할 수 있다. 데이터에 수행할 수 있는 처리는 일반적으로 데이터 타입에 따라 다르므로, 데이터 타입을 엄격하게 검사하는 것은 잘못된 프로그램 작성을 방지하는 데 도움이 된다.
반면, 동적으로 타입이 지정된 언어인 파이썬에서는 변수의 타입이 값에 의해 추론되며, 값에 따라 변경될 수 있다. Common Lisp에서는 두 상황이 동시에 존재한다. 변수는 컴파일 시간에 존재하는 타입(선언되지 않은 경우 'T', 즉 보편적인 상위 타입으로 간주됨)을 가지며, 값 또한 런타임에 검사하고 조회할 수 있는 타입을 가진다.
변수에 타입을 지정하는 것은 컴파일 타임에 다형성을 해결하는 데 사용될 수도 있다. 그러나 이는 변수에 허용된 상위 타입이 아닌 값의 타입을 기반으로 호출을 해결하는 객체 지향 함수 호출(C++에서는 ''가상 함수''라고 함)에 사용되는 다형성과는 다르다.
변수는 주로 정수나 리터럴 문자열과 같은 간단한 데이터를 저장하지만, 일부 프로그래밍 언어에서는 변수가 다른 데이터 타입의 값도 저장할 수 있도록 허용한다. 이러한 언어는 함수가 매개변수 다형성을 갖도록 만들 수도 있다. 이러한 함수는 변수처럼 작동하여 여러 타입의 데이터를 나타낸다. 예를 들어, 'length'라는 함수는 목록의 길이를 결정할 수 있는데, 이 함수는 목록 요소의 수와 요소의 타입이 무관하기 때문에 형식 시그니처에 타입 변수를 포함하여 매개변수 다형성을 가질 수 있다.
많은 정적 타입 프로그래밍 언어에는 프로그래머가 타입을 명시하지 않아도 언어 처리 시스템(컴파일러)이 타입 시스템에 기반하여 문맥으로부터 타입을 자동으로 추론하는 타입 추론 기능이 있다. 타입 추론을 지원하는 언어에서는 변수 선언 시 초기화 식(우변 값)으로부터 타입을 추론하여 타입 이름의 기재를 생략할 수도 있다. 단, 타입 추론에 의해 결정된 타입은 불변이며, 재할당에 의해 변수가 나타내는 값의 타입이 바뀌지는 않는다. 함수형 프로그래밍 언어는 기본적으로 타입 추론을 지원하며, 기존의 절차적 프로그래밍 언어(객체 지향 언어 포함)에도 타입 추론 기능이 도입되는 경우가 많다.
5. 선언, 대입, 참조
일반적으로 프로그램에서 변수를 다루는 주요 조작은 선언, 대입, 참조의 세 가지이다. 프로그래밍 언어에 따라 변수의 취급 방식이 다소 다르므로 여기서는 일반적인 사항에 한정하여 설명한다.
프로그램 내에서 어떤 이름의 변수를 사용할 것인지를 프로그래밍 언어의 문법에 따라 명확히 나타내는 것을 변수의 선언이라고 한다.
대부분의 정적 타입 프로그래밍 언어에서는 변수를 선언할 때 그 이름뿐만 아니라 그 데이터 타입도 지정해야 한다. 이를 통해 각 변수가 처리할 수 있는 데이터의 종류를 제한하여 프로그램의 타입 안전성을 보장할 수 있다. 데이터에 대해 수행할 수 있는 처리는 데이터 타입에 따라 다르므로, 데이터 타입을 엄격하게 검사하는 것은 잘못된 프로그램을 작성하는 것을 방지하는 데 도움이 된다.
반면, 동적 프로그래밍 언어에서는 통상적으로 동적 타입이 이루어지며, 별도의 선언 없이 변수를 사용할 수 있는 경우가 많다.
많은 정적 타입 프로그래밍 언어에서는 프로그래머가 타입을 명시하지 않아도, 언어 처리 시스템(컴파일러)이 타입 시스템에 기초하여 자동으로 문맥으로부터 타입을 추론하는 기능을 제공하는데, 이를 타입 추론이라고 부른다. 타입 추론을 지원하는 언어에서는 변수 선언 시 초기화 식(우변값)으로부터 타입을 추론하여, 타입 명칭의 기재를 생략할 수도 있다. 단, 동적 타입과는 달리, 타입 추론에 의해 결정된 타입은 불변이며, 재할당에 의해 변수가 나타내는 값의 타입이 바뀌는 일은 없다. 함수형 프로그래밍 언어는 표준적으로 타입 추론을 지원하며, 기존의 절차적 프로그래밍 언어(객체 지향 언어 포함)에도 타입 추론 기능이 도입되는 경우가 많다.
선언된 변수에 실제로 데이터를 연결하는 것을 대입이라고 한다.
프로그래밍 언어에 따라 변수의 선언과 대입을 한 번에 수행할 수 있다. 변수를 선언하지 않고 바로 대입할 수 있는 언어도 있는데, 이는 선언되지 않은 변수에 대해 처리 시스템이 자동으로 선언을 보충해주는 것으로 생각할 수 있다. 어떤 변수에 처음으로 수행하는 대입은 특히 초기화라고 한다.
많은 절차적 프로그래밍 언어에서는 변수에 여러 번 대입할 수 있다. 이미 대입이 이루어진 변수에 다시 대입을 하면, 해당 변수와 그 전까지의 데이터와의 관계는 없어지고, 새로운 데이터와 다시 연결된다.
함수형 프로그래밍 언어에서는 하나의 변수에 한 번만 대입할 수 있는 경우가 많다. 이러한 언어에서는 선언과 초기화를 함께 수행하는 것이 일반적이며, 하나의 변수가 항상 같은 값을 갖는 것(값이 변하지 않음)이 보장된다 (참조 투명성). 함수형 프로그래밍 언어에서는 특히 이 재대입을 허용하지 않는 연결을 바인딩이라고 부른다.
변수에 대입된 데이터를 이용하는 것을 변수의 참조라고 한다.
한 번도 대입을 하지 않은, 즉 초기화하지 않은 변수를 참조하는 것은 의미가 없으며 부적절하다. 예를 들어, 초기화되지 않은 지역 변수를 참조하면, C 언어나 C++에서는 정의되지 않은 동작을 일으키고[10], Java나 C#에서는 컴파일 에러를 일으킨다.
하지만 일부 프로그래밍 언어의 특정 변수에서는, 명시적인 초기화식이 없더라도 변수를 정의하는 단계에서 자동으로 어떠한 데이터(통상 0 또는 0에 준하는 값)가 기본값으로 변수와 연관된다. 이러한 경우에는 초기화를 명시적으로 기술하지 않아도 변수를 참조할 수 있다. 예를 들어, C/C++의 정적 기억 영역 기간을 갖는 변수나 Java/C#의 필드 등이 있다.
6. 매개변수
함수의 ''형식 매개변수''(또는 ''형식 인자'')는 변수로도 지칭된다. 예를 들어, 다음의 파이썬 코드 조각에서,
>>> def addtwo(x):
... return x + 2
...
>>> addtwo(5)
7
''x''라는 이름의 변수는 함수가 호출될 때 값을 받기 때문에 ''매개변수''이다. 정수 5는 ''x''에 값을 제공하는 ''인자''이다. 대부분의 언어에서 함수 매개변수는 지역 범위를 갖는다. ''x''라는 이 특정 변수는 ''addtwo'' 함수 내에서만 참조될 수 있다 (물론 다른 함수도 ''x''라는 변수를 가질 수 있다).
7. 메모리 할당
변수의 메모리 할당 방식과 값의 표현은 사용하는 프로그래밍 언어와 그 구현 방식에 따라 매우 다양하다. 많은 언어 구현에서는 함수가 호출될 때 생성되었다가 함수 실행이 끝나면 자동으로 메모리가 회수되는 지역 변수를 위한 공간을 스택(stack)에 할당한다.
반면, 참조(reference)는 컴파일 시점에 값의 크기가 매우 크거나 미리 알 수 없는 변수를 다룰 때 주로 사용된다. 이런 변수들은 값 자체를 직접 저장하는 대신, 힙(heap)이라는 별도의 메모리 공간에 저장된 값의 위치(주소)를 가리킨다.
힙에 할당된 메모리(객체)는 더 이상 필요하지 않을 때 반드시 회수되어야 한다. 가비지 컬렉션(garbage collection) 기능이 있는 언어들(예: C#, Java, 파이썬, Golang, Lisp)에서는 프로그램 실행 환경(런타임 환경)이 알아서 더 이상 사용되지 않는 객체를 찾아 메모리를 회수한다.
하지만 C와 같이 가비지 컬렉션 기능이 없는 언어에서는 프로그래머가 직접 메모리를 할당하고 사용 후에는 반드시 해제해야 한다. 만약 메모리를 해제하지 않으면, 프로그램이 실행되는 동안 사용 가능한 메모리가 점점 줄어들어 결국 메모리 누수로 인해 프로그램이 비정상적으로 종료될 수 있다.
변수가 동적으로 생성된 복잡한 자료 구조를 참조할 때는 상황이 더 복잡해진다. 이 경우, 변수를 통해서만 간접적으로 접근 가능한 자료 구조의 일부 요소들이 있을 수 있다. 가비지 컬렉터는 이러한 상황을 고려하여, 변수로부터 도달 가능한 메모리 영역만을 정확히 식별하고 회수해야 한다.
공간 효율성을 높이기 위해, 변수에 필요한 메모리 공간은 해당 변수가 처음 사용될 때 할당하고 더 이상 필요하지 않을 때 바로 해제하는 방식을 사용하기도 한다.
8. 명명 규칙
수학에서 변수를 한 글자로 표현하는 것과 달리, 프로그래밍에서는 변수나 상수에 보통 여러 글자로 된 이름을 사용한다. 예를 들어 'COST'나 'total'처럼 쓴다. 'i', 'j', 'k'와 같은 한 글자 이름은 주로 배열 인덱스 같은 보조 변수에만 사용된다.
변수 이름을 짓는 데에는 몇 가지 규칙이 있다. 이는 프로그래밍 언어 자체에서 정한 문법 규칙으로, 어떤 이름이 유효한지를 결정한다. 거의 모든 언어에서 변수 이름은 숫자로 시작할 수 없고, 공백을 포함할 수 없다. 구두점 사용 가능 여부는 언어마다 다른데, 많은 언어에서는 밑줄('_')만 허용하고 다른 구두점은 금지한다. 어떤 언어에서는 변수의 데이터 유형이나 사용 범위를 나타내기 위해 시길(기호나 구두점)을 이름 앞에 붙이기도 한다.
변수 이름의 대소문자 구분 여부도 언어마다 다르다. 어떤 언어는 특정 대상을 명명할 때 정해진 대소문자 규칙을 따라야 하기도 한다.[6] 대부분의 최신 프로그래밍 언어는 대소문자를 구분하지만, 오래된 언어 중에는 그렇지 않은 경우도 있다. 또한, 특정 형태의 변수 이름은 언어 내부적으로 사용하기 위해 예약되어 있기도 하다. 예를 들어, 많은 언어에서 밑줄 두 개("__")로 시작하는 이름이 여기에 해당한다.
하지만 언어가 정한 기본적인 제약을 제외하면, 변수 이름은 주로 스타일에 관한 문제이다. 컴퓨터가 프로그램을 실행하는 기계어 수준에서는 변수 이름이 사용되지 않으므로, 어떤 이름을 쓰든 컴퓨터 자체에는 중요하지 않다. 따라서 변수 이름은 프로그래머가 프로그램을 더 쉽게 작성하고 이해하도록 돕는 도구일 뿐이다. 잘못 지은 이름은 오히려 코드를 이해하기 어렵게 만들 수 있으므로, 변수의 역할을 명확히 드러내는 이름을 사용하는 것이 좋다.[7][8]
프로그래머들은 종종 변수 이름을 짓는 규칙이나 명명 체계를 담은 코드 스타일 가이드라인을 만들어 따른다. 이름이 짧으면 입력하기는 편하지만, 그 의미를 파악하기는 어렵다. 반면 이름이 길면 프로그램을 읽고 변수의 목적을 이해하기는 쉽지만, 너무 길면 오히려 코드를 복잡하게 만들 수도 있다.
참조
[1]
서적
"[[Compilers: Principles, Techniques, and Tools]]"
1986
[2]
서적
The Art of Computer Programming
Addison-Wesley
1997
[3]
웹사이트
Programming with variables
https://www.khanacad[...]
2020-03-23
[4]
웹사이트
Scratch for Budding Coders
https://cs.harvard.e[...]
Harvard
2020-03-23
[5]
웹사이트
Static typing - MDN Web Docs Glossary: Definitions of Web-related terms
https://developer.mo[...]
2024-05-06
[6]
문서
[7]
웹사이트
How Not To Pick Variables
http://www.dotcadot.[...]
2012-07-11
[8]
citation
To hell with "meaningful identifiers"!
http://www.cs.utexas[...]
[9]
서적
bit 単語帳
共立出版
1990-08-15
[10]
웹사이트
EXP33-C. 初期化されていないメモリからの読み込みを行わない
https://www.jpcert.o[...]
[11]
문서
[12]
웹사이트
https://www.cs.cmu.e[...]
[13]
인용
[14]
인용
[15]
인용
[16]
문서
[17]
웹사이트
3. Scope and Extent | Common Lisp the Language, 2nd Edition
https://www.cs.cmu.e[...]
[18]
문서
[19]
웹사이트
記憶域クラス指定子 (C) - cppreference.com
https://ja.cpprefere[...]
[20]
웹사이트
記憶域クラス指定子 (C++) - cppreference.com
https://ja.cpprefere[...]
[21]
웹사이트
C23 - cppreference.com
https://en.cpprefere[...]
[22]
문서
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com