자바의 정석(3) - 자바의 첫 번째 이야기, 변수
*이 글은 개인적인 공부/기록 목적으로 올립니다.
부족하다고 느껴질 수 있는 글이니 양해 부탁드립니다.*
참고도서
http://www.yes24.com/Product/Goods/24259565
Java의 정석 - YES24
최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아
www.yes24.com
■ 변수란
변수는 프로그래밍을 하는 사람이라면 누구나 들어본 단어이다. 특히 개발자라면 가장 중요한 능력중의 하나가
'값(data)을 잘 다루는 것'이다. 값을 저장하려면 값을 저장할 수 있는 공간이 필요한 데 그 공간이 바로 변수이다.
이 책에서 나오는 변수의 정의 다음과 같다.
"변수란, 단 하나의 값을 저장할 수 있는 메모리 공간."
하나의 변수에 단 하나의 값만 저장할 수 있으므로, 새로운 값을 저장하려면 기존의 값을 삭제하거나,
새로운 변수에 집어넣어야 한다.
■ 변수의 선언과 초기화
변수를 사용하려면 변수를 선언해야 하는데, 자바에서는 변수를 다음과 같이 선언한다.
int age;
age라는 이름의 변수에 int라는 기본형 타입을 선언하였다.
'변수타입'은 어떤 변수에 저장될 값이 어떤 타입인지 지정하는 것인데 저장하는 값의 종류에 따라 변수타입을
선택해서 적어주면 된다. 자바에서는 정수형, 실수형, 문자형등 다양한 타입이 존재한다.
'변수이름'은 말 그대로 변수에 붙인 이름이다.
변수는 '값을 저장할 수 있는 메모리 공간'이므로 같은 이름의 변수는 존재해선 안된다. 꼭 명심하자!
그리고 변수를 선언한 이후 변수를 사용할 수 있지만, 그 전에 반드시 변수를 '초기화(initialization)' 해야 한다.
메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된 '알 수 없는 값'이
남아있을 수 있기 때문이다. 변수에 값을 저장할 때는 대입 연산자 '='를 사용해야 하는데 대입 연산자에 대해서는
나중에 알아보고자 한다.
int age = 31;
변수 age를 선언하고 31로 초기화 하였다.
변수의 종류에 따라 변수의 초기화를 생략할 수 있는 경우도 있지만, 변수는 사용되기 전에 적절한 값으로 초기화 하는 것이
좋다.(지역 변수는 사용되기 전에 초기화를 해야 하지만 클래스 변수와 인스턴스 변수는 생략할 수 있다.)
■ 변수의 명명규칙
명명규칙이라는 것은 이름을 짓는 규칙을 말한다.
변수나 클래스, 메서드등의 이름을 지을 때 지켜야 하는 몇가지 규칙이 있다.
1. 대소문자가 구분되며 길이에 제한이 없다.
- True와 true는 서로 다른 것으로 간주된다.
2. 예약어(Reserved word)를 사용해서는 안 된다.
- true는 예약어라 사용할 수 없지만, True는 가능하다.
3. 숫자로 시작해서는 안 된다.
- top10은 허용하지만, 7up은 허용되지 않는다.
4. 특수문자는 '_'와 '$'만을 허용한다.
- $harp은 허용되지만 S#arp는 허용되지 않는다.
그리고 필수적인 부분은 아니지만 자발 개발자라면 권장하는 규칙들도 있다.
1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
- 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
- lastIndexOf, StringBuffer
3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
- PI, MAX_NUMBER
■ 변수의 타입
앞에서 변수가 어떤 값을 저장하기 위한 공간이라고 얘기했는데 변수에 어떤 값을 저장할 것인가에 따라
변수의 타입이 결정된다. 아래에 변수의 타입을 정리해보았다.
자료형 | 설명 | 바이트(크기) | 범위 |
byte | 부호있는 정수 | 1바이트 | -128 ~ 127 |
short | 부호있는 정수 | 2바이트 | -32768 ~ 32767 |
int | 부호있는 정수 | 4바이트 | 약 -21억 ~ 21억 |
long | 부호있는 정수 | 8바이트 | -9223372036854775808 ~ 9223372036854775807 |
float | 실수형 | 4바이트 | 0x0.000002P-126f ~ 0x1.fffffeP+127f |
double | 실수형 | 8바이트 | 0x0.00000000f00001P-1022 ~ 0x1.fffffffffffffP+1023 |
char | 문자형 | 2바이트 | 0 ~ 2^15-1 |
boolean | 논리형 | 1바이트 | true, false |
변수의 타입은 크게 기본형과 참조형으로 나눌 수 있다.
기본형은 위의 표처럼 8개의 타입을 말하고 변수에 실제 값을 저장한다.
또다른 타입인 참조형은 기본혀여 8개를 제외한 나머지 타입이 모두 참조형이라고 할 수 있다.
예를 들어 어떤 클래스를 정의하면 새로운 참조형이 하나 생성된다고 보면 된다.
추후에 클래스에 대해 다룰 예정이기 때문에 가볍게 보고 넘기도록 한다.
기본형에는 실제 값을 저장하지만, 참조형에는 객체의 위치를 알려주는 객체의 주소값을 저장한다.
객체를 생성하고, 생성된 객체의 주소를 참조형 변수에 저장하여 객체를 다룰 수 있게 된다는 뜻이다.
■ 변수의 타입 형변환
형변환이란 값을 타입을 다른 타입으로 변환하는 것을 의미한다.
우리가 프로그래밍을 하다보면 다른 타입의 값을 계산해야 되는 경우가 발생하게 되는데
그럴 때 형변환을 하게 된다.
형변환하는 방법은 간단한데 내가 형변환하고 싶은 타입을 괄호안에 입력해서
리터럴이나 변수 앞에 붙여주기만 하면 된다. 물론 기본형과 참조형간에는 형변환이 되지 않으며
기본형중 boolean을 제외한 7개의 타입은 형변환이 가능하다.
변환 | 수식 | 결과 |
int -> char | (char)65 | 'A' |
char -> int | (int)'A' | 65 |
float -> int | (int)1.6f | 1 |
int -> float | (float)10 | 10.0f |
타입을 변환하는 작업은 명시해주는 것이 원칙이지만 크기가 작은 타입에서 큰 타입으로 변환하는 경우에
생략 가능하다고 교제에 나오게 된다. 반대로 큰 타입에서 작은 타입으로 형변환하게 될 경우 값 손실이 있지만
작은 타입에서 큰 타입으로 변환할 경우 값 손실이 있지 않기 때문에 형변환을 자동적으로 수행할 수 있다.
이제 본격적으로 자바 공부한 것을 블로그에 포스팅하면서 복습하는 개념으로 갈 계획인데 첫 시작이 반이라는 말처럼
자바의 정석 교제가 끝날 때까지 끝까지 할 수 있도록 스스로 의지를 다지며 화이팅 해보겠다.