한국   대만   중국   일본 
變數 (컴퓨터 科學) - 위키百科, 우리 모두의 百科事典 本文으로 移動

變數 (컴퓨터 科學)

위키百科, 우리 모두의 百科事典.

컴퓨터 프로그래밍 에서 變數 (變數, variable) 또는 스칼라 (scalar)는 아직 알려지지 않거나 어느 程度까지만 알려져 있는 量이나 情報에 對한 象徵的인 이름이다. 컴퓨터 소스 코드 에서의 變數 이름은 一般的으로 데이터 貯藏 位置 와 그 안의 內容物과 關聯되어 있으며 이러한 것들은 프로그램 實行 途中에 變更될 수 있다.

프로그래밍에서의 變數는 값을 나타내는 文字나 文字들의 集合이며 實行 中인 컴퓨터 프로그램에서, 任意의 값을 貯藏한 메모리 住所 에 對應한다. 數學에서 말하는 變數 의 槪念과 完全히 一致하지 않을 수도 있다. 컴퓨터 變數의 값은 數學에서처럼 等式 이나 公式 의 必須的인 部分이 아니다. 컴퓨터 環境에서 變數는 反復的인 過程 안에서 利用할 수도 있다. 이를테면 한 場所의 값을 割當한 뒤 어느 곳에서 使用한 다음 새로운 값으로 다시 割當하고 같은 方法으로 다시 使用할 수도 있다. 컴퓨터 프로그래밍에서의 變數는 긴 이름이 자주 나오며, 어떻게 利用할 것인지에 對한 說明을 나타내는 反面 數學에서의 變數는 짧은 時間 동안 쓰이는 簡潔한, 한 두 個 文字 이름이다.

컴파일러 는 變數의 象徵的인 이름을 데이터의 實際 位置로 置換해야 한다. 變數 값, 兄, 位置는 一般的으로 固定된 채 維持되는 反面 位置에 貯藏되어 있는 데이터는 프로그램 實行 途中 變更될 수 있다.

範圍 [ 編輯 ]

變數의 範圍는 프로그램 텍스트에서 變數가 使用될 수 있는 位置를 說明하는 反面, 變數의 範圍(壽命이라고도 函)는 프로그램 實行에서 變數가 (意味 있는) 값을 갖는 時期를 說明한다. 變數의 範圍는 그 範圍에 影響을 미친다. 變數의 範圍는 實際로 變數 이름의 屬性이고 範圍는 變數 貯藏 位置의 屬性이다. 이를 프로그램의 屬性이며 프로그램 텍스트 또는 實行 地點에 따라 달라지는 컨텍스트와 區別된다. 또한 個體 壽命은 變數 壽命과 一致할 수 있지만 많은 境遇에는 이에 묶이지 않는다.

範圍는 變數 이름 確認의 重要한 部分이다. 大部分의 言語는 各 變數(및 기타 命名된 엔터티)에 對한 特定 範圍를 定義하며, 이는 特定 프로그램 內에서 다를 수 있다. 變數의 範圍는 變數 이름에 意味가 있고 變數가 "標示"된다고 하는 프로그램 텍스트의 部分이다. 該當 範圍에 들어가면 一般的으로 變數의 壽命이 始作되고(컨텍스트에 들어오면) 一般的으로 該當 範圍에서 나가면 壽命이 끝난다(컨텍스트를 벗어나면). 例를 들어, "語彙 範圍"가 있는 變數는 特定 函數/서브루틴 內에서만 意味가 있거나 보다 精密하게는 表現式/文 블록 內에서(함수 範圍 또는 블록 範圍에 따라) 意味가 있다. 이는 構文 分析 詩 또는 컴파일 時 遂行 可能한 政敵 解決이다. 또는 動的 範圍가 있는 變數는 特定 制御 흐름에 따라 달라지는 轉役 바인딩 스택을 基盤으로 런타임에 確認된다. 特定 函數 內에서만 액세스할 수 있는 變數를 "地域 變數"라고 한다. "轉役 變數" 또는 範圍가 無限한 變數는 프로그램의 어느 곳에서나 참조될 수 있다.

反面에 範圍는 變數의 런타임(動的) 側面이다. 값에 對한 變數의 各 바인딩은 런타임에 自體 範圍를 가질 수 있다. 바인딩의 範圍는 變數가 同一한 값이나 메모리 位置를 繼續 參照하는 동안 프로그램 實行 時間의 一部이다. 實行 中인 프로그램은 終了의 境遇처럼 주어진 範圍에 여러 番 들어가고 나갈 수 있다.

프로그래밍 言語에 가비지 蒐集 機能이 없으면 範圍가 永久的으로 範圍를 벗어나는 變數로 인해 메모리 漏水가 發生할 수 있다. 이로 因해 變數에 割當된 메모리는 割當 解除 目的으로 參照하는 데 使用되는 變數가 더 以上 解除되지 않기 때문에 解除될 수 없다. 그러나 리스프 클로저 및 C 政敵 地域 變數에서 發生하는 것처럼 變數 바인딩이 範圍를 넘어 擴張되는 것이 許容될 수 있다. 實行이 變數의 範圍로 다시 傳達되면 變數가 다시 使用될 수 있다. 範圍가 始作되기 前에 範圍가 始作되는 變數는 初期化되지 않은 것으로 看做되며 아직 特定 값이 明示的으로 提供되지 않았기 때문에 액세스할 境遇 定義되지 않은 任意 값을 갖는 境遇가 많다. 範圍가 끝나기 前에 範圍가 끝나는 變數는 매달린 포인터가 될 수 있으며 該當 값이 削除되었기 때문에 다시 한 番 初期化되지 않은 것으로 看做된다. 以前 두 가지 境遇에 說明된 變數는 範圍를 벗어났거나 바인딩되지 않았다고 할 수 있다. 많은 言語에서는 範圍를 벗어난 變數 값을 使用하려고 試圖하는 것이 誤謬이다. 다른 言語에서는 그렇게 하면 豫想치 못한 結果가 나올 수 있다. 그러나 이러한 變數에는 새 값이 割當되어 새 範圍가 指定될 수 있다.

空間 效率性을 위해 變數에 必要한 메모리 空間은 該當 變數를 처음 使用할 때만 割當하고 더 以上 必要하지 않을 때 解除할 수 있다. 變數는 範圍 內에 있을 때만 必要하므로 範圍에 들어갈 때 各 變數의 壽命을 始作하면 使用되지 않는 變數에 空間이 생길 수 있다. 이러한 空間 浪費를 避하기 위해 컴파일러는 變數가 宣言되었지만 使用되지 않은 境遇 프로그래머에게 警告하는 境遇가 많다.

프로그램의 여러 部分이 서로의 變數를 修正하여 失手로 서로 相互 作用하지 않도록 變數의 範圍를 可能한 限 좁게 만드는 것이 좋은 프로그래밍 方式으로 看做된다. 그렇게 하면 먼 거리에서의 行動도 防止할 수 있다. 이를 위한 一般的인 技術은 프로그램의 여러 섹션에서 서로 다른 네임스페이스를 使用하도록 하거나 動的 變數 範圍 指定 또는 語彙 變數 範圍 指定을 통해 個別 變數를 "非公開"로 만드는 것이다.

많은 프로그래밍 言語에서는 有效하지 않거나 初期化되지 않은 變數를 나타내기 위해 豫約된 값(種種 null 또는 nil로 命名됨)을 使用한다.

타이핑 [ 編輯 ]

C, C++, 자바 또는 C#과 같은 靜寂으로 類型이 指定된 言語에서는 變數에도 類型이 있다. 卽, 特定 種類의 값만 變數에 貯藏할 수 있다. 例를 들어 "整數" 類型의 變數는 텍스트 값을 貯藏할 수 없다.

파이썬과 같은 動的으로 類型이 指定되는 言語에서 變數의 類型은 該當 값으로 類推되며 該當 값에 따라 變更될 수 있다. 커먼 리스프에서는 두 가지 狀況이 同時에 存在한다. 變數에는 컴파일 타임에 存在하는 類型이 指定된다(선언되지 않은 境遇 汎用 上位 類型인 T로 看做된다). 값에는 런타임에 確認하고 쿼리할 수 있는 類型도 있다.

變數를 入力하면 컴파일 타임에 多形性을 解決할 수도 있다. 그러나 이는 變數에 許容된 上位 類型이 아닌 값 類型을 基盤으로 呼出을 解決하는 客體 志向 函數 呼出(C++에서는 假想 函數라고 函)에 使用되는 多形性과는 다르다.

變數는 淨水 및 리터럴 文字列과 같은 簡單한 데이터를 貯藏하는 境遇가 많지만 一部 프로그래밍 言語에서는 變數가 다른 데이터 類型의 값도 貯藏할 수 있도록 許容한다. 이러한 言語는 函數를 媒介變數적 多形性으로 만들 수도 있다. 이러한 函數는 變數처럼 作動하여 여러 類型의 데이터를 나타낸다. 例를 들어, length라는 函數는 目錄의 길이를 決定할 수 있다. 이러한 길이 函數는 類型 시그니처에 類型 變數를 包含함으로써 媒介變數 多形性이 될 수 있다. 目錄의 要素 數는 要素 類型과 無關하기 때문이다.

命名 規則 [ 編輯 ]

數學的 對應과 달리 프로그래밍 變數 및 常數는 一般的으로 여러 文字 이름을 使用한다.(예: COST 또는 total) 單一 文字 이름은 補助 變數에만 가장 一般的으로 使用된다. 例를 들어, 配列 인덱스 變數의 境遇 i, j, k이다.

一部 命名 規則은 有效한 識別子 形式과 關聯된 言語 構文의 一部로 言語 水準에서 施行된다. 거의 모든 言語에서 變數 이름은 數字(0-9)로 始作할 수 없으며 空白 文字를 包含할 수 없다. 變數 이름에 文章 符號가 許容되는지 與否는 言語마다 다르다. 많은 言語에서는 變數 이름에 밑줄("_")만 許容하고 다른 모든 句讀點은 禁止한다. 一部 프로그래밍 言語에서는 變數의 데이터 類型이나 範圍를 나타내기 위해 變數 識別者에 記號(記號 또는 句讀點)가 附着된다.

變數 이름의 大小文字 區分은 言語마다 다르며 一部 言語에서는 特定 項目의 이름을 指定할 때 特定 大小文字를 使用해야 한다. 大部分의 最新 言語는 大小文字를 區分한다. 一部 오래된 言語는 그렇지 않는다. 一部 言語에서는 內部 使用을 위해 特定 形式의 變數 이름을 豫約한다. 많은 言語에서 두 個의 밑줄("__")로 始作하는 이름이 이 範疇에 屬하는 境遇가 많다.

그러나 言語에 依해 賦課된 基本 制限을 넘어서 變數 이름 指定은 主로 스타일의 問題이다. 機械 코드 水準에서는 變數 이름이 使用되지 않으므로 選擇한 正確한 이름은 컴퓨터에 重要하지 않는다. 따라서 變數 이름은 變數를 識別하며 나머지는 프로그래머가 프로그램을 더 쉽게 作成하고 理解하도록 만드는 道具일 뿐이다. 잘못 選擇한 變數 이름을 使用하면 說明이 없는 이름보다 코드를 檢討하기가 더 어려워질 수 있으므로 明確한 이름을 使用하는 것이 勸奬되는 境遇가 많다.

프로그래머는 變數 命名에 對한 指針을 提供하거나 正確한 命名 體系를 適用하는 코드 스타일 指針을 만들고 遵守하는 境遇가 많다. 이름이 짧을수록 入力이 더 빠르지만 說明力이 떨어진다. 이름이 길수록 프로그램을 더 쉽게 읽을 수 있고 變數의 目的을 더 쉽게 理解할 수 있다. 그러나 變數 이름이 지나치게 裝潢하면 코드 理解가 어려워질 수도 있다.

같이 보기 [ 編輯 ]

出處 [ 編輯 ]