본문 바로가기

Develop/JAVA

[JAVA] 자바스터디 : 변수


※ 자바공부를 시작하면서 배우는 하나하나를 부족하더라도 정리해 업데이트 해보고자 한다. 개념상 일부 오류가 있을 수도 있고, 소스코드를 봤을 때 부족하거나 좀더 좋은 형태가 있을 수 있으니 참고만 바란다.


1. 변수 선언

변수를 선언하면 자료형에 따라 일정한 메모리 공간이 할당되고, 할당된 메모리에 데이터를 저장,참조할 수 있다. 예를 들어, 정수형 자료형 int를 사용해 변수를 선언한다면 이런 식이다. (자료형 종류는 별도로 정리하겠다)

int num;

풀이하면, num라는 변수를 정수형 자료형 int로 선언한다는 의미다. 그리고 변수 num을 통해 할당받은 메모리에 접근할 수 있고, 해당 메모리에 있는 값을 초기화 할 수 있다.

이렇게 선언된 변수에 초기화(값을 저장)를 하는 방법은 변수를 선언 후에 할 수도 있고 혹은 변수 선언과 동시에 할 수도 있다. 그 외에 변수 선언과 동시에 다른 변수의 연산결과로도 초기화 할 수 있다. 아래 코드로 케이스를 살펴본다.


class TestVariable
{
	public static void main(String[] args)
	{
		int num1;
		num1 = 15;

		int num2 = 20;
		int num3 = num1 + num2;

		System.out.println(num1);
		System.out.println(num2);
		System.out.println(num3);		
	}
}

5행 : int형 변수 num1을 선언

6행 : 변수 num1을 정수 15라는 값으로 초기화

8행 : int형 변수 num2를 선언, 정수 20이라는 값으로 초기화

9행 : int형 변수 num3을 선언, 변수 num1과 num2의 +연산 결과값으로 초기화

11~13행 : 변수 num1,num2,num3을 출력


변수 num1, num2, num3을 보기에는 약간 다르지만, 결국 모두 변수를 정수형 자료형 int로 선언하고 값을 초기화하고 있다. 답이 정해져있지는 않지만, 상황에 따라 보다 효율적인 활용을 고민해서 사용할 필요가 있다.



※ 수학적으로 정수는 실수의 범주에 포함되지만, 프로그래밍에서의 정수는 실수가 아닌 수다.(표현이 조금 이상하지만) 그리고 실수는 소수점 이하의 값이 있는 숫자를 말한다. 예를 들면 2는 정수고, 2.5는 실수다.

컴파일러가 이해하고 있는 정수, 실수를 각 변수에 저장하기 위해서는 그에 맞는 자료형으로 선언해야한다. int는 정수형 자료형임으로 2만 넣을 수 있고, 2.5를 넣으면 컴파일 에러가 발생한다. 반대로 실수형 자료형 float을 선언하면 2.5를 넣을 수 있고, 2를 넣으면 2.0 으로 값이 변환되어 넣어진다. 그리고 각기 다른 자료형 변수를 사칙연산으로 연산할 경우, 컴파일 에러가 발생한다. (단, 형 변환을 통해서 연산을 하면 가능하다)



2. 변수명 규칙

변수명을 아무렇게나 지으면 좋겠지만, 피해야 할 것이 있고 참고할 것이 있다.

1) 자바는 기본적으로 대소문자를 구별한다. (물론 다른 프로그래밍 언어도 대부분 이와 유사하다) 그래서 같은 단어라도 대소문자에 따라 전혀 다른 변수로 받아들여진다. 예를 들면, 변수 you와 변수 You는 전혀 다른 변수다. 우리가 보기에 같은 것 같지만 컴파일러는 전혀 달리 받아들이니 참고할 필요가 있다.

2) 변수명은 숫자로 시작할 수 없고, 특수문자는 $과 _ 외에는 사용할 수 없다.

3) 키워드(keyword)는 변수명으로 사용 할 수 없다. 키워드는 프로그래밍 언어에서 일종의 문법을 위한 약속 같은 것이다. int를 사용하면 정수형 자료형을 의미한다고 약속했기 때문에, 변수나 기타 다른 형태로의 사용을 할 수 없는 것이다. 자바의 대표 키워드들은 다음과 같다.


 boolean

if

interface

class

true 

char

else

package

volatile 

false

byte

final

switch

while

throws 

float

private

case

return

native 

void

protected

break

throw 

implements 

short 

public 

default

try 

import 

double

static 

for

catch 

synchronized 

int

new 

continue 

finally 

const 

long 

 this

do

transient 

enum 

 abstract

super 

extends 

instanceof 

null 


(표가 한 행 부족해서 추가했다. 혹시 의미가 있어 구분한 걸로 오해하면 안된다)