자동 변수
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
자동 변수는 프로그래밍 언어에서 코드 블록 내에 선언되어 자동으로 할당 및 해제되는 변수를 의미한다. C와 C++에서는 기본적으로 모든 변수가 자동 변수이며, `auto` 저장 클래스 지정자를 사용할 수 있지만 불필요하다. C++에서는 선언 시 생성자가 호출되고 블록 종료 시 소멸자가 호출되어 자원 관리에 활용된다. Java에서는 지역 변수라고 불리며, 명시적으로 초기화되지 않으면 사용이 불가능하다. Perl에서는 `my` 연산자를 사용하여 지역 변수를 선언하며, 초기화되지 않은 스칼라는 `undef` 값을, 배열이나 해시는 `()` 값을 가진다.
더 읽어볼만한 페이지
- 변수 (컴퓨터 과학) - 멤버 변수
멤버 변수는 객체 지향 프로그래밍에서 객체의 속성을 저장하고 관리하며 객체의 상태를 나타내는 변수로, 지역 변수와 달리 객체의 생명 주기와 함께 값을 유지한다. - 변수 (컴퓨터 과학) - 정적 변수
정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다. - 메모리 관리 - 동적 메모리 할당
동적 메모리 할당은 프로그램 실행 중 힙 영역에서 메모리 공간을 확보 및 해제하여 효율적인 메모리 관리와 유연성을 제공하는 기술로, 메모리 누수 방지 및 가비지 컬렉션 등의 고려 사항이 중요하며 C, C++, C++/CLI, C# 등에서 사용된다. - 메모리 관리 - 정적 변수
정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다.
자동 변수 |
---|
2. 프로그래밍 언어에서
프로그래밍 언어에서 자동 변수는 코드 블록 내에서 선언되며, 해당 블록이 실행될 때 생성되고 블록이 종료될 때 소멸되는 변수를 의미한다.
C, C++에서는 코드 블록 내에서 선언된 모든 변수가 기본적으로 자동 변수이다. 초기화되지 않은 자동 변수는 정의되지 않은 값을 가지므로 주의해야 한다.[5] `auto` 키워드를 사용할 수 있지만, 기본적으로 자동 변수이므로 거의 사용되지 않는다. `register` 키워드는 변수를 프로세서 레지스터에 캐시하도록 컴파일러에 힌트를 주지만, 컴파일러는 이를 무시할 수 있다.[6] C++에서는 자동 변수의 생성자와 소멸자가 각각 선언 지점과 블록 끝에서 호출된다. 이 기능은 RAII 기법에 활용된다. C++11부터는 `auto` 형식 지정자를 사용하여 변수 형식을 추론할 수 있다.[7]
Java에서는 C, C++와 유사하지만 `auto` 및 `register` 키워드는 없다. Java 컴파일러는 초기화되지 않은 지역 변수 사용을 허용하지 않으며, 모든 지역 변수는 사용 전에 명시적으로 초기화되어야 한다.[12] 이는 인스턴스 변수가 기본값으로 초기화되는 것과 다르다.
Perl에서는 `my` 연산자를 사용하여 지역 변수를 선언한다. 초기화되지 않은 스칼라 변수는 `undef` 값을, 배열이나 해시는 `()` 값을 갖는다.[13][9] Perl에는 전역 변수에 임시 값을 부여하고 동적 범위를 지정하는 `local` 연산자도 있다.[10]
2. 1. C, C++
코드의 블록 내에서 선언된 모든 변수는 기본적으로 자동 변수이다. 초기화되지 않은 자동 변수는 해당 유형의 유효한 값이 할당될 때까지 정의되지 않은 값을 갖는다.[5] 저장 클래스 지정자 `auto`는 이러한 변수 선언에도 추가될 수 있지만, 모든 변수가 기본적으로 자동 변수이므로 이는 완전히 불필요하며 거의 사용되지 않는다.C에서 저장 클래스 `register`를 사용하는 것은 변수를 프로세서 레지스터에 캐시하도록 컴파일러에 힌트를 주는 것이다. 주소 연산자(`&`)를 변수 또는 하위 구성 요소에 사용할 수 없다는 점을 제외하고, 컴파일러는 이 힌트를 무시할 수 있다.[6]
C++에서 자동 변수의 생성자는 선언 지점에 도달하면 호출된다. 소멸자는 지정된 프로그램 블록의 끝에 도달하면 호출된다(프로그램 블록은 중괄호로 둘러싸여 있음). 이 기능은 RAII(Resource Acquisition Is Initialization)라고 하며, 파일 열기 및 자동 닫기 또는 메모리 해제와 같은 자원 할당 및 해제를 관리하는 데 자주 사용된다.
C++11부터 C++는 `auto` 형식 지정자를 사용하여 변수를 선언할 수 있다.[7] 그러나 이는 변수의 형식이 추론된다는 것을 의미하며, 변수의 범위와는 관련이 없다.
2. 2. Java
C, C++와 유사하지만 `auto`, `register` 키워드는 없다. 그러나 Java 컴파일러는 명시적으로 초기화되지 않은 지역 변수의 사용을 허용하지 않으며 컴파일 오류를 낸다. (보통 컴파일러가 단지 경고만 내는 C, C++과 다름) Java 표준은 모든 지역 변수가 사용 전에 명시적으로 초기화되어야 한다고 규정한다.[12] 이는 기본값(숫자의 경우 0, 객체의 경우 null)으로 암묵적으로 초기화되는 인스턴스 변수와는 다르다.2. 3. Perl
Perl에서 지역 변수는 `my` 연산자를 사용하여 선언한다. 초기화되지 않은 스칼라는 `undef` 값을 가지며, 초기화되지 않은 배열이나 해시는 `()`를 갖는다.[13][9]Perl에는 자동 변수를 생성하지 않는 `local` 연산자도 있다.[10] 이는 전역 (패키지) 변수에 임시 값을 부여하고, 감싸는 블록에 동적으로 범위를 지정한다. 변수 범위가 벗어나면 이전 값이 복원된다.
참조
[1]
문서
unless it is a [[nested function]], which itself is ''defined'' along that local data
[2]
문서
although they exist in a somewhat similar, but not identical, form also in recursive languages with [[dynamic scoping]], such as older variants of [[LISP]]
[3]
문서
unless otherwise specified, such as static or heap-based data, which are specifiable in some languages
[4]
문서
When the reentrant property of the routine is used, for recursion or otherwise, the [[compiler optimization|optimizer]] must ''not'' try to allocate such variables in [[processor register]]s (for efficiency) as this would break the reentrancy.
[5]
웹사이트
C standard
http://www.open-std.[...]
2008
[6]
웹사이트
Storage Duration
https://en.cpprefere[...]
[7]
웹사이트
Placeholder type specifiers
http://en.cppreferen[...]
[8]
웹사이트
4.12.5 Initial Values of Variables
http://java.sun.com/[...]
Sun Microsystems
2008-10-17
[9]
웹사이트
Private variables via my() - perlsub - perldoc.perl.org
http://perldoc.perl.[...]
2008-10-17
[10]
웹사이트
Temporary values via local() - perlsub - perldoc.perl.org
http://perldoc.perl.[...]
2011-02-25
[11]
웹인용
C standard
http://www.open-std.[...]
[12]
웹인용
4.12.5 Initial Values of Variables
http://java.sun.com/[...]
Sun Microsystems
2008-10-17
[13]
웹인용
Private variables via my() - perlsub - perldoc.perl.org
http://perldoc.perl.[...]
2008-10-17
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com