Java

[Java] 변수의 사용

콩스프 2022. 10. 10. 21:40

변수를 사용한다는 것 = 변수에 값을 저장하고 읽는 행위

 

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 변수를 사용할 수 없기 때문에 컴파일 에러 발생

- 변수를 선언할 때 변수가 어떤 범위에서 사용될 것인지 생각하고 선언위치를 결정해야 함

- 메소드 블록에서 어떤 위치에서건 사용할 수 있도록 하려면 메소드 블록 첫머리에 선언하는 것이 좋음

- 제어문 내에서 잠깐 사용되는 변수는 제어문 내에 선언하는 것이 좋음