프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록되어야 한다. 그리고 메모리에 값을 기록하고 지속적으로 사용하려면 변수부터 만들어야 한다.
메모리(RAM)에 값을 기록하기 위한 공간
- 공간에 기록되는 값(Data)이 변할 수 있어서 변수라고 한다.
- 변수는 여러 종류가 존재한다. (저장되는 값의 형태나 크기가 다름)
변수를 사용하면 어떤 장점이 있는지 아래 코드로 직접 살펴보자.
System.out.println(2 * 3.141592653589793 * 10);
System.out.println(3.141592653589793 * 10 * 10);
System.out.println(3.141592653589793 * 10 * 10 * 20);
System.out.println(4 * 3.141592653589793 * 10 * 10);
코드가 길고 복잡하여 한눈에 보기가 어렵다. 또한 값이 변화하였을 때 숫자를 일일이 바꿔 줘야 하는 번거로움이 있다. 이때 만약 변수를 사용한다면 어떤 변화가 있을까?
double pi = 3.141592653589793; // 원주율
int r = 10; // 반지름(radius)
int h = 20; // 높이(height)
System.out.println(2 * pi * r); // 원의 둘레
System.out.println(pi * r * r); // 원의 넓이
System.out.println(pi * r * r * h); // 원기둥의 부피
System.out.println(4 * pi * r * r); // 구의 겉넓이
변수를 사용하자 코드가 훨씬 간결해진 것을 볼 수 있다. 또한 이 코드는 어떤 용도로 짜여진 것인지 알아보기가 훨씬 쉽다.
변수 사용의 장점은 아래와 같다.
- 가독성 증가 (읽기 편해짐)
- 재사용성 증가 (한 번 만든 변수를 계속 사용 가능함)
- 코드 길이의 감소
- 유지보수성 증가 (코드 수정이 간단해짐)
저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준이 필요하다.
비트(bit)
: 컴퓨터가 나타내는 데이터의 최소 저장 단위로서 2진수 값 하나를 저장할 수 있는 메모리 공간
바이트(byte)
: 데이터 처리 또는 문자의 최소 단위로서 8개의 비트가 모여 하나의 바이트가 구성됨
메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것
- 논리형: boolean(1byte)
- 정수형: byte(1byte), short(2byte), int(4byte), long(8byte)
- 실수형 : float(4byte), double(8byte)
- 문자형 : char(2byte, 유니코드)
boolean booleanData;
// 메모리에 논리 값(True / False)을 저장할 공간을 1byte 할당하고
// 할당된 공간을 booleanData라고 부르겠다.
값 대입
: 생성한 변수(저장 공간)에 값을 대입하는 것
리터럴
: 변수에 대입되는 값 자체
변수를 사용하기 전에 처음으로 값을 저장하는 것
지역 변수는 반드시 초기화해야 한다.
booleanData = true; // booleanData 변수에 true 값을 집어넣기
System.out.println("booleanData : " + booleanData);
byte byteNumber = 127; // (short, byte는 옛날 코드의 잔재)
// 메모리에 정수 값을 저장할 공간을 1byte 할당하고
// 할당된 공간을 byteNumber라고 부르겠다.
// 선언된 byteNumber 변수에 처음으로 127을 집어넣겠다.
// --> 초기화 : 처음 변수에 값을 대입하는 것
int intNumber = 2147483647; // 변수 선언 및 초기화
long longNumber = 10000000000L; // 또는 소문자 l
// The literal 10000000000 of type int is out of range
float floatNumber = 1.2345f;
// Type mismatch: cannot convert from double to float
double doubleNumber = 3.141592;
// (리터럴 표기법이 없는 실수는 double로 인식)
// 문자형 리터럴 표기법 : '' (홑따옴표)
// -> 문자 하나를 의미
char ch = 'A';
char ch2 = 66;
// ** char 자료형에 숫자가 대입될 수 있는 이유
// - 컴퓨터에는 문자표가 존재하고 있는데,
// 숫자에 따라서 지정된 문자 모양이 매핑되어 있고
// 'B' 문자 그대로가 대입이 되면 변수에 숫자 66으로 변환되어 저장된다.
// -> 반대로 생각하면 변수에 애초에 66이라는 숫자를 저장하는 것이 가능하다.
System.out.println("ch : " + ch);
System.out.println("ch2 : " + ch2);
int abcdefghijklmnopqrstuvwxyz;
int abcdefghijklmnopqrstuvwxyZ; // Z 다름
double double;
// 오류! Syntax error on token "double", invalid VariableDeclarator
char 1abc;
// 오류! Syntax error on token "1", delete this token
int $intNumber; // 컴파일 시 문제는 없지만 개발자가 직접 작성하지는 않음
int int_number; // 자바는 카멜 표기법 사용 (-> intNumber)
// _ 작성 표기법은 DB에서 사용
char helloWorldAppleBananaTomato;
int 정수1번;
double 실수2번 = 3.14;
System.out.println(실수2번);
수학에서는 변하지 않는 값을 의미
컴퓨터(Java)에서는 한 번만 저장(기록)할 수 있는 메모리를 의미
- 한 번 값이 대입되면 다른 값을 대입할 수 없음
- 자료형 앞에 final 키워드를 작성해야 함 (마지막에 대입되는 값)
final double PI_VALUE = 3.14;
// PI_VALUE = 2.3222; // 에러! 대입 불가
// The final local variable PI_VALUE cannot be assigned. It must be blank and not using a compound assignment
final int LEFT_MOVE = -1;
final int RIGHT_MOVE = 1;
System.out.println(1 + 1.3);