변수와 상수 개발자가 아니더라도 쉽게 접하시는 단어이기도 하고 개발자라면 누구나 무조건 사용하고 알고 있는 내용! 그래도 복습한다 생각하고 같이 알아볼까요?
변수와 상수?
변수(Variables)의 정의는 값을 저장하고 나중에 변경할 수 있는 메모리 공간. 상수(Constants)의 정의는 값을 한 번만 할당할 수 있는 메모리 공간을 의미하며 값이 한 번 할당되면 변경 불가.
이 정도만 알고 있으면 될까요? 저는 메모리 저장 과정 또한 알고 있어야 한다고 생각합니다.
변수와 상수의 메모리 저장 과정.
메모리 할당 : - 변수나 상수가 선언될 때, 시스템은 해당 데이터 타입에 필요한 메모리 공간을 할당합니다. - 예를 들어, 정수 타입의 변수를 선언하면 해당 정수에 필요한 메모리 크기만큼의 공간을 할당받습니다.
값의 저장 : - 변수와 상수에 값을 할당하면, 해당 메모리 공간에 값이 저장됩니다. - 값의 크기와 데이터 타입에 따라 저장되는 메모리 공간의 크기가 결정됩니다.
참조 : - 변수와 상수는 메모리 주소를 통해 값에 접근합니다. - 변수의 경우 메모리 주소는 변경될 수 있으나, 상수의 경우 한 번 할당된 메모리 주소는 변경되지 않습니다.
초기화 : - 변수와 상수는 선언과 동시에 초기화될 수 있습니다. - 초기화되지않은변수나상수는사용할수없으며,런타임에러가발생합니다.
메모리 저장 과정을 그림과 추가적이 설명으로 조금 더 파훼해 볼까요?
예를 들어 비밀번호를 의미하는 '9999'라는 숫자 데이터가 있다고 합시다. 해당 숫자 데이터는 메모리 주소 0x12345678 ~ 0x1234567 B까지의 걸쳐 저장되어 있습니다. 숫자 데이터를 꺼내어 사용할 때마다 항상 이 주소값을 사용할 수 없겠죠? 외우기도 힘들뿐더러
어우.. 주소로 데이터 가져오라면 이건 뭔.. 개발하겠습니까?..
주소값 길기도 길고, 단순히 16진수 숫자들로 되어 있으니 외우기도 어렵고 뜻하는 게 뭔지도 모를 겁니다.
그래서 이 주소값을 "pwd"라는 이름으로 연결할 겁니다. 여기까지 그림으로 확인해보면.
이런 식으로 메모리상에 올라가 있을 겁니다.
우리가 "Pwd"라는 단어를 특정 형식에 따라 사용하면 컴파일러는 내부에 저장된 메모리 주소들을 뒤져서 Pwd라는 이름으로 연결된 메모리 주소를 확인하고, 주소에 저장된 값을 읽어와 하나로 합친 9999라는 데이터를 만들어 줍니다.
이름을 저장해 놓는다면 Pwd라는 인식하기 쉬운 단어만으로 저장된 값을 쉽게 불러올 수 있겠죠.
이렇게 값을 저장한, 혹은 저장할 메모리 주소값을 이름으로 연결해 놓은 것을 변수가 상수라고 합니다. 상단의 과정은 변수와 상수에 값을 저장하는 과정이라고 보시면 됩니다.
변수라고 해서 아무 값이나 마음대로 저장할 수 있고 변경할 수 있을까?
절대 아니죠. 변수의 값을 변경할 때에는 처음 저장했던 값과 일치하는 타입이어야 합니다. 예를 들어, 변수에 처음 저장된 값이 정수였다면 이후로도 정수만 저장할 수 있고, 처음 저장한 값이 문자열이었다면 이후로도 변경할 수 있는 값은 문자열뿐입니다.
즉 변수는 처음 입력한 값과 동일한 타입에 한해서만 값을 변경할 수 있습니다.
상수는 그럼 왜 필요한 거지? 변수로만 선언해서 값도 변경하고 좋은 거 아닌가?
음.. 성능이나 기타 다른 기술적 이점은 그렇다 치더라도, 프로그래밍 소스 관리 목정상 변하지 않는 값은 상수에 저장하는 것이 훨씬 효율적입니다.
1. 데이터의 불변성: - 값을 변경할 수 없는 특징 때문에 코드의 불변성을 보장하고, 예기치 않은 값 변경이나 버그를 방지하죠. 2. 프로그램의 안정성 향상: - 상수를 사용하면 변수 값이 의도치 않게 변경되는 것을 방지할 수 있고, 이로 인해 프로그램의 안정성이 향상되죠. 3. 코드의 가독성과 유지 보수성 향상: - 상수는 코드 내에서 중요한 값을 명시적으로 표현할 수 있게 해 줍니다. 이로 인해 코드의 가독성이 향상되며, 다른 개발자가 코드를 이해하고 유지 보수하기 쉬워집니다. 4. 컴파일러 최적화 - 상수를 사용하면 컴파일러가 프로그램을 더 효율적으로 최적화할 수 있습니다. 이는 프로그램의 성능을 향상 시키는데 도움을 줍니다.