LinkedIn

자바 스터디 2주차 : 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법

2020. 11. 20. 23:33 | 자바 개발자되기

목차

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

github.com/whiteship/live-study/issues/2


프리미티브 타입 종류와 값의 범위 그리고 기본 값

프리미티브 타입이란?

  • 자바의 데이터 타입에는 크게 프리미티브(Primitive) 원시 자료형과 레퍼런스(Reference) 참조 자료형이 존재
  • 두 타입의 큰 차이점은 데이터 생성 시 메모리 공간에 데이터가 들어가는지 혹은 데이터를 참조하는 주소 값이 들어가는지이다.

프리미티브 타입 종류

프리미티브 타입은 또 '수치 타입'과 '블리언 타입'으로 나누어진다.

수치 타입

정수 타입

타입 명 크기(byte) 표현 가능 범위 기본 값
byte 1 -128 ~ 127 0
short 2 -32768 ~ 32767 0
char 2 모든 유니코드 문자 '\u0000'
int 4 -2147483648 ~ 2147483647 0
long 8 -9223372036854775808 ~ 9223372036854775807 0L

부동소수점 타입

타입 명 크기(byte) 표현 가능 범위 기본 값
float 4 ± (1.40129846432481707e-45 ~ 3.40282346638528860e+38) 0.0f
double 8 ± (4.94065645841246544e-324d ~ 1.79769313486231570e+308d) 0.0d

블리언 타입

타입 명 크기(byte) 표현 가능 범위 기본 값
boolean 1 true, false false

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

프리미티브 타입

  • 위에서 설명한 것처럼 메모리 공간에 데이터(값)가 들어가져 있다.
  • 각각의 크기에 맞게 표현 가능 범위가 정해져 있으며 기본 값을 제공하지만 될 수 있으면 초기화를 하여 사용하는 것을 권장한다.

레퍼런스 타입

  • 레퍼런스 타입 종류
    • 클래스 타입
    • 인터페이스 타입
    • 배열 타입
    • 열거 타입
  • 레퍼런스 타입의 경우 메모리 할당 시 해당 데이터로 접근할 수 있는 '주소 값'이 저장된다.
  • 기본 값은 'null'이며, 만약 기존에 데이터로 접근할 수 있는 '주소 값'이 존재하였다가 이후 'null'로 데이터가 변경된다면 GC(Garbage Collection)에 의하여 사용되지 않는 메모리로 판단되어 메모리 릴리즈 된다.

리터럴

리터럴이란 소스 코드에서 데이터 값을 직접 표현하는 것

정수 리터럴

2진수 리터럴

  • 데이터 앞에 '0b' 시작
  • 0b0111 → 7(10진수)

8진수 리터럴

  • 데이터 앞에 '0' 시작
  • 010 → 8(10진수)

10진수 리터럴

  • 10 → 10(진수)

16진수 리터럴

  • 데이터 앞에 '0x' 시작
  • 0x20 → 32(10진수)

 

실수 리터럴

Float 리터럴

  • 데이터 뒤에 'f'
  • 0.123f

Double 리터럴

  • 데이터 뒤에 'D'
  • 0.123D

데이터 뒤에 어떤 문자도 붙지 않는 실수 표현의 경우 double 타입이 된다.

 

문자/문자열 리터럴

문자 리터럴

  • Single Quote '' 로 문자 표현
  • 'A', 'B', 'C'
  • 유니코드 값으로 지정 가능
    • \uae00a

문자열 리터럴

  • Double Quote ""로 문자열 표현
  • "ABC"

 

논리 타입 및 null 리터럴

논리 타입

  • true/false 표현하거나 논리식의 결과의 반환 값으로 표현

null 리터럴

  • 레퍼런스 타입에만 사용 가능

변수 선언 및 초기화 방법

자바에서 변수 선언과 초기화는 좌항(변수 타입과 변수명), 그리고 우항(초기화 값)으로 구분된다.

int a = 0;

  • 좌항 = int, a
    • int : int type
    • a : variable name
  • 우항 = 0
    • 초기화 값

String b = "abc";

  • 좌항 = String, b
    • String : String type
    • b : variable name
  • 우항 = "abc"
    • 초기화 값

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

변수의 스코프는 기본적으로 변수가 선언된 블록 내부이다.

Class A {
	int a = 0;
    
    public void printB(int b) {
    	int c = 3;
    	System.out.println(b);
    }
}

 

 

  • 변수 a의 스코프는 클래스 A의 내부이다.
    • 물론 변수 a는 static variable이 아니기 때문에 클래스 A가 인스턴스로 생성된 후 참조 가능하다.
  • printB() 함수의 파라미터 변수 b와 변수 c의 스코프는 함수 printB()의 내부이다.

Static

  • static 변수 및 함수는 클래스가 인스턴스화 되지 않아도 사용 가능하다.
  • 또한 static 변수의 경우 해당 클래스의 인스턴스에서 공유된다.

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

자바에는 두 가지 타입 변환이 가능하다.

  1. 자동 타입 변환(타입 프로모션)
  2. 강제 타입 변환(캐스팅)

자동 타입 변환

  • 자동 타입 변환은 프로그램 실행 도중 일어나며 작은 크기를 가지는 타입이 큰 크기를 가지는 타입으로 저장될 때 발생
  • 또한 큰 타입과 작은 타입을 연산하는 경우 작은 타입이 큰 타입으로 자동 타입 변환된다.
byte a = 10;
int b = a; // byte type 변수 a는 더 큰 int type으로 자동 타입 변환

강제 타입 변환

  • 코드에서 강제로 타입 변환을 지정할 수 있다.
  • 그러나 큰 타입 → 작은 타입으로 강제 타입 변환 시 데이터 표현 범위의 차이로 인해 값의 손실이 발생할 수 있다.
public class Application {
    public static void main(String args[]){
        int a = 1234567890;
        byte b = (byte)a;
        
        System.out.println(a); // 1234567890 출력
        System.out.println(b); // -46 출력
    }
}

1차 및 2차 배열 선언하기

배열은 동일 타입의 값을 여러 개 취급할 수 있는 기능이다.

1차 배열 선언

int[] ref = new int[5]; // 0으로 초기화
int ref[] = new int[5]; // 0으로 초기화
int [] ref = {0,0,0,0,0};
int [] ref = new int[5] {0,0,0,0,0};
int [] ref = new int[] {0,0,0,0,0};
  • new int[5]에 의하여 int type 5개 배열 인스턴스가 생성
  • ref는 위에서 생성된 배열 인스턴스를 참조하는 참조 변수

2차 배열 선언

2차원 배열의 경우 [x][y]와 같이 선언 가능하며 세로 길이가 x, 가로길이가 y인 2차원 배열이 생성된다.

int[][] ref = new int[3][4]; // 세로길이 3, 가로길이4 2차원 배열 생성

또한 2차원 배열의 경우 행(가로)과 열(세로)을 분리하여 선언할 수 있다.

int[][] ref = new int[3][]; // 세로 길이만 지정되고, 가로 길이는 명시되지 않음
ref[0] = new int[2]; // 첫 번째 세로 줄의 경우 가로 길이가 2
ref[1] = new int[3]; // 두 번째 세로 줄의 경우 가로 길이가 3
ref[2] = new int[4]; // 세 번째 세로 줄의 경우 가로 길이가 4
  • 위와 같이 가로, 세로 길이가 일정하지 않은 배열을 가리켜 'Ragged Array'라 한다.

타입 추론, var

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

var 키워드를 사용하는 타입 추론은 Java Version 10부터 지원하였다.

사용법

// 기존
String str = "Hello, World!";
// Java 10 var 사용
var str = "Hello, World!";
  • 위와 같이 기존 타입을 명시하지 않고 컴파일러가 data value 통하여 그 타입을 유추할 수 있다.
  • 다만 data value가 function return value인 경우 가독성이 떨어질 수 있으므로 주의하며 사용해야 한다.
var str; // 컴파일 에러 발생
str = "123";
  • 또한 var 타입 추론의 경우 생성과 동시에 초기화가 필수적이며 위와 같이 사용할 경우 컴파일 에러가 발생한다.

'자바 개발자되기' 카테고리의 다른 글

자바 스터디 3주차 : 연산자  (0) 2020.11.27
자바 문자열 결합  (0) 2020.11.23
캐싱 정책 Inline Cache, Cache Aside  (0) 2020.11.18
비관적 락, 낙관적 락  (0) 2020.11.12
Database Lock과 Blocking  (0) 2020.11.10