변수란?
프로그래밍언어에서 변수란, 값을 저장할 수 있는 메모리 공간을 뜻함.
이 공간에 저장된 값은 변경 될 수 있기 때문에 '변수'(변하는 수)라는 수학용어의 정의와 상통하는 면이 있어서 붙여짐.
하나의 변수엔 단 하나의 값만 저장 가능.
변수의 선언과 초기화
변수 선언
int age; // age라는 이름의 변수 선언
// int는 변수타입
// age는 변수이름
'변수타입'은 변수에 저장될 값이 어떤 타입인지를 지정하는 것.
'변수이름'은 말 그대로 변수에 붙인 이름. 즉, 메모리 공간에 이름을 붙여주는 것.
이름을 이용해서 값을 저장하거나, 읽어오는 것을 할 수 있게 된다.
당연한 이야기지만, 서로 구별될 수 있어야하기때문에 동일한 이름의 변수가 있으면 안됨.
변수를 선언하면, 메모리의 빈 공간에 '변수타입'에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간은 '변수이름'을 통해 사용할 수 있음.
변수의 초기화
변수를 사용하기전엔 초기화(initialization)을 해야한다.
메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된 '알 수 없는 값(쓰레기값, garbage value)'이 남아있을 수 있기 때문이다.
int x = 0;
int y = 1;
int a = 0, b= 1;
대입 연산자('=')를 통해 초기화한다.
변수의 사용
class VarEx1 {
public static void main(String[] args){
int year = 0;
int age = 14;
year = age +1;
System.out.println(year); // 15가 출력됨
}
}
변수를 초기화해준뒤, 해당 변수이름을 불러서 사용하면 된다.
변수의 명명 규칙
'변수이름'처럼 프로그래밍에서 사용하는 모든 이름을 '식별자(identifier)'라고 하며, 식별자는 같은 영역 내에서 서로 구분될 수 있어야한다. 그리고 식별자를 만들 땐 다음과 같은 규칙을 지켜야 한다.
필수 규칙
- 대소문자가 구분되며 길이에 제한이 없다.
- 예약어를 사용해서는 안된다.
- True,boolean 등 프로그래밍언어의 구문에 사용되는 단어.(키워드 | 리져브드 워드 라고도 한다)
- 숫자로 시작해서는 안된다.
- 특수문자는 '_' 와 '$'만 허용한다.
권장 규칙(개발자들 사이의 암묵적인 룰)
- 클래스 이름의 첫 글자는 항상 대문자로 한다.
- 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.(카멜법)
- lastIndexOf, StringBuffer
- 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.(스네이크법)
- PI, MAX_NUMBER
변수의 이름은 짧을수록 좋지만, 길더라도 용도를 알기 쉽게 '의미있는 이름'으로 해주는 것이 좋다.
변수의 타입
기본형과 참조형
자료형은 '기본형'과 '참조형' 두 가지로 나눌 수 있는데, 기본형 변수는 실제값(data)을 저장하는 반면,
참조형 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다.
메모리 주소 참조
메모리에는 1byte단위로 일련번호가 붙어있음.
이 번호를 '메모리 주소(memory address)' 또는 간단히 '주소'라고 한다.
객체의 주소는 객체가 저장된 메모리의 첫번째 주소를 뜻함.
참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용한다.
그래서 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 셈이기도 하다.
참조변수를 선언하는 방법
클래스이름 변수이름; // 변수의 타입이 기본형이 아닌 것들은 모두 참조변수
Date today = new Date();
// Date 객체를 생성해서, 그 주소를 today에 저장
참조변수는 null 또는 객체의 주소를 값으로 가지며 참조변수의 초기화는 위와 같이 한다.
객체를 생성하는 연산자 new의 결과는 생성된 객체의 주소이다. 이 주소가 대입연산자('=')에 의해 참조변수 today에 저장된다.
참조
'Java의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] 진법 / 진법 변환(n진수 변환) /실수 진법변환 (0) | 2022.02.25 |
---|---|
[Java] 형식화 출력 printf() & 입력값 받기 Scanner (0) | 2022.02.25 |
[Java] 기본형(Primitive type) & 상수와 리터럴(constant & literal) (0) | 2022.02.25 |
[Java] 자바 프로그램 실행 과정 (0) | 2022.02.24 |
[Java] 자바언어의 특징과 JVM (0) | 2022.02.24 |
댓글