[Java] 변수

김세림·2024년 4월 22일

Java

목록 보기
2/24
post-thumbnail

변수란?


변수와 상수

변수

  • 변하는 것
  • 수로 끝나지만 숫자만이 아닌 하나의 값을 저장할 수 있는 저장공간을 뜻함.
    - ex) 접시
  • 변수는 선언과 저장으로 이루어져있다.
int number; //선언 = 타입 + 이름
//저장
int number = 10; //초기화 -> 선언과 동시에 값을 저장
number = 20; //덮어쓰기 -> 선언 이후 다른 값

상수

  • 변하지 않는 값(constant value)
    - ex) pi값
  • 변수와 선언하는 방식은 같지만 앞에 final이 붙음
final double pi = 3.141592...;
pi = 10 //값을 바꾸려고 하면 에러가 남.

변수 타입

기본형(Primitive)

  1. 논리형 변수 : Boolean
    True = 1, False = 0
  2. 문자 변수 : char
    알파벳 A와 같은 문자 하나만 저장 (single quotation '')
  3. 정수형 변수 : byte, short, int, long
    byte = 8bit
    short = 2byte
    int = 4byte (default)
    long = 8byte (뒤에 L접미사 붙임)
  4. 실수형 변수 : float, double
    float = 4byte (뒤에 f접미사 붙임)
    double = 8byte (default)

    여기서 잠깐!

    float는 부동소수점 방식으로 4byte만 사용하는데도 long보다 넓은 범위를 표현할 수 있다.
    부동소수점 방식 : 가수와 지수를 구분해서 저장하고 이값들을 곱한 값을 저장(표현)하는 방식

    따라서 float가 long보다 넓은 범위를 표현해 자동 형변환이 안됨.

참조형(Reference)

  1. 문자 변수 : String
    Apple과 같은 문장을 저장(double quotation "")
  2. 그외 : Object, Array, List ...
    객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장

여기서 잠깐!

문자형과 문자열의 차이를 알아보자.
문자형은 1byte만 사용하기 때문에 데이터만 저장하며 뒤에 널값이 안들어가지만, 문자열은 몇 byte를 사용하는지 모르기 때문에 뒤에 널값이 들어간다.

또, 문자는 아스키 코드라는 규칙을 통해 저장(표현)하고 있다.

참조형 vs 기본형

참조형 변수기본형 변수
주소형변수 실제값이 아닌 원본값의 주소값을 저장실제값을 저장하는 저장공간
Heap(동적) 영역에 저장Stack(정적) 영역에 저장
Stack영역에는 따로 저장해 둔 원본값의 Heap 영역 주소를 저장

여기서 잠깐!

동적과 정적이란?
동적 - 할당된 메모리영역의 크기를 알 수 없을 때, 계속 늘어날 수 있는 참조형 변수의 원본을 저장
정적 - 크기가 몇 byte인지 정해져있는 기본형 변수를 저장
(크기가 정해져있는 참조형 변수의 주소값도 저장)

래퍼 클래스 변수(Wrapper Class)

기본형 변수를 클래스로 한번 랩핑한 변수

박싱 vs 언박싱

//박싱
int number = 21;
Integer num = new Integer(number);

int n = num. intValue(); //언박싱 메소드

여기서 잠깐!

래퍼 클래스를 쓰는 이유?
클래스는 객체지향 언어인 Java의 핵심 기능!
클래스로 변수를 관리하면 객체지향의 더 많은 기능을 사용할 수 있다.

형변환

형변환은 주로 기본형 변수인 정수 <-> 실수 <-> 문자 들 사이에서 일어난다.
1. 캐스팅

double doubleNumber = 10.101010;
float floatNumber = 10.1010

int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환
  1. 자동 형변환
    byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
    순서로 크기가 커지며, 캐스팅을 하지않아도 작은 크기타입에서 큰 크기의 타입으로 저장될때 자동으로 타입변환이 일어난다.

정리하자면 아래와 같다.

 
자동 형변환 vs 강제 형변환
  • 작은 타입 > 큰 타입 형변환 시 (자동 형변환)
    • 더 큰 표현 범위를 가진 타입으로 변환되는 것이라 값의 손실이 없습니다.
    • 값의 손실 없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해줍니다.
  • 큰 타입 > 작은 타입 형변환 시 (강제 형변환 = 캐스팅)
    • 더 작은 표현 범위를 가진 타입으로 변환된는 것이라 값의 손실이 생깁니다.
    • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 합니다.

0개의 댓글