변수(variable)와 타입(type)

김수민·2023년 3월 7일
0

백엔드 부트캠프

목록 보기
2/52

변수

변수(Variable): 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단

변수 선언

  • 변수를 사용하려면 먼저 변수를 선언해야 함
  • 저장하고자 하는 값의 데이터 타임 & 변수 이름 작성
    class Main {
    	public static void main(String[] args) {
       int num; //변수 선언
       }
    -> num이라는 변수에 정수형의 숫자를 저장할 수 있음
  • 변수를 선언한다는 것: 어떤 값을 저장할 메모리 공간을 확보, 해당 메모리 공간을 식별할 수 있는 이름을 붙이 는 것

값 할당

class Main {
	public static void main(String[] args) {
    	int num; //변수 선언
        num = 1; //값 할당(초기화)
        num = 2; //값 할당(재할당)
        }
    }

재할당 가능 -> 저장하고 있는 값이 변할 수 있다는 것 : 변수

class Main {
public static void main(String[] args){
	int num = 1; //선언과 동시에 초기화
    }
}

변수 명명 규칙

  • 일반적으로 카멜케이스(camelCase) 사용. 두번째 단어부터 대문자로 시작하여 구분
  • 영문자, 숫자, _, $ 사용 가능
  • 영문자는 대문자와 소문자가 구별되어 인식(a와 A는 다른 문자)
  • 숫자로 시작하는 변수명은 사용 불가
  • 예약어(reserved word)는 변수명으로 사용 불가 (예. byte, class)

상수

상수(Constant): 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단

  • 재할당이 금지된 변수
  • final이라는 키워드를 사용해 선언
  • 대문자에 언더바(_)를 넣어 구분하는 SCREAMING_SNAKE_CASE

상수를 사용하는 이유

  • 프로그램이 실행되면서 값이 변하면 안되는 경우
  • 코드 가독성을 높이고 싶은 경우
  • 코드 유지관리를 손쉽게 하고자 하는 경우

타입

타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식이 결정됨

기본타입(primitive type)과 참조타입(reference type)

기본타입(primitive type)

  • 값을 저장할 때 데이터의 실제 값이 저장됨
  • 정수타입(byte, short, int, long), 실수타입(float, double), 문자타입(char), 논리타입(boolean)

참조타입(reference type)

  • 값을 저장할 때, 데이터가 저장된 곳을 나타내는 주소값이 저장됨.
  • 객체의 주소를 저장, 8개의 기본형을 제외한 나머지 타입

"변수는 ~이다" -> 기본 타입의 데이터
"변수는 132페이지에 설명되어 있다" -> 참조 타입의 데이터

public class Main {
	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
        }
    }

리터럴

리터럴(Literal): 문자가 가리키는 값 그 자체

class Main{
	public static void main(String[] args){
    	int num; //변수 선언
        num = 1; //값 할당

num에 할당하고 있는 1이 리터럴.
float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여주어야 함
long 타입의 변수에 정수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 L을 붙여주어야 함

float weight= 74.5f;
final long LIGHT_YEAR = 9460730472580L;

정수 타입

정수형의 오버플로우와 언더플로우

오버플로우

  • 자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 발생
  • 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환됨
    예. 어떤 값이 byte형이고, byte 형의 최대값인 127을 값으로 가지는 경우, 이 값이 1을 더하면 128이 아닌 -128이 됨.

언더플로우

  • 자료형이 표현할 수 있는 범위 중 최소값 이하의 값을 표현한 경우 발생
  • 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환됨
    예. 어떤 값이 byte형이고, byte형의 최소값인 -128을 값으로 가지는 경우, 이 값에 1을 빼면 -129이 아닌 127이 됨.

데이터 타입의 크기와 표현 범위

byte -> short -> int -> long

실수 타입


double형은 float형보다 더 큰 실수를 저장할 수 있고, 더 정확하게 저장할 수 있음.

실수형의 오버플로우와 언더플로우

오버플로우

  • 값이 음의 최소 범위 또는 양의 최대 범위를 넘어갔을 때 발생하며, 이 때 값은 무한대가 됨.

언더플로우

  • 값이 음의 최대 범위 또는 양의 최소 범위를 넘어갔을 때 발생하며, 이 때 값은 0이 됨.

논리 타입

  • boolean 형으로, true 혹은 flase를 값으로 가짐.
  • 1byte를 차지함.

문자 타입

  • 2byte를 자치함. char형 하나만 존재.
  • 문자형 리터럴을 작성할 때에는 반드시 큰 따옴표("")가 아닌 작은 따옴표(')를 사용.
    큰 따옴표를 사용한 리터럴은 무자형 리터럴이 아닌 무자열 리터럴로 인식되기 때문.
char letter1 = 'a';
char letter2 = 'ab'; // 에러: 단 하나의 문자만 할당할 수 있다.
char letter3 = "a"; // 에러: 작은 따옴표만 사용해야 한다.

타입 변환

boolean형을 제외한 기본 타입 7개는 서로 타입을 변환할 수 있음.

자동 타입 변환

  • 바이트 크기가 작은 타입에서 큰 타임으로 변환할 때 (예. byte -> int)
  • 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 (예. 정수 -> 실수)
byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

float이 표현할 수 있는 값이 모든 정수형보다 더 정밀하기 때문에 뒤쪽에 있음.

수동 타입 변환

  • 캐스팅: 더 큰 데이터 타입을 작은 데이터 타입의 변수에 저장하기 위해 해즌 수동 타입 변환
  • 캐스팅 연산자 ()를 사용, 괄호 안에 변환하고자 하는 타입을 적어줌
//int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환함.
int intValue = 128;
byte byteValue = (byte)intvalue;

System.out.println(byteValue); //-128

0개의 댓글