[묘공단] Tucker의 Go 언어 프로그래밍 - 상수

힐링코더·2024년 1월 26일
0

묘공단-Go편

목록 보기
6/20
post-thumbnail

상수는 변하지 않는 값이다.

숫자, 문자, 문자열 등 직접적으로 코드에 표현된 값들(예: 5, 'a', "hello") 같은 리터럴 상수,
특정 값에 이름을 부여하여 프로그램 내에서 사용하는 경우(예: const int MAX_SIZE = 100;) 같은 명명된 상수가 대표적이다.

그런데 이거 왜 쓰나?

  1. 코드의 가독성 향상: 숫자나 문자열 등을 직접 코드에 쓰는 대신, 그 의미를 명확하게 전달할 수 있는 이름을 가진 상수를 사용하면 코드의 의도를 더 쉽게 이해할 수 있다.
  2. 유지보수 용이성: 프로그램 전체에서 반복적으로 사용되는 값에 대해 상수를 사용하면, 값의 변경이 필요할 때 한 곳에서만 수정하면 되므로 유지보수가 용이해진다.
  3. 오류 방지: 실수로 값을 변경할 가능성을 줄이기 위해 상수를 사용한다. 상수를 사용하면 컴파일러나 인터프리터가 값을 변경하려는 시도를 막아 오류를 방지할 수 있다.

Go에서는 const 키워드를 사용해서 상수를 선언한다.
const pi = 3.14
이렇게 하면 '컴파일 타임'에 값이 결정돼 프로그램 실행 동안 그 값이 변하지 않는다.

고랭에서는 상수에 타입을 명시하지 않을 수 있다.
이를 '타입 없는 상수'라고 한다.
타입 없는 상수는 컴파일 타임에 필요에 따라 타입이 결정된다.

const MyConst = 42
이 코드가 사용 시점에 따라 int도 float64도 될 수 있다는 말이다.
이렇게 타입이 동적으로 결정되는 것을 타입추론(Type Inference)이라고 한다.
(모든 프로그래밍 언어가 이런 타입 추론을 지원하는 건 아니다)


자, 그럼 내가 오늘 가장 하고 싶었던 말.

const랑 final이랑 차이가 뭔가요?

둘 다 상수를 선언하는 데 사용된다.
그런데 '언어' 및 '사용 방식'에 따라 차이가 있다.
여기서는 고랭과 다트, 자바를 가지고 설명해 보겠다.

Go

고랭에서 const는 '컴파일 타임'에 값이 결정된다.
이는 프로그램 실행 동안 변경할 수 없다.

Dart/Java에서는 이 개념이 final로 사용된다

의미는 같다.
final로 선언된 변수는 한 번 초기화되면 그 값을 변경할 수 없다.
Dart에서는 final 사용 시 '런타임'에 값이 할당된다.
Java에서도 final 사용 시 '런타임'에 값이 할당된다.

<중요!>
Dart와 Java에서 final 변수는 객체 참조에 대해서는 변경을 방지하지만, 참조된 객체의 내부 상태는 변경할 수 있다.

void main() {
  // final 변수 선언
  final List<int> numbers = [1, 2, 3];
  
  // final 변수는 참조 변경 불가
  // numbers = [4, 5, 6]; // 에러 발생
  
  // final 변수가 참조하는 객체(리스트)의 내부 상태 변경 가능
  numbers[0] = 4;
  
  print(numbers); // 출력: [4, 2, 3]
}

Tucker의 Go 언어 프로그래밍 8장은 여기서 끝입니다!
이제 9장으로 가시죠~!

profile
여기는 일상 블로그, 기술 블로그는 https://yourhealingcoder.tistory.com/

0개의 댓글