[Java] 자바 데이터 타입, 변수 그리고 배열

김현석·2023년 3월 6일

Java

목록 보기
2/2
post-thumbnail

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익히기.


학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

프리미티브 타입

프리미티브 타입(기본형 타입) 이란 쉽게 말해서 정수, 실수, 문자, 논리 리터럴 등의 실제 데이터 값을 메모리의 스택에 저장하는 타입이다.

위와 같이 자바에서는 8종류의 프리미티브 데이터 타입을 지원하고 있으며,
각 데이터 타입은 기본값이 있기 때문에 null값을 지원하지 않는다.


프리미티브 타입과 레퍼런스 타입

레퍼런스 타입(참조 타입)은 프리미티브 타입을 제외한 문자열, 배열, 클래스 등 모든 타입을 의미한다.

프리미티브 타입이 값을 저장하는 방식이라면, 레퍼런스 타입은 주소를 저장하는 방식이다. 레퍼런스는 메모리의 힙 영역에 저장된다.

프리미티브 타입과는 다르게 빈 객체를 의미하는 null값을 가질 수 있다.


리터럴이란?

리터럴은 데이터 그 자체를 의미한다. 즉, 변수에 넣는 변하지 않는 데이터를 의미하는 것이다.
예를 들어, 아래의 소스코드에서 리터럴은 10이다.

int a = 10;

혹은

소스코드에서 특정한 자료형의 값을 직접 표현하는 방식을 말한다.
자바에서 정수, 실수, 문자열, 논리형의 리터럴은 다음과 같다.

정수 리터럴

int a = 0b10;  //2진수 : 앞에 0b를 붙인다.
int a = 010;  //8진수 : 앞에 0을 붙인다.
int a = 10;  //10진수 : 아무것도 붙이지 않는다.
int a = 0x10;  //16진수 : 앞에 0x를 붙인다.

실수 리터럴

float a = 10f;  // float : 뒤에 f를 붙인다.
double a = 3.14;  //double : 아무것도 붙이지 않는다.

문자 리터럴

char a = 'a';  // char : 작은 따옴표(혹은 큰 따옴표)를 이용한다.
String s = "Hello World" // string : 큰 따옴표를 이용한다.

논리형 리터럴

boolean flag = true; // boolean : true, false.

변수 선언 및 초기화하는 방법

변수 타입과 변수 이름 정하기

String name;
// String : 변수 타입
// name : 변수 이름
  • 변수 타입 : 변수에 어떤 종류의 값이 저장될 지 정함.
  • 변수 이름 : 변수에 할당 된 메모리공간의 이름을 정함.

변수 초기화

String name = "HynSeok";

변수를 선언함과 동시에 값을 저장하는 것을 말한다.


변수의 스코프와 라이프타임

변수의 스코프란 일반적으로, 해당 변수가 사용될 수 있는, 유효한 영역 범위를 의미한다. 이 범위는 변수가 선언된 블록의 위치에 따라 달라진다.

Java에서는 추가적으로, Access modifier(public, private, ...) 에 의한 스코프도 정의된다.

변수의 라이프타임이란 해당 변수가 메모리상에서 살아있는 시간을 의미한다.

class Variables {
    int instanceVar; // 0으로 초기화되는 인스턴스 변수
    static int classVar; // 0으로 초기화되는 클래스 변수
 
    void method(int num) { // 매개변수는 초기화 할 수 없고, 전달받는 값을 사용만 할 수 있음
      int a; // 로컬변수
    }
}

타입 변환, 캐스팅 그리고 타입 프로모션

타입 변환

  • 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 의미한다.
  • 자바에서는 boolean을 제외한 다른 프리미티브 타입은 모두 타입 변환이 가능하다.
  • 타입 변환의 종류에는 캐스팅(강제 형변환)과 타입 프로모션(자동 형변환)이 있다.
int a = 10;
double autoCasting = a; // 타입 프로모션. 4비트인 int를 8비트인 double에 대입하였기에 자동으로 형변환이 일어남.

byte Casting = (byte)autoCasting; // 캐스팅.

1차 및 2차 배열 선언하기

1차원 배열

int[] array1;
int []array2;
int array3[]; // C - style

int[] array4 = new int[3];
int[] array5 = {1, 2, 3};

2차원 배열

int[][] map1;
int map2[][];

int[][] map3 = new int[3][4];
int[][] map3 = {{1,2,3}, {2,3,4}};

타입 추론, var

타입 추론이란 코드 작성 당시에는 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것을 의미한다.

자바 9까지는 generics나 lamda식에서만 타입 추론을 지원했지만, 자바 10부터 타입추론을 지원하는 var키워드가 추가되어 자바에서도 타입 추론이 가능하게 되었다.

var a = 1;
var b = "1234";

//a는 int, b는 String이다.

0개의 댓글