개발 일지/Java

[Java] 변수(Variable)와 상수(Constant)

미숫가루설탕많이 2022. 12. 21. 20:29

 변수(Variable)란 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단이다.

 

 프로그래밍은 데이터가 어떻게 처리할 것인가를 컴퓨터가 인지할 수 있는 언어로 작성하는 것을 의미한다. 어떤 데이터를 프로그래머가 원하는 대로 처리하기 위해서는 그 데이터를 임시적으로 컴퓨터에 저장해둘 필요가 있다. 컴퓨터는 데이터를 메모리에 저장하고 RAM이 메모리에 해당된다. 메모리는 1byte 크기의 데이터를 저장할 수 있는 메모리 셀들이 모여서 만들어지며, 각 메모리셀에는 고유 번호가 오름차순으로 매겨져 있다. 이처럼 메모리셀에 붙여져 있는 고유 번호를 '메모리 주소'라고 한다.

 

 

class Example {
	public static void main(String[] args) {
		0xf38d2a6c = 1; // 값 저장
		출력(0xf38d2a6c) // 값 사용
	}
}

 위의 예시에서 0xf38d2a6c와 0xf38d2a6c는 메모리 주소이다. 이와 같은 방법은 여러 문제점을 가지고 있다.

  1.  저장해야 할 값이 많을 때, 메모리 주소를 식별하기 어렵다.
  2. 시스템 운영에 꼭 필요한 데이터를 실수로 덮어쓸 가능성이 있다.

 

 이러한 문제들을 해결해주는 것이 바로 변수이다. 변수를 사용하면 아래와 같이 값을 저장할 수 있다.

class Example {
	public static void main(String[] args) {
		int num1 = 1;
		int num2 = 2;
		int num3 = 3;
		...
	}
}

 

 여기서 num1, num2, num3가 바로 변수이다. 확실히 메모리 주소를 코드에 입력하는 것보다 가독성이 좋아보인다. 여기서 변수의 정의를 다시 말하면 '값을 저장할 수 있는 메모리 공간을 확보하고, 사람이 식별할 수 있는 이름을 붙인 것'이다.

 

 

 

 

변수 선언


 변수를 사용하기에 앞서 변수를 선언해야 한다. 변수를 선언할 때는 저장하고자 하는 값의 데이터 타입과 함께 변수 이름을 작성해주면 된다.

class Example {
	public static void main(String[] args) {
		int num; // 변수 선언
	}
}

// int는 데이터 타입이며 정수형을 의미

 위 예시에 num이라는 변수를 선언했다. 이제 num이라는 변수에 정수형 숫자를 저장할 수 있게 되었다. 컴퓨터가 어떤 값을 저장하려면 먼저 값을 저장할 메모리 공간을 확보한 후에 값이 저장된 공간에 이름을 붙여야 한다. 이 과정이 바로 변수를 선언할 때 발생화는 과정이다. 즉, 변수를 선언하면 컴퓨터는 값을 저장할 메모리 공간을 확보하고, 확보한 공간에 사용자가 입력한 변수 이름으로 이름을 붙인다.

 

 예를 들어 int num은 int형 값을 저장해야 하니까 int형의 데이터 크기인 4byte 만큼의 메모리 공간을 확보하고 그 공간에 num이라는 이름을 붙이라는 말이다. 정리하면, 변수를 선언한다는 것은 어떤 값을 저장할 메모리 공간을 확보하고 그 메모리 공간에 식별할 수 있는 이름을 붙인다는 것이다.

 

 

 

 

값 할당


 할당(또는 대입)은 변수에 값을 저장하는 것이다. 방법은 간단하게 대입 연산자(=)를 활용하면 된다.

class Example {
	public static void main(String[] args) {
		int num; // 변수 선언
		num = 1; // 값 할당
	}
}

 

 대입 연산자는 어떤 값을 변수에 할당시켜주는 연산자를 의미한다. 이때 우항에는 할당할 값이, 좌항에는 변수가 위치해야 한다. 위 예시에서 num은 값 1을 저장하고 있는 상태가 되었다.

 

 변수를 선언하고 나서 처음으로 값을 할당하는 것을 초기화라고 한다. 그리고, 초기화가 이루어진 후에 다시 다른 값을 할당하는 것을 재할당이라고 한다. 즉, 재할당이 가능하다는 것은 저장하고 있는 값이 바뀔 수 있다는 것을 의미하고 이러한 메모리 공간을 변수라고 부른다.

class Example {
	public static void main(String[] args) {
		int num; // 변수 선언
		num = 1; // 값 할당(초기화)
		num = 2; // 값 할당(재할당)
	}
}

 아래 예시처럼 변수를 선언하면서 동시에 초기화도 가능하다.

class Example {
	public static void main(String[] args) {
		int num = 1; // 선언과 동시에 초기화
	}
}

 

 

 

 

변수 명명 규칙


 변수 이름을 지을 때는 지켜야할 룰이 있다.

 

  1. 자바에서 변수명은 일반적으로 카멜 케이스(camelCase)를 사용한다. 카멜케이스란 낙타 등 모양을 닮았다고 해서 붙여진 이름으로, 두 번째 단어부터 대문자로 시작해 구분한다.
  2. 변수명으로 영문자, 숫자, _, $를 사용할 수 있으며 영문자는 대소문자가 구별되어 인식된다. 즉, a와 A는 다른 문자로 인식된다.
  3. 숫자로 시작하는 변수명은 사용할 수 없다.
  4. 자바에서 이미 사용 중인 예약어(reserved word)는 변수명으로 사용할 수 없다.

 

 

 

 

상수


 상수(Constant)란 수식에서 변하지 않는 값(데이터)을 의미한다. 다시 말해, 변하지 말아야할 데이터를 임시적으로 저장하기 위한 수단이며 재할당이 금지되어 있다. 상수는 재할당할 수 없으므로 상수를 변경하려고 하면 에러가 발생한다.

 

 상수는 final이라는 키워드를 사용해 선언할 수 있고 관례적으로 대문자에 언더바(_)를 넣어 구분하는 SCREAMING_SNAKE_CASE를 사용한다. 그렇다면 재할당을 할 수 없는데 상수는 왜 사용하는 것일까?

 

 

 

상수를 사용하는 이유

  1. 프로그래머가 실수로 상수에 값을 재할당하고자 하면 에러가 발생하기 때문에 실수를 방지할 수 있다.
  2. 상수를 사용하면 값을 저장하고 있는 상수명으로 값을 사용할 수 있기 때문에 코드 가독성이 향상된다.
  3. 코드 유지관리를 손쉽게 할 수 있다.
    예를 들어, 우리가 만든 프로그램의 값을 변경해야 될 때에 상수를 사용하면 상수에 할당할 값만 변경하면 되므로 모든 코드를 일일이 찾아 수정할 필요가 없다.

 

 

 

 

리터럴 (Literal)


 리터럴(Literal)은 사전적으로 '문자 그대로의'라는 의미를 가진다. 프로그래밍에서 리터럴이란 '문자가 가리키는 값' 그 자체를 의미한다.

 

class Example {
	public static void main(String[] args) {
		int num; // 변수 선언
		num = 1; // 값 할당
	}
}

 

 위 코드에서 num이 할당하고 있는 1이 리터럴이다.

 

 개발자는 개발뿐만 아니라 소통에도 능해야 한다. 실제 프로젝트를 진행할 때는 대부분 팀 단위로 진행되기 때문이다. 따라서 정확한 용어를 사용하는 것은 원활한 소통에 있어 중요하기 때문에 어떤 개념을 생각하고, 기록하고, 말을 할 때 정황한 용어를 쓰도록 연습해야겠다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] 콘솔 입출력(I/O)  (0) 2022.12.22
[Java] 연산자(Operator)  (0) 2022.12.22
[Java] 문자열(String)  (0) 2022.12.21
[Java] 타입(Type)  (0) 2022.12.21
[Java] Java란?  (0) 2022.12.21