변수란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미하며 변수에 저장하는 데이터를 값(value)이라 한다.
한번 이름이 할당(선언)된 변수는 이름과 타입을 변경할 수 없으며, 변수에 저장된 값은 변경될 수 있다.
자바에서 변수를 사용하기 위해서는 반드시 변수의 선언이 선행되어야 한다.
변수를 선언하는 방법은 아래와 같다..
1) 변수의 선언만 하는 방법
[타입] [변수 이름];
: 먼저 변수만을 선언하여 메모리를 할당받은 후, 나중에 변수를 초기화 하는 방법.
2) 변수의 선언과 동시에 초기화 하는 방법
[타입] [변수 이름] = [초기값];
: 변수의 선언과 초기화를 같은 열에서 수행하는 방법.
3) 동일한 타입의 경우 다수의 변수를 한번에 선언할 수 있다.
[타입] [변수 이름], [변수 이름];
[타입] [변수 이름] = [초기값], [변수 이름] = [초기값];
자바에서 변수, 상수, 메서드의 이름을 지을 때 반드시 지켜야 하는 공통 사항이다.
아래는 필수 사항은 아니나 변수 이름 생성 시 관례적으로 사용하길 권장하는 사항이다.
카멜 케이스(Camel Case): 프로그래밍에서 파일, 변수, 함수 등 대상의 이름을 띄어쓰기 없이 짓기 위하여 따르는 관례인 네이밍컨벤션(Naming convention)의 하나.
변수의 선언 위치에 따라 다음과 같은 유형으로 구분할 수 있다.
1) 전역변수(Global variable)
클래스부에 선언된 변수들로 객체의 속성에 해당.
인스턴스 변수와 클래스 변수로 구분됨.
필드(Field) 혹은 멤버변수(Member variable) 이라고도 한다.
인스턴스 변수(Instance variable)
클래스가 인스턴스될 때 초기화되는 변수.
인스턴스를 통해서만 접근할 수 있음.
클래스 변수(Class variable)
static으로 선언된 변수.
인스턴스 생성없이 클래스이름.변수명으로 사용가능.
main() 메서드에서 참조 가능.
2) 지역 변수(Local variable)
메서드 내에서 선언된 변수.
멤버변수와 동일한 이름을 가질수 있으며 지역변수가 우선.
3) 매개 변수(Parameter)
메서드에 인자로 전달되는 값을 받기 위한 변수.
메서드 내에서는 지역변수 처럼 사용됨.
자료형, 즉 데이터 타입(data type)은 변수에 저장하는 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 한다.
1) 실수형 데이터의 오차
기본 자료형을 ‘객체(Object)’로 다루기 위해서 비 객체를 객체화 시키는 클래스로 “기본타입의 객체화”를 의미한다.
기본 자료형(비 객체)를 객체화 시키는 과정을 기본 자료형을 클래스로 감싼다하여 '박싱(Boxing)'이라고 한다. (int -> Integer)
반대되는 과정은 '언박싱(UnBoxing)'이라고한다. (Integer -> int)
래퍼 클래스의 종류는 아래와 같다.
분류 | 기본형 | 래퍼 클래스 |
---|---|---|
논리형 | boolean | Boolean |
문자형 | char | Character |
정수형 | byte | Byte |
정수형 | short | Short |
정수형 | int | Interger |
정수형 | long | Long |
실수형 | float | Float |
실수형 | double | Double |
자료형을 다른 자료형으로 변환하는 것을 형변환(Type Conversion)이라 한다.
형변환은 상황 혹은 필요에 따라 자동적으로 발생하기도, 강제적으로 이뤄지기도 한다.
int num1 = 10;
long num2 = num1;
// num1의 '값'은 자동으로 long타입으로 변환되어 num2에 저장된다.
// 4byte로 저장된 값이 자동으로 8byte로 변환.
float num3 = 1.23f;
long num2 = num3; // 에러 발생.
// 4byte의 float타입 값을 8byte의 long타입에 저장 시 자동 형변환이 이뤄지지 않는다.
int num = 60000;
byte value = (byte)num; // 96, 데이터 손실이 발생한다.
int num2 = 10;
byte value2 = (byte)num2; // 10, 데이터 손실 발생하지 않는다.
객체 간 형변환
- 클래스형이나 인터페이스형과 같은 객체 간에도 형변환이 가능하다.
- 상속 혹은 구현관계에 있는 경우에 한해서만 가능하다.
연산 | 결과 |
---|---|
type 자료형 + byte 자료형 | int 자료형 |
short 자료형 + short 자료형 | int 자료형 |
int 자료형 + int 자료형 | int 자료형 |
long 자료형 + long 자료형 | long 자료형 |
float 자료형 + float 자료형 | float 자료형 |
double 자료형 + double 자료형 | double 자료형 |
char 문자형 + char 문자형 | int 자료형 |
2) 서로 다른 기본 자료형 간 연산 결과
연산 | 결과 |
---|---|
type 자료형 + short 자료형 | int 자료형 |
byte 자료형 + int 자료형 | int 자료형 |
short 자료형 + long 자료형 | long 자료형 |
int 자료형 + float 자료형 | float 자료형 |
long 자료형 + float 자료형 | float 자료형 |
float 자료형 + double 자료형 | double자료형 |
char 문자형 + int 문자형 | int 자료형 |
3) String과 기본 자료형간 형변환
연산 | 결과 |
---|---|
String 자료형 + 기본 자료형 | String 자료형 |
[기본자료형의 Wrapper Class].parse[기본자료형](String 자료형) | 기본 자료형 |
[기본자료형의 Wrapper Class].valueOf(string 자료형) | 기본 자료형의 Wrapper Class |
[기본자료형의 Wrapper Class].toString([기본자료형]) | String 자료형 |
String.valueOf([기본자료형]) | String 자료형 |
"" + [기본자료형] | String 자료형 |
String str = "123";
boolean flag = true;
char ch = 'A';
Integer.pasreInt(str); // (int형) 123
Double.parseDouble(str); // (double형) 123.0
Integer.valueOf(str); // (Integer형) 123
Boolean.toString(flag); // (String형) true
String.valueOf(ch); // (String형) A
https://dinfree.com/lecture/language/112_java_2.html#m2
https://sseoui.tistory.com/m/4
https://www.tcpschool.com/java/java_datatype_variable
https://www.devkuma.com/docs/java/data-type/
https://adjh54.tistory.com/119
https://inpa.tistory.com/entry/JAVA