자바의 변수와 타입
1. 변수(variable)
: 변수는 값을 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간 즉, 하나의 값을 저장할 수 있는 메모리의 공간을 의미한다.
-변수의 선언
변수 사용을 위해 먼저 어떤 타입의 데이터를 저장할 것인지, 변수 이름이 무엇인지를 결정하여 선언하고 초기화한다.
변수 선언 방법에는 두 가지 방법이 있다.
1. 변수의 선언만 하는 방법
int age; // 정수 값을 저장할 수 있는 age 변수 선언
double pie; // 실수 값을 저장할 수 있는 pie 변수 선언
int x, y, z; // 같은 타입의 변수는 ,(콤마)를 이용해 한꺼번에 선언 가능
2. 변수의 선언과 동시에 초기화하는 방법
int age = 19;
double pie = 3.14;
int x = 10, y = 20, z = 40;
-> 변수에 값을 저장할 때에는 대입 연산자(=)를 사용하는데 같다는 의미가 아닌 우측의 값을 좌측 변수에 저장한다는 의미를 가진다.
※ 변수 선언, 초기화 오류의 경우
- 변수 선언 후 초기화를 하지 않았을 경우
- 같은 타입의 변수를 동시에 선언 후 동시에 초기화 할 경우
- long 또는 float 초기화 할 때 뒤에 long의 약자 L 또는 l, float의 약자 F, f를 생략했을 경우
int age; // 변수의 선언
System.out.println("age = " + age); // 변수 선언 후 초기화를 해주지 않았기 때문에 오류 발생
int a, b; // 같은 타입의 변수 동시에 선언
a = 5, b = 7; // 이미 선언된 여러 변수를 동시에 초기화는 할 수 없다.
flaot number = 354.5; // 354.5f로 초기화해주어야 한다.
※ 변수 사용 시 주의사항
- 첫 번째 글자는 문자이거나 '$', '_'이어야 하고 숫자로 시작할 수 없다.
- 영어 대소문자가 구분된다.
- 자바 예약어(int, public, void, new, true 등)는 사용 불가하다.
- 연산자(+, -, *, /, %)를 포함하면 선언 불가하다.
-상수(constant)
: 이름을 가지고 있는 메모리 공간으로 변수와 달리 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다.
final float INCH = 2.54f;
-> final 필드는 최종적인 필드란 뜻으로 초기값이 저장되면 이것이 최종적인 값이 된다.
final 필드를 사용시에는 선언과 동시에 초기값을 주거나 생성자에서 주는 방법밖에 없다.
* 자바에서는 상수의 이름은 주로 대문자를 사용하여 선언하며 여러 단어로 이루어진 경우에는 언더스코어(_)를 사용하여 구분한다.
-리터럴(literal)
: 그 자체로 값을 의미하는 것 즉, 변수와 상수와 달리 데이터가 저장된 메모리 공간을 가리키는 이름을 갖지 않는다.
int height = 183; // 183이 정수 리터럴
final float INCH = 2.54f; // 2.54가 실수 리터럴
char ch = '\n'; // '\n'(escape 문자)이 문자 리터럴
String korea = "대한민국" // "대한민국"이 문자열 리터럴
boolean b = true; // true가 논리 리터럴
※문자 리터럴 (escape 문자)
: char만이 문자 리터럴을 저장할 수 있다.
이스케이프 문자 | 용도 |
'\t' | 수평 탭 |
'\n' | 줄 바꿈 |
'\r' | 리턴 |
'\"' | "(큰 따옴표) |
'\'' | '(작은 따옴표) |
'\\' | \ |
'\u16진수' | 16진수에 해당하는 유니코드 |
2. 타입(Type)
-데이터 타입
기본형(primitive) 타입
: 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입으로 실제 연산에 상용되는 변수
정수형 | byte | 1 byte |
short | 2 byte | |
int | 4 byte | |
long | 8 byte | |
실수형 | float | 4 byte |
double | 8 byte |
문자형 | char | 2 byte |
논리형 | true/false | boolean | 1 byte |
참조형(reference) 타입
: 객체(Object)의 번지를 참조하는 타입
*String (클래스)
: String 변수는 참조 변수로 String 객체가 생성되고 String 변수는 String 객체의 번지 참조한다.
-> char타입은 단 하나의 문자만 저장하기 때문에 문자열 저장을 위해 String 타입을 많이 사용한다.
-타입 변환
: 데이터 타입을 다른 데이터 타입으로 변환하는 것 즉, byte 타입을 int 타입으로 반대로 int 타입을 byte 타입으로 변환하는 행위이다.
타입 변환에는 두 가지 종류가 있다.
1. 자동(묵시적) 타입 변환 (Promotion)
: 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것으로 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생
※ 크기별 타입 정리
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
-> 4byte인 float이 int와 long보다 더 큰 타입으로 표현된 것은 float이 표현할 수 있는 값의 범위가 더 크기 때문
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환
2. 강제(명시적) 타입 변환
: 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것
int intValue = 103029770;
byte byteValue = (byte) intValue; // 강제 타입 변환 (casting)
/*연산식에서의 강제 타입 변환*/
int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int)doubleValue; // result에 15가 저장