블로그 이름 뭐하지
[JAVA] 변수 본문
Java에서 저장하는 대부분의 값은 변하는 값, 즉 변수이다.
숫자 뿐 아니라 하나의 값을 저장하는 저장공간을 의미하는 것으로 문자나 문자열도 변수로 저장한다.
변수를 선언할 때는 값의 타입과 이름을 명시한다.
int number; // int는 타입, number는 변수이름 >> 정수타입의 number변수
String str; // String은 타입, str은 변수이름 >> 문자열타입의 str변수
이러한 변수에 값을 저장하는 방법은 두가지로,
선언과 동시에 저장하거나, 선언 후 저장하는 방법이 있다.
int number = 10; // 선언과 동시에 저장(초기화)
number = 20; // 선언 이후에 저장(덮어쓰기)
+) 변하지 않는 값, 상수
변수와 달리 변하지 않을 값을 저장할 때는 상수라고 표현한다.
변수 앞에 final을 붙이면 바꿀 수 없는 값이 된다.
final int number = 10;
number = 20; // 에러 발생 >> 상수이므로 값을 바꿀 수 없음
변수의 종류와 범위
1. 기본형 변수
▷ 비객체 타입이므로 null값을 가질 수 없다(기본값 지정)
▷ 변수의 선언과 동시에 메모리가 생성된다
▷ 모든 값은 스택(Stack) 메모리에 저장된다
▷ 메모리에 실제 자료 값을 가진다.
논리형 변수
boolean >> True / False의 두가지 값만 저장한다.
문자형 변수
char >> 문자 하나('A', '1')만 저장한다. char은 ' '(작은따옴표)를 사용해 묶는다
정수형 변수
0, 1, 33 등의 정수형 숫자값을 저장한다.
각 변수의 범위를 넘는 숫자를 넣게되면 오버플로우가 발생하여 입력값과 다른 값으로 표현된다.
byte >> 1byte의 수(-128~127)를 저장한다
short >> 2byte의 수(-32,768~32767)를 저장한다
int >> 4byte(약 -21억~21억)의 수를 저장한다
long >> 8byte(약 9백 경)의 수를 저장한다
byte byteNum = 127;
short shortNum = 32767;
int intNum = 214748367;
long longNum = 214748367L;
//long의 경우 숫자 뒤에 알파벳 L(접미사)을 붙여 표기한다.
//int와 Long의 데이터 값을 구분하기 위한 구분자이다.
실수형 변수
0.123, 0.99 같은 소수점 실수값을 저장한다.
각 변수의 범위를 넘는 숫자를 넣게되면 오버플로우가 발생하여 입력값과 다른 값으로 표현된다.
실수는 부동소수점 방식(기수와 지수를 구분하고 이 값을 곱한 값을 저장)으로 수를 저장하므로,
4byte의 float가 8byte의 long보다 넓은 범위를 표현할 수 있다.
float >> 4byte의 수(3.4 * -10^38 ~ 3.4 * 10^38)를 저장한다.
double >> 8byte의 수(1.7 * -10^308 ~ 1.7 * 10^308)를 저장한다.
float floatNum = 0.123f;
double doubleNum = 0.123123123;
//float도 long처럼 접미사 f를 붙여 double과 구분함
2. 참조형 변수
▷ 기본형을 제외한 모든 변수(래퍼 클래스 변수 포함)
▷ 스택(Stack)메모리에는 주소를, 힙(Heap)메모리에는 실제 값을 저장해, 주소를 참조하여 값을 가져온다.
▷ null로 초기화 가능
String >> 문자열("Apple", "텍스트")저장 , " "(큰따옴표)를 사용해 값을 묶는다.
배열(Array, List...)
열거(Enum)
클래스(Class)
인터페이스(Interface) 등이 있다.
3. 래퍼 클래스 변수
▷ 기본형 변수를 클래스로 한번 랩핑하는 변수
▷ 기본형 변수에서 첫글자를 대문자로 바꾼다(ex. int > Integer, char > String)
▷ 래퍼클래스를 사용하면 객체지향의 많은 기능을 사용할 수 있게 된다.
기본타입 > 래퍼클래스: 박싱(Boxing)
래퍼클래스 > 기본타입: 언박싱(UnBoxing)
Integer num = new Integer(17); // 박싱 >> int형 숫자를 래퍼클래스 객체로 전환
int n = num.intValue(); // 언박싱 >> Interger 객체를 int형 숫자로 되돌림
형변환
자동형변환
작은 타입 > 큰 타입으로 형변환시 자동 형변환됨
값의 손실이 없음
강제형변환(캐스팅)
큰 타입 > 작은 타입으로 형변환시, 또는 문자 >< 숫자 형변환시, 개발자가 직접 형변환을 시킴
값의 손실이 생길 수 있음
1. 정수 실수 간의 형변환
괄호 안에 변경할 타입을 넣어 변환
int intNum;
double doubleNum;
float floatNum;
intNum = (int)doubleNum; // double > int
intNum = (int)floatNum; // float > int
double Num = (double)intNum; //int > double
2. 숫자 문자 간의 형변환
1. ~.parse~(a)
Integer.parseInt(a) 같이 사용한다.
static메서드이므로 객체를 생성하지 않고, 매개변수를 넣어주면 메서드를 수행할 수 있다.
내용물 > 내용물 형변환
반환되는 값은 기본 자료형.
2. ~.ValueOf(a)
Integer.valueOf(a) 같이 사용한다.
정수형으로 변환후 Integer객체로 만들어 변환, 즉 래퍼클래스 객체를 반환함
3. ~.~Value()
a.intValue() 같이 사용한다.
static이 아니므로 객체에서 기본형의 값을 뽑아낸다.
객체에 있는 값을 정수로 변환한다
래퍼클래스 객체에 있는 값을 언박싱하여 기본 자료형으로 반환
객체 > 내용물 형변환
'JAVA' 카테고리의 다른 글
[JAVA] 객체 지향 프로그래밍의 이해 (1) | 2024.09.20 |
---|---|
[JAVA] 컬렉션 (0) | 2024.09.20 |
[JAVA] 배열 (0) | 2024.09.20 |
[JAVA] 조건문, 반복문 (0) | 2024.09.20 |
[JAVA] 연산자 (2) | 2024.09.19 |