Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jenkins
- 함수
- 명령어
- AWS
- it기사
- 리눅스
- aws사용자모임
- GIT
- docker
- 3티어 아키텍처
- go
- python
- AI
- 파이썬
- 사용자 계정 관리
- 애저
- Linux
- 클라우드
- awskrug
- git hub
- 표준 라이브러리
- dockerfile
- maven
- 변수
- AI챗봇
- open ai
- nexus
- 프로세스 관리
- terraform
- Azure
Archives
- Today
- Total
We are Architect
상수(10) 본문
* 상수 란?
- 변하지 않는 수를 상수 라고 한다. 값이 변하지 않는다.
- go에서는 상수를 const라고 선언해 준다.
- 선언된 값은 바뀌지 않는다.
# const : 상수 선언 키워드
# ConstValue : 상수명
# int : 타입
# 10 : 값
const ConstValue int = 10
* 상수 예제
package main
import (
"fmt"
)
func main () {
const pi1 float64 = 3.14159265389793228 // 상수
var pi2 float64 = 3.14159265389793228 // 변수
pi1 = 3
pi2 = 4
fmt.Printf("원주율: %f\n", pi1)
fmt.Printf("원주율: %f\n", pi2)
}
- 실행 결과
- pi1에 값을 할당할 수 없다고 뜬다.
* 상수의 용도
- 상수는 코드값으로 사용한다. 특정 코드를 주로 사용해야 할 때 상수에 문자값을 넣고 불러와서 사용한다.
- ex) const Acode = 65
- 여기서 문자값은 아스키코드를 의미한다.
- 잠깐의 상식은 UTF-8의 문자값은 1 ~ 3 byte 정도 되고 ANSI는 문자값이 1bye 정도 된다.
* 상수 예제
- 숫자값에 의미를 부여해서 사용. > 사람을 위해서 사
package main
import (
"fmt"
)
const Pig int = 0
const Cow int = 1
const Chinken int = 2
func PrinAnimal(animal int) {
if animal == Pig {
fmt.Println("꿀꿀")
} else if animal == Cow {
fmt.Println("음메")
} else if animal == Chinken {
fmt.Println("꼬끼오")
} else {
fmt.Println("...")
}
}
func main () {
PrinAnimal(Pig)
PrinAnimal(0)
}
- 출력 결과 값
- 0 이나 Pig 나 들어가 있는 게 똑같기 때문에 동일하게 사용.
* iota로 열거값 사용
- 상수를 여러 개 한 번에 선언하기 위해서 사용.
- 앞에 const를 생략할 수 있다.
- 상수에 들어가는 값을 iota 타고 선언하면 뒤에 순서대로 오는 값이 +1씩 증가한다.
const (
Red int = iota // 0
Blue int = iota // 1
Green int = iota // 2
)
const (
C1 uint = iota + 1 // 1 = 0 + 1
C2 // 2 = 1 + 1
C3 // 3 = 2 + 1
)
// 비트 플래그에 iota 를 적용한 예제
// 비트 플래그 는 각자리 마다 의미를 부여할수 있게 하는 용도이다.
const (
Bitflag1 uint = 1 << iota // 1 << 0
Bitflag2 // 2 << 1
Bitflag3 // 4 << 2
Bitflag4 // 8 << 3
)
* 비트 플래그 예제
package main
import "fmt"
const (
MasterRoom uint8 = 1 << iota // 0000 0001
LivingRoom // 0000 0010
BathRoom // 0000 0100
SmallRoom // 0000 1000
)
func turnOn(rooms, room uint8) uint8 {
return rooms | room
}
func turnOff(rooms, room uint8) uint8 {
return rooms &^ room // 비트 반전
}
func IsLightOn(rooms, room uint8) bool {
return rooms&room == room
}
func switchLights(rooms uint8) {
if IsLightOn(rooms, MasterRoom) {
fmt.Println("안방에 불을 킨다")
}
if IsLightOn(rooms, LivingRoom) {
fmt.Println("거실에 불을 킨다")
}
if IsLightOn(rooms, BathRoom) {
fmt.Println("화장실에 불을 킨다")
}
if IsLightOn(rooms, SmallRoom) {
fmt.Println("작은방에 불을 킨다")
}
}
func main() {
var rooms uint8 = 0 // 0000 0000
rooms = turnOn(rooms, MasterRoom)
rooms = turnOn(rooms, BathRoom)
rooms = turnOn(rooms, SmallRoom)
rooms = turnOff(rooms, SmallRoom)
switchLights(rooms)
}
- 결과 값 출력
* 타입이 없는 상수
- 상수는 타입을 정하지 않아도 된다.
package main
import "fmt"
const PI = 3.14 // 타입이 없는 상수는 문자형태이다.
const FloatPI float64 = 3.14
func main(){
var a int = PI * 100 // 그러나 상수는 타입이 지정되지 않아서 쓰일때 타입이 정해짐 > 현재는 int로 변환됨
var b int = FloatPI * 100
fmt.Println(a) // 오류가 나지 않음.
fmt.Println(b) // 오류가 남.
}
* 상수 깊이 보기
- 상수는 메모리 공간이 할당되지 않는다. 그냥 코드에 박혀있다.
- 즉 동적 메모리 영역에 할당되지 않아서 좌변으로 사용할 수 없다. 왜냐 고정된 값이라 수정할 수 없기 때문.
'Programing > Go' 카테고리의 다른 글
Switch (12) (0) | 2025.01.12 |
---|---|
if 문(11) (0) | 2025.01.11 |
함수(9) (0) | 2025.01.09 |
연산자(8) (0) | 2025.01.08 |
fmt 패키지를 통한 표준 입출력(7) (0) | 2025.01.06 |