맨위로가기

자동 변수

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의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