Golang 상수

soso·2023년 10월 4일
0

묘공노트

목록 보기
4/13

• 이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 8장 써머리입니다.

8-1. 상수선언

  • 변하지 않는 값
  • 초기화 된 값이 변하지 않으며, 변경 불가능
    • 상수로 사용 될 수 있는 타입
      - 불리언
      - 룬 (rune)
      - 정수
      - 실수
      - 복소수
      - 문자열
      • 상수 선언 방식 : const 사용
      const ConstValue int = 10  
      // const (상수 선언 키워드) ConstValue (상수명) int (타입)
      // 10 : 값 (불변)
      • 상수 규칙
        1) 함수 외부 및 첫 글자 대문자 선언 : 외부에 공개되는 상수
        2) 한번 선언 후 값 변경 불가능.
        2-1) 값으로만 동작 -> 대입문 우변에 올 수 없다. 좌변에 값으로만 동작 -> 포인터와도 사용할 수 없다 (주소값이 아닌 '값'으로만 사용되어야 함)
      func main(){
         const C int = 10
         fmt.Println(&C) // 주소값 출력 시도 --> 에러
      }

8-2. 상수를 사용하는 경우

  • 변하면 안되는 값에 사용
  • 코드값으로 사용

📌원주율 파이와 같이 고정된 숫자

func main(){
  const PI1 float64 = 3.14159265358979 // 상수

PI1 = 4 // 에러 발생. 상수 PI1은 좌변 사용 불가. 값 변환 불가
}

📌코드값 : 어떤 숫자에 의미를 부여.

  • Pig, Cow, Chicken 과 같은 문자열로 나타낼 수 있지만, 이는 번거롭고 스펠링 오타 및 성능, 메모리에 더 비효율적. -> 코드값 부여
 const Pig int = 0
  const Cow int = 1
  const Chicken int = 2

  func PrintAnimal (animal int){
     if animal == Pig {
       fmt.Psintln("꿀꿀")
       }else if animal == Chicken {
       fmt.Psintln("꼬끼오")
       } else {
       fmt.Println("...")
       }
      }

     func main(){
     PrintAnimal(Pig)    // 꿀꿀 출력
     PrintAnimal(Chicken)   // 꼬끼오 출력 

📌 iota

  • 코드값으로 사용하는 값이 1씩 증가하도록 정의할 때 사용하는 키워드.

    const (
      Red int iota    // 0
      Blue int iota   // 1
      Green int iota  // 2
    )
    
     // 소괄호를 벗어나면 iota는 초기화 됨  
    // 첫 번째 값과 같은 ㄱ규칙이 적용되면 iota 생략 가능
    
     const (
        C1 uint = iota + 1   // 1 = 0 + 1
        C2                   // 2 = 1 + 1
        C3                   // 3 = 2 + 1

8-3. 타입 없는 상수

  • 타입을 명시하지 않고 선언한 상수
  • 타입이 정해지지않은 상태로 사용 됨
    const PI = 3.14  // 타입 없는 상수
     const FloatPI float64 = 3.14  // float64 타입
    
       func main(){
           var a int = PI * 100
           var b int = FloatPI * 100   // 타입 오류
    
           fmt.Println(a) // 정상 출력 314
           fmt.Println(b)  // 에러 발생 > 타입 오류
      }

8-4. 상수와 리터럴

  • 리터럴 : 고정된 값, 값 자체로 쓰인 문구
  • Go에서는 상수와 리터럴을 같이 취급
    • 컴파일 시, 상수는 리터럴로 변환되어 실행 파일에 쓰임
    • 동적 할당 메모리 영역을 사용하지않기 때문에 메모리 주소값에 접근이 불가. (포인터 사용 불가)

0개의 댓글