데이터 타입과 변수

주8·2023년 1월 5일
0

Data Type (자료형)

데이터를 저장하기 위해 어떤 종류의 데이터를 어떤 크기로 담을 것인지 지정하는 것

  • 숫자인지 문자인지, 숫자라면 어느 정도 범위까지 저장할 것인지 선언
  • 변수나 상수는 자료형을 먼저 선언해야 함

Primitive Type (기본 자료형)

실제 값을 저장한다.

  • Integer (정수형): byte, short, int, long
    • Overflow: 정수형 변수는 자신이 저장할 수 있는 범위를 벗어날 경우 최소값부터 다시 반복하는 Circular 구조다.
      • 예) byte의 경우 -128 ~ 127 범위를 벗어나면 -128부터 시작한다.
      • 범위를 벗어나서 초기화하는 것은 허용하지 않는다.
  • Floating-point (실수형): float, double
    • 부동 소수점인 가수(mentissa)와 지수(exponent)로 나뉘어 표현
      • 지수: 표현할 수 있는 값의 범위
      • 가수: 값의 정밀도에 영향을 미치는 요소
      • 예) 실수 3.1415 → 0.31415 x 10¹이며, 가수는 0.31415이고 지수는 1
  • Character (문자형): char
    • char는 유니코드(Unicode)가 기본이며, 문자를 저장 시 유니코드 표에 있는 문자와 매칭되는 이진코드를 정수로 메모리에 저장한다.
    • char는 단 하나의 문자 저장만 가능하기 때문에 문자열을 저장하기 위해서 String class를 사용해야 한다.
  • Boolean (논리형): boolean
    • 자료 처리의 최소 단위인 1byte로 표현된다.

💡 기본 자료형의 변수들이 생성되면 JVM의 Stack Area에 저장된다.


Reference Type (참조 자료형)

기본 자료형이 아닌 모든 데이터 타입은 참조 자료형이다.

참조 변수는 객체에 대한 메모리 주소를 가지고 있다.

  • String, Array …

형 변환

형 변환은 값의 타입을 다른 타입으로 변환하는 것(기본형과 참조형 사이는 JDK 1.5부터 추가된 autoboxing으로 가능하다)

자동 형 변환(up-casting)

큰 자료형에 작은 자료형의 값을 대입하는 경우

byte → int / int → long // long → int x

  • 정수형: 연산자를 사용하게 되면 기본 자료형들은 정수형의 기본형인 int type으로 자동 형 변환된다.
  • 부동 소수점: double type이 기본형

강제 형 변환(down-casting)

작은 자료형에 큰 자료형의 값을 대입하는 경우

int → byte: (byte) int


Literal (리터럴)

변수나 상수나 저장하는 값 그 자체

123, ‘A’ 등


Constant (상수)

변수와 같이 값을 저장하는 공간

한 번 저장된 값을 변경할 수 없는 고정 데이터를 유지해야 할 경우 사용

  • PI값이 3.14라는 고정 값 유지가 필요한 경우 사용
  • final 키워드를 붙여서 선언
  • 예) final double CONSTANT_VALUE = 10.5;
    CONSTANT_VALUE = 20.5; //상수에 할당된 값을 변경할 경우 ERROR

💡 상수는 Method Area의 Constant Pool에 저장된다.


Variable (변수)

프로그램이 실행되는 동안 값을 저장하는 공간

필요 시에 값을 변경할 수 있음

  • 자료형을 선언한 후 변수 이름을 선언하면 어떤 타입의 데이터가 어떤 이름의 변수에 저장되는지 Java가 알 수 있음

Argument와 Parameter

  • Argument: 전달인자, 인자 → 함수와 메서드의 입력 값(Value)
    algorithm.solution(1); //1은 argument
  • Parameter: 매개변수 → 함수와 메서드 입력 변수(Variable) 명
    public int solution(int n){ //n은 parameter
    	int answer = 0;
    	return answer;
    }
profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글