변수와 상수는 대부분의 프로그래밍 언어에서 기본적인 개념입니다. 데이터를 저장하고 관리하기 위한 기반 블록입니다.
이 記事에서는 Go 语言에서 변수와 상수가 어떻게 작동하는지 살펴봅니다.
목차:
변수 무엇 ?
변수는 이름(또는 식별자)으로 식별되는 저장 위치입니다. 이 값은 프로그램 실행 동안 변경될 수 있습니다. 이 때문에 변수라고 부릅니다.
예를 들어:
myName := “temitope”
fmt.Println(myName)
myName:= ”oyedele”
fmt.Println(myName)
myName
라는 식별자를 가진 변수를 만들었고 문자열 값을 저장합니다.
주목하시면, 값을 다른 문자열로 변경했음을 알 수 있으며 변수는 여러 번 변경할 수 있습니다.
변수를 통해 서로 다른 형식의 데이터를 저장할 수 있습니다. 예를 들어 정수, 부동 소수점 숫자, 문자열, 객체 등。
Go 언어에서 변수 생성 방법
Go 언어에서 변수를 생성하는 두 가지 주요 방법이 있습니다. 명시적 선언과 줄임말 선언입니다.
명시적 선언
Go 언어에서 변수를 생성하는 전통적인 방법입니다. var
키워드를 사용하고 변수의 형식을 선언하여 코드의 가독성과 명료함을 높입니다.
package main
import "fmt"
func main() {
var age int = 25
var name string = "Temitope"
var height float64 = 5.7
fmt.Println(age, name, height)
}
각 변수마다 값을 할당하기 전에 데이터형을 선언하는 것을 볼 수 있습니다.
output:
25 Temitope 5.7
var
키워드와 데이터 형식은 초기 값을 갖추지 않고 사용할 수도 있습니다:
package main
import "fmt"
func main() {
var age int
var name string
var height float64
age = 25
name = "Temitope"
height = 5.7
fmt.Println(age, name, height)
}
이런 식으로 변수들은 초기 값을 갖추지 않고 먼저 선언되며 나중에 코드에서 값을 할당합니다. 처음과 같은 출력을 얻게 됩니다.
줄임말 변수 선언
shorthand variable declaration syntax (:=
)는 변수를 선언하는 것을 더 간단하게 해주는 구문입니다. 이 방법은 값을 명확하게 하고자 하는 것과 상관없이 한 行에서 변수를 선언하고 초기화 할 수 있습니다.
package main
import "fmt"
func main() {
age := 25
name := "Temitope"
height := 5.7
fmt.Println(age, name, height)
}
여기에서는 각 변수에 대한 값과 함께 선언되었고, Go는 지정하지 않은 데이터 형을 추론합니다. 예를 들어 age
는 25로 초기화되어 있으며 Go는 그 유형을 int
로 추론했습니다. name
는 “Temitope”로 초기화되어 있고 Go는 그 유형을 string
로 추론했습니다. 마지막으로 height
는 5.7로 초기화되어 있고 Go는 그 유형을 float64
로 추론했습니다.
output:
25 Temitope 5.7
shorthand variable declaration의 한 단점은 이를 함수 내에서만 사용할 수 있다는 것입니다.
다중 변수 선언
같은 行에 여러 변수를 선언하고 초기화하는 것은 각 변수를 쉼표로 구분하여 한 行에 표시하는 것입니다. 이러한 방법은 변수들이 관련性이 있거나 같이 초기화하고자 하는 경우에 간단하고 직관적이며 commonly used가 됩니다. 예를 들어:
package main
import "fmt"
func main() {
var age, height int = 25, 180
var name, city string = "Temitope", "New York"
fmt.Println(age, height)
fmt.Println(name, city)
}
여기에서는 변수 age
와 height
가 모두 정수로 선언되고 25과 180으로 초기화되는 것을 볼 수 있습니다. 変수 name
와 city
는 또한 모두 문자열로 선언되고 “Temitope”와 “New York”로 초기화됩니다.
Output:
25 180
Temitope New York
여러 변수를 동시에 선언하는 것은 이러한 구문을 사용할 수 있습니다:
package main
import "fmt"
func main() {
var (
age int = 25
name string = "Temitope"
height int = 180
city string = "New York"
)
fmt.Println(age, name, height, city)
}
여기에서는 변수 age
, name
, height
, 以及 city
가 한 번에 var block 내에서 선언되며 각 변수가 자신의 行에 해당합니다.
Output:
25 Temitope 180 New York
제이쿼리 자료형
변수가 초기화되지 않은 경우, 기본적으로 zero value를 갖습니다. 이러한 값은 변수 종류에 따라 다릅니다. 아래는 기본 값을 선언하는 예제입니다:
package main
import "fmt"
func main() {
var intValue int
var floatValue float64
var boolValue bool
var stringValue string
var ptrValue *int
var sliceValue []int
var mapValue map[string]int
fmt.Println("Zero values:")
fmt.Println("int:", intValue)
fmt.Println("float64:", floatValue)
fmt.Println("bool:", boolValue)
fmt.Println("string:", stringValue)
fmt.Println("pointer:", ptrValue)
fmt.Println("slice:", sliceValue)
fmt.Println("map:", mapValue)
}
위의 코드에서, 다음과 같이 발생합니다:
-
정수 변수
intValue
는 0으로 zero value를 갖습니다. -
浮動小数 변수
floatValue
는 0으로 zero value를 갖습니다. -
布尔 변수
boolValue
는false
로 zero value를 갖습니다. -
문자열 변수
stringValue
는 “”(빈 문자열)로 zero value를 갖습니다. -
포인터 변수
ptrValue
, 슬라이스 変수sliceValue
, 맵 변수mapValue
는 모두nil
로 zero value를 갖습니다.
출력:
Output:
Zero values:
int: 0
float64: 0
bool: false
string:
pointer: <nil>
slice: []
map: map[]
What is a Variable Scope?
Variables can be declared either globally or locally. The scope of a variable determines where it can be accessed and modified within your code.
글로벌 변수는 함수 밖에서 선언되며, 일반적으로 파일 상단에 위치하며, 같은 패키지 내의 어떤 함수에서も 액세스 할 수 있습니다. 以下は 예시입니다:
package main
import "fmt"
var globalCounter int = 0
func incrementCounter() {
globalCounter++
}
func main() {
fmt.Println("Initial Counter:", globalCounter)
incrementCounter()
fmt.Println("After Increment:", globalCounter)
}
上方 예시에서, globalCounter
는 글로벌 변수입니다, 그리고 이를 incrementCounter
함수와 main
함수 双方에서 액세스 할 수 있습니다.
또한, globalCounter
의 값은 함수 호출 之间에서 유지됩니다. 이것은 한 함수에서 그것을 변경하는 것은 프로그램의 다른 부분에서 그 값을 영향 줍니다.
대신, 로컬 변수는 함수 내에서 또는 区块内에서 선언되며, 그 특정 함수나 区块 내에서만 액세스 할 수 있습니다. 이들은 함수나 区块가 실행되었을 때 생성되고, 완료되면 销毁됩니다. 예를 들어:
package main
import "fmt"
func incrementCounter() {
localCounter := 0
localCounter++
fmt.Println("Local Counter:", localCounter)
}
func main() {
incrementCounter()
incrementCounter()
}
上方 코드에서, incrementCounter
함수 내에 localCounter
를 로컬 변수로 사용합니다. incrementCounter
를 호출할 때마다 새 localCounter
이 생성되어 0으로 초기화되고 증가합니다.
localCounter
의 값은 함수 호출 之间에서 유지되지 않으므로, 함수에서 변경되어도 프로그램의 다른 부분에 영향을 미칠 수 없습니다.
Go 내에서 이름 convensions
変数의 proper naming은 干净하고 읽기 容易, 유지가 容易한 코드를 쓰는 데에 중요한 것입니다. Go는 某些 specific conventions and rules for naming variables를 가지고 있습니다. 다음은 그들의 一些 examples입니다:
-
deskriptive 이름 사용하기: 상수의 목적 또는 내용을 명확하게 describe하는 이름을 사용하세요. 例如, x나 y과 같은 vagure 이름을 사용하지 않고,
age
,totalPrice
, 또는userName
과 같은 이름을 사용하여 상수가 represent 하는 것을 명확하게 보여줍니다. -
multi-word 이름에 CamelCase 사용하기: Go에서는 multi-word 이름의 상수에 camelCase를 사용하는 것이 일반적입니다. 첫 단어는 lowercase로, 그 다음 각 단어의 첫 글자는 대문자로 합니다.
-
underscore 사용하지 마십시오: 一些 other languages와 不同, Go는 상수 이름에 单词를 구분하는 underscore를 사용하지 않습니다. 기idiomatic style를 遵守하기 위해 camelCase를 adhere하십시오.
-
단명 변수를 위한 짧은 이름 사용: 반복문 카운터나 인덱스와 같은 단명 변수의 경우 i, j, k와 같은 짧은 이름을 사용하는 것이 허용됩니다.
Go에서 상수란 무엇인가?
상수는 컴파일 시 정의되며 프로그램 실행 중 수정할 수 없는 불변의 값입니다. 미리 알려진 값으로, 변경되지 않을 값을 정의하는 데 유용합니다.
예를 들어, 온라인 스토어를 구축할 때 표준 배송료가 항상 $10인 경우 이를 상수로 선언하여 프로그램 내에서 배송비가 필요한 곳마다 사용할 수 있습니다. 배송 요금이 변경되면 한 곳에서 값만 업데이트하면 됩니다.
Go에서 상수 선언 방법
const
키워드를 사용하여 상수를 선언할 수 있으며, 그 뒤에 이름, 유형(값이 유형을 암시하는 경우 선택 사항), 상수의 값을 작성합니다. 다음과 같이 선언할 수 있습니다:
package main
import "fmt"
func main() {
const pi float64 = 3.14159
const greeting string = "Hello, World!"
fmt.Println("Pi:", pi)
fmt.Println("Greeting:", greeting)
}
상수를 선언한 후 변경하려고 하면 컴파일 시 오류가 발생합니다.
Go에서 상수의 유형
상수는 유형이 지정된 상수와 유형이 지정되지 않은 상수로 나눌 수 있습니다. 두 유형의 상수 모두 프로그램 전반에 걸쳐 고정된 불변의 값을 제공합니다. 그러나 Go가 그들의 유형을 처리하는 방식과 사용 시의 유연성에서 차이가 있습니다.
타입이 지정되지 않은 상수는 타입이 필요한 상황에서 사용될 때까지 타입이 할당되지 않습니다. 타입이 없는 상수를 선언하면, Go는 상수가 사용되는 지점에서 타입을 추론합니다. 이는 타입 변환 없이 여러 설정에서 사용할 수 있기 때문에 타입이 없는 상수가 더 유연합니다.
package main
import "fmt"
const gravity = 9.81
func main() {
var height int = 10
var acceleration float64 = gravity * float64(height)
fmt.Println("Acceleration:", acceleration)
}
여기서 gravity
는 타입이 지정되지 않은 상수입니다. 이는 Go가 사용 방법에 따라 타입을 추론할 수 있음을 의미합니다. gravity
가 float64
와의 계산에 사용될 때, Go는 자동으로 이를 float64
로 취급합니다.
타입이 없는 상수와 달리, 타입이 있는 상수는 명시적으로 선언된 타입을 가집니다. 이는 해당 타입과 일치하거나 호환 가능한 타입으로 변환할 수 있는 상황에서만 사용할 수 있음을 의미합니다. 타입이 있는 상수는 더 엄격하여 항상 선언된 특정 타입으로 취급되도록 보장합니다.
package main
import "fmt"
const speedOfLight int = 299792458
func main() {
var distance int = speedOfLight * 2
fmt.Println("Distance:", distance)
}
여기서 speedOfLight
는 int
타입의 타입이 있는 상수입니다.
이는 다른 int
값과의 연산에만 사용되거나 명시적으로 다른 타입으로 변환될 수 있습니다.
마무리입니다
이 글에서는 Go에서 변수와 상수가 무엇인지, 그리고 이를 선언하는 방법에 대해 살펴보았습니다.
변수와 상수는 프로그래밍에서 중요한 도구입니다. 개발자가 데이터를 효율적으로 관리하고 조작할 수 있게 해줍니다. 이를 사용하는 방법을 이해하면 코드의 품질을 향상시킬 수 있습니다.
도움이 되셨다면 공유 부탁드립니다.
Source:
https://www.freecodecamp.org/news/variables-and-constants-in-go/