변수, 타입

wooj·2022년 9월 19일
0

Java

목록 보기
3/5

✏️ 변수(Variable)

: 값을 저장할 수 있는 메모리 공간을 확보하고 사람이 식별할 수 있는 이름을 붙인 것

class Example {
	public static void main(String[] args) {
		int num1 = 1; // int형 변수 num1을 선언 후 1을 할당.
		int num2 = 2;
		int num3 = 3;
		...
	}
}
// 변수 num1은 int형이다. → int형은 4byte다. → 4byte의 메모리 공간을 확보 
→ 공간의 이름에 num1을 붙인다. → num1에 1을 할당해준다.(초기화)

📌선언

int num1;

: 타입에 해당하는 메모리 공간을 확보하고 저장 공간에 이름을 붙인다.

📌할당

num1 = 1;

: 선언한 변수에 값을 저장한다.

📌변수 명명 규칙

  • 일반적으로 카멜 케이스 사용
String CamelCase;
  • 숫자로 시작하는 변수명 사용 불가
String 10A // Error
  • 예약어(reserved word)는 변수명 사용 불가
int byte;  // Error
int class; // Error
int abstract; //Error

✏️ 상수

: 변수와 같이 선언하고 할당하여 사용할 수 있지만, 재할당이 금지

상수는 final이라는 키워드를 사용해 선언

관례적으로 대문자에 언더바_를 넣어 구분하는 SCREAMING_SNAKE_CASE를 사용

final double CALCULATOR_PI  = 3.141592;
  • 재할당시 에러가 발생하여 실수 방지 가능

  • 값을 상수명으로 사용해 코드 가독성 향상

  • 코드 유지관리가 쉬워짐

✏️ 타입

: 값의 유형 및 종류

  • 타입에 따라 값이 차지하는 메모리 공간의 크기가 다르다.
  • 값이 저장되는 방식이 다르다.

📌저장방식

-기본타입
: 실제값이 저장

  • 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)

-참조타입
: 객체의 주소를 저장

  • 기본형 8개 제외한 나머지 타입
public class Example {
    public static void main(String[] args) {
        int primitive = 1;
        Object reference = new Object();

        System.out.println(primitive); // 1  (기본타입은 값을 저장한다)
        System.out.println(reference); // java.lang.Object@626b2d4a (참조타입은 주소값을 저장한다.)
    }
}

⭐ 정수 타입

타입메모리표현 범위
byte1byte-128(-2^7) ~ 127(2^7 - 1)
short2byte-32,768(-2^15) ~ 32,767(2^15 - 1)
int4byte-2,147,483,648(-2^31) ~ 2,147,483,647(2^31 - 1)
long8byte-9,223,372,036,854,775,808(-2^63) ~ 9,223,372,036,854,775,807(2^63 - 1)
byte  byteNum  = 123;
short shortNum = 12345;
int   intNum   = 123456789;
long  longNum  = 12345678910L; 

// long 타입 리터럴의 경우에는 리터럴 뒤에 접미사 L을 붙여준다.

int   intNum   = 12_345_678_91;
long  longNum  = 12_345_678_91L;

// 숫자가 길면 언더바(_)로 구분해주어도 된다. 

표현범위를 벗어나게 되면 오버플로우, 언더플로우가 발생

  • 오버플로우
    : 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환

  • 언더플로우
    : 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환

byte형의 경우

127 + 1은 128이 아닌 -128(최소값)이 된다.
-128 - 1은 -129가 아닌 127(최대값)이 된다.

⭐ 실수 타입

타입메모리표현 범위정밀도
float4byte음수 : -3.4 x 10^38 ~ -1.4 x 10^-45 // 양수 : 1.4 x 10^-45 ~ 3.4 x 10^387자리
double8byte음수 : -1.8 x 10^308 ~ -4.9 x 10-^324 // 양수 : 4.9 x 10^-324 ~ 1.8 x 10^30815자리
// float형 리터럴을 float형 변수에 할당 (반드시 접미사 f 를 붙여준다.)
float num1 = 1.23f;

// double형 리터럴을 double형 변수에 할당 (접미사 d 자율적으로 )
double num2 = 1.23456d;
double num2 = 1.23456;
  • 오버플로우
    : 양의 최대, 음의 최소 범위를 넘어서면 오버플로우가 발생하며 값은 무한대

  • 언더플로우
    : 양의 최소, 음의 최대 범위를 넘어서면 언더플로우가 발생하며 값은 0

⭐ 논리 타입 (boolean)

타입크기표현
booelan1bytetrue / false
boolean isTrue = true;
boolean isTrue = false;

// 논리타입은 boolean 형만 존재하며 true 혹은 false를 값으로 가진다.

⭐ 문자 타입

타입크기표현
char2byte'a'
char letter1 = 'a';
char letter2 = 'ab'; // Error : 단 하나의 문자만 할당가능 

자바는 유니코드로 문자를 저장한다.
char letter1 = ‘a’ ;와 같이 문자형 리터럴을 문자형 변수에 할당하면 letter1에는 영문자 a의 유니코드 숫자값이 저장된다.

char letter = 97; // 숫자를 문자형 변수에 할당가능. 
System.out.print(letter); // 출력 결과 : a

숫자를 문자형 변수에 할당시 해당 숫자가 그대로 저장
나중에 변수를 참조할 때 숫자값을 유니코드로 인식하여 해당 숫자와 일치하는 코드를 가진 문자로 변환해준다.

✏️ 타입 변환

⭐ 자동 타입 변환

  • 바이트 크기가 더 큰 타입으로 변환할 때 (예 : short → long)

  • 더 정밀한 타입으로 변환할 때 (예 : 정수 → 실수)

byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)
//float 은 4byte이나 정수형보다 더 정밀한 실수형이기 때문

// float이 long보다 정밀하므로, 자동으로 타입이 변환됩니다.

long  longValue  = 1234L;
float floatValue = longValue;

System.out.println(floatValue); // 출력 결과 : 1234.0  (자동으로 타입변환됨)

⭐ 수동 타입 변환

  • 캐스팅(casting) : 더 큰 데이터 타입을 작은 데이터 타입의 변수에 저장하기 위해서 수동으로 타입을 변환하는 과정
  • 캐스팅 연산자( ) 안에 변환하고자 하는 타입을 적어준다.
//int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환합니다.
int intValue = 127;
byte byteValue = (byte)intValue;  // 
System.out.println(byteValue); // 127
profile
wooj

0개의 댓글