변수를 사용한다는 것 = 변수에 값을 저장하고 읽는 행위
1. 변수값 저장
변수에 값을 저장할 때에는 대입 연산자 (=)를 사용함
일반 수학 -> 같다
자바 언어 -> 우측의 값을 좌측 변수에 저장한다
초기값 : 변수를 선언하고 처음으로 저장한 값
초기화 : 변수에 초기값을 주는 행위
EX) 90이라는 값을 변수 score에 저장하려면
int score; //변수선언
score = 90; //값 저장
정수 타입(int) score 변수 선언 후 초기 값 90 저장
초기값은 변수를 선언함과 동시에 줄 수 있음
int score = 90;
1.1 리터럴 (literal)
변수의 초기값은 코드에서 직접 입력하는 경우가 많음
소스 코드 내에서 직접 입력된 값을 리터럴 (literal) 이라고 부름
리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값
EX) 10, 3.14, 'A', true
- 값의 종류에 따라 상수 리터럴, 실수 리터럴, 문자 리터럴, 논리 리터럴로 구분
- 리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 있음
- 필요한 경우 상수 풀에서 가져와서 사용
- 상수 풀에 저장 할 때 정수는 int로 실수는 double로 저장 - 리터럴은 정해진 표기법대로 작성되어야 함
리터럴은 상수(constant)와 같은 의미지만 프로그램에서 상수를 "값을 한 번 저장하면 변경할 수 없는 변수"로 정의함
이와 구분하기 위해 "리터럴"이라는 용어를 사용
정수 리터럴
- 소수점이 없는 정수 리터럴은 10진수로 간주함
0, 75, 100
- 0b 또는 0B로 시작되는 리터럴은 2진수로 간주함
0b1010, 0B101
- 0으로 시작되는 리터럴은 8진수로 간주함
02, -04
- 0x 또는 0X로 시작하고 0~9 숫자나 A, B, C, D, E, F 또는 a, b, c, d, e, f로 구성된 리터럴은 16진수로 간주함
0x5, 0xA, 0xB3, 0xAC08
실수 리터럴
- 소수점이 있는 리터럴은 10진수 실수로 간주함
0.25, -3.14
- 대문자 E 또는 소문다 e가 있는 리터럴은 10진수 지수와 가수로 간주함
5E7 // 5 * 10^7
0.12E-5 //0.12 * 10^-5
문자 리터럴
- 작은 따옴표 ( ' )로 묶은 텍스트는 하나의 문자 리터러로 간주
'A', '한', '\t', '\n'
- 역슬래쉬 ( \ )가 붙은 문자 리터럴은 이스케이프 (escape) 문자라고 하며 특수한 용도로 사용됨
이스케이프 문자 | 용도 | 유니코드 |
'\t' | 수평 탭 | 0x0009 |
'\n' | 줄 바꿈 | 0x000a |
'\r' | 리턴 | 0x000d |
'\"' | " (큰 따옴표) | 0x0022 |
'\" | ' (작은 따옴표) | 0x0027 |
'\\' | \ | 0x005c |
'\u16진수' | 16진수에 해당하는 유니코드 | 0x0000 ~ 0xffff |
문자열 리터럴
- 큰따옴표 ( " )로 묶은 텍스트는 문자열 리터럴로 간주함
- 큰따옴표 안에 텍스트가 없어도 문자열 리터럴로 간주함
- 문자열 리터럴 내부에서도 이스케이프 문자를 사용할 수 있음
"대한민국"
"탭 만큼 이동 \t 합니다."
"한줄 내려 쓰기 \n 합니다."
" "
논리 리터럴
- true와 false는 논리 리터럴로 간주함
true false
2. 변수 값 읽기
변수는 초기화 되어야 읽을 수 있음 (초기화되지 않은 변수는 읽을 수 없음)
잘못된 코딩 EX)
int value; //변수 value 선언 (초기화 안 됨)
int result = value + 10; //변수 value 값을 읽고 10을 더한 결과값을 변수 result에 저장
- 변수 value가 선언되었지만, 초기화 되지 않았기 때문에 산술 연산식 value+10 에서 사용할 수 없음
- 컴파일 에러 발생
수정)
int value = 30; //변수 value가 30으로 초기화됨
int result = value + 10; //변수 value 값을 읽고 10을 더한 결과값(40)을 변수 result에 저장
3. 변수의 사용 범위
변수는 중괄호 {} 블럭 내에서 선언되고 사용됨
- 중괄호 블럭을 사용하는 곳은 클래스, 생성자, 메소드
로컬 변수 (local variable) : 메소드 블록 내에서 선언된 변수
- 로컬 변수는 메소드 실행이 끝나면 메모리에서 자동으로 없어짐
main() 메소드 블록에서 변수가 선언된 EX)
변수는 메소드 블록 내 어디에서든 선언할 수 있지만 변수 사용은 제한이 따름
메소드 블록 내에서도 여러가지 중괄호 { } 블럭이 있을 수 있음
- 조건문에 해당하는 if { }
- 반복문에 해당하는 for() { }, while() { }
=> if, for, while을 제어문이라고 함
제어문 블록에서 선언된 변수는 해당 제어문 블록 내에서만 사용이 가능하고 블록 밖에서는 사용할 수 없음
변수의 사용 범위 EX)
public class VariableScopeExample {
public static void main(String[] args) {
int v1 = 15;
if(v1>10) {
int v2 = v1 - 10;
}
int v3 = v1 + v2 + 5; //v2 변수를 사용할 수 없기 때문에 컴파일 에러 발생
- 변수를 선언할 때 변수가 어떤 범위에서 사용될 것인지 생각하고 선언위치를 결정해야 함
- 메소드 블록에서 어떤 위치에서건 사용할 수 있도록 하려면 메소드 블록 첫머리에 선언하는 것이 좋음
- 제어문 내에서 잠깐 사용되는 변수는 제어문 내에 선언하는 것이 좋음