[Java] 변수와 데이터 타입, Wrapper 클래스, 형변환

Jiisuniui·2023년 10월 19일

Java의 모든 것

목록 보기
2/7
post-thumbnail

변수

1. 변수란?

  • 값을 저장할 수 있는 메모리 공간

2. 네이밍 규칙

  • 대소문자 구분
  • 숫자로 시작할 수 없음
  • 변수명에 예약어는 불가
  • 특수문자는 _와 $만 가능
  • 상수는 모두 대문자
  • 단어의 첫 글자는 대문자 ex)HelloWorld
  • 영어로 작성

데이터 타입

1. 기본형 변수 (primitive Variable)

  • 기본형은 8가지
  • 4가지로 분류: 논리형, 문자형, 정수형, 실수형

a. 논리형 변수

  • boolean: 1byte
    -> 여기서 boolean이 1bit이 아닌 이유는 CPU가 메모리에 접근할 때, 보통 한번에 하나 이상의 byte를 읽거나 쓰기 때문이다.

b. 문자형 변수

  • char: 2byte

c. 정수형 변수

  • byte: 1byte, -128 ~ 127
  • short: 2byte, -32,768 ~ 32,767
  • int: 4byte, -2,147,483,648 ~ 2,147,483,647
  • long: 8byte, 123L

d. 실수형 변수

  • foalt: 4byte, 0.123F
  • double: 8byte

2. 참조형 변수 (Reference Variable)

  • 실제 값이 아닌 주소 값을 저장하는 변수
  • 래퍼 클래스(Wrapper Class)
  • 프로그래머가 직접 만들어서 사용
public class Person{
	int name;
	int age;
}

3. 기본형 변수와 참조형 변수의 저장 방식

  • 기본형 변수: 실제 값이 저장
  • 참조형 변수: 주소 값이 저장
기본형 변수참조형 변수
Stack영역에 i라는 공간이 생성되고 실제 값이 저장new라는 명렁어에 의해 Heap영역할당한 크기만큼 새로운 공간을 만들고, 이 공간의 메모리 주소 값Stack영역에 저장.

4. Stack 영역과 Heap 영역

  • Stack: 정적으로 할당된 메모리 영역
  • Heap: 동적으로 할당된 메모리 영역

래퍼 클래스 (Wrapper Class)

1. 래퍼 클래스란?

  • java.lang 패키지의 클래스들 중 기본형(primitive type) 변수를 감싸는 클래스들이다.
  • 기본형을 객체형으로 변환시켜줌
  • 그럼 기본형은 왜 존재하는지? 성능 때문에 존재

2. 래퍼 클래스를 사용하는 이유

  • null 처리 가능 -> SQL에서 용이하게 사용됨
  • java.util 패키지의 클래스들은 참조형 변수만을 다룸
  • 자료형은 참조형 변수만을 다룸
  • 멀티쓰레딩에서 동기화를 지원하려면 참조형 변수가 필요함

3. 래퍼클래스 생성자

4. Number 클래스

5. 박싱과 언박싱

a. Boxing

  • 기본 자료형 -> wrapper class
int primitive = 20;
Integer wrapper = Integer.valueOf(primitive);

b. Unboxing

  • wrapper class -> 기본 자료형
Integer wrapper = 30;
int primitive = wrapper.intValue();

6. 오토박싱과 오토언박싱

  • JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해줌
  • 불필요하게 오토 박싱&언박싱을 사용하는 경우, 100만건 기준으로 약 5배의 성능 차이가 남
  • 오토 박싱&언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현해야 함
// 오토 박싱
int i = 10;
Integer num = i;

// 오토 언박싱
Integer num = new Integer(10);
int i = num;

형변환 (Type Conversion)

1. 형변환이란?

  • a타입을 b타입으로 바꾸는 것
  • 값의 대입이나 연산을 할 때, 같은 타입끼리만 가능해서 형변환이 필요하다.
  • boolean 제외

2. 형변환의 종류

a. 자동(묵시적) 형변환

  • 프로그램 실행 도중에 컴파일러가 자동적으로 타입 변환
  • 높은 자료형으로 맞출 때
  • ex) int -> long

b. 강제(명시적) 형변환

  • 사용자가 타입 캐스트 연산자 (double)135 를 사용하여 값의 타입을 강제적으로 변환
  • 데이터 손실이 일어나는 경우, 정확한 연산이 안 됨
  • 낮은 자료형으로 맞출 때
  • ex) int -> short

3. 형변환 안전장치

  • 기본 타입의 최대값(Type.MAX_VALUE)과 최소값(Type.MIN_VALUE)을 활용해, 범위 밖인지 확인 후 형변환한다.

참고 자료

profile
why error?

0개의 댓글