컴퓨터 메모리(RAM)는 값을 저장할 수 있는 수많은 번지(주소)들로 구성되어 있다.
데이터를 메모리에 저장할 때, 어디에 어떻게 저장할지를 정해놓지 않으면 프로그램 개발이 어려워진다.
프로그래밍 언어는 이 문제를 해결하기 위해 변수라는 개념을 사용한다.
값을 저장할 수 있는 메모리 번지에 붙여진 이름을 의미한다.
메모리 번지에 값을 저장하고 읽을 수 있다.
정수, 실수 등 다양한 타입의 값을 저장할 수 있다.
데이터에 x라는 이름을 붙이면 이 x는 변수이다.
변수를 정수형 타입으로 선언하면 변수에 저장할 데이터는 정수 값이어야 한다.
변수를 사용하려면 우선, 변수를 선언해야 한다.
어떤 타입의 데이터를 저장하는지, 변수의 이름은 무엇인지를 작성해야 한다.
int age; // 정수(int)값을 저장할 수 있는 age 변수를 선언
int : 타입
age : 변수 이름
int x, y, z;
같은 타입의 변수는 콤마(,)를 사용하면 한꺼번에 선언할 수 있다.
자바 언어에서 정한 명명 규칙을 지켜 작성해야 한다.
작성 규칙 | 예 |
---|---|
첫 번째 글자는 문자이거나 $, _이어야 하고 숫자로 시작할 수 없다. | 가능 : price, $price, _price 불가능 : 1price, @price |
대소문자를 구분한다. | hello와 Hello는 다른 변수 |
첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 작성한다. camelcase 기법이라 한다. |
minSpeed, maxSpeed, firstName, lastName |
문자 수(길이)의 제한이 없다. | |
자바 예약어는 사용할 수 없다. |
예약어
자바 언어에서 의미를 가지고 사용되는 언어이다.
분류 | 예약어 |
---|---|
기본 타입 | boolean, byte, char, short, int, long, float, double |
접근 제한자 | private, protected, public |
클래스와 관련 |
class, abstract, interface, extends, implements, enum |
객체와 관련 | new, instanceof, this, super, null |
메소드와 관련 |
void, return |
제어문과 관련 |
if, else, switch, case, default, for, do, while, break, continue |
논리값 |
true, false |
예외처리 관련 | try, catch, finally, throw, throws |
기타 |
package, import, synchronized, final, static |
변수에 값을 저장할 때 대입 연산자(=)를 사용한다.
변수를 선언한 후 대입 연산자를 이용하면 오른쪽의 값을 왼쪽의 변수에 저장한다.
int age; // 변수 선언
age = 7; // 값 저장
변수 초기화
변수에 최초로 값이 저장되면, 메모리에 변수가 생성된다.
이를 변수의 초기화라 하고, 이 때의 값은 초기값이다.
초기화를 하지 않은 변수는 메모리에서 값을 읽을 수 없다.
Variable 'number' might not have been initialized
// 컴파일 오류 발생
int number; // 변수 number 선언, 초기화 하지 않음
int sum = number + 7; // number 값을 읽고, 7을 더해서 sum에 저장
// 올바른 작성법
int number; // 변수 number 선언
number = 7; // number에 초기값 7을 대입
int sum = number + 7; // number 값을 읽고, 7을 더해서 sum에 저장
변수를 사용하면 변수에 저장된 값을 출력하거나 연산에 사용할 수 있다.
int hour = 7;
int minute = 7;
System.out.println(hour + "시간" + minute + "분");
문자열인 "시간", "분"으로 인해 hour, minute 값이 정수이지만 문자열로 변경되고 문자열과 결합된다.
변수 값 복사
변수에 저장된 값은 다른 변수의 값으로 저장될 수 있다.
int x = 10;
int y = 5;
y = x; // x에 저장된 값을 변수 y에 복사
이때 y에 저장되어 있던 값 5는 사라지게 된다.
int x = 10;
int y = 5;
int temp = x; // 값(3), 새로운 변수에 저장
x = y; // 값(5)
y = temp; // 값(3)
새로운 변수를 사용하면, x의 값과 y의 값을 교환할 수 있다.
변수를 선언할 때 변수가 어떤 범위에서 사용되는지를 고려해야 한다.
메소드 블록 내에 선언된 변수를 로컬 변수라 한다.
로컬 : 해당 지역(메소드)에서만 사용할 수 있다라는 의미이다.
메소드 블록 내에서만 사용되고 메소드의 실행이 끝나면 자동으로 메모리에서 제거된다.
public class Hello {
public static void main(String[] args) {
int tempNum1 = 1;
int tempNum2 = 2;
// tempNum1, tempNum2 사용 가능
} // 메소드 블록 끝
// tempNum1, tempNum2 사용 불가
}
로컬 변수는 선언된 해당 블록 내에서만 사용 가능하다.
public class Hello {
public static void main(String[] args) {
int tempNum1 = 1;
int tempNum2 = 2;
if (//) {
int tempNum3 = 3;
int tempNum4 = 4;
// tempNum3, tempNum4 사용 가능
} // if문 블록 끝
// tempNum3, tempNum4 사용 불가
for (//) {
int tempNum5 = 5;
int tempNum6 = 6;
// tempNum5, tempNum6 사용 가능
} // for문 블록 끝
// tempNum5, tempNum6 사용 불가
// tempNum1, tempNum2 사용 가능
} // 메소드 블록 끝
// tempNum1, tempNum2 사용 불가
}
혼공자 강의를 기반으로 작성하였습니다. 🙏
7강