본문 바로가기
Java

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

by Hindsight.. 2020. 12. 19.

 

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

 

2주차 과제: 자바 데이터 타입, 변수 그리고 배열 · Issue #2 · whiteship/live-study

목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언

github.com

 

백기선님이 진행하시는 Java 온라인스터디 2주차 과제

2주차 과제

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

Primitive(기본형) 타입을 의미한다.

총 8가지이며, 실제 값을 저장하는 공간으로 스택메모리에 저장된다. 만약 값의 범위를 벗어나면 컴파일 에러가 발생한다.

자바의 Primitive 타입에는 따로 값을 할당해주지 않아도, 선언 즉시 기본(default)값이 할당된다.

  타입 메모리 크기 기본값 데이터 범위
논리형 boolean 1 byte false true or false
정수형 byte 1 byte 0 -128 ~ 127
short 2 byte 0 -32,768 ~ 32,767
int 4 byte 0 -2,147,483,648 ~ 2,147,483,647
long 8 byte 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형 float 4 byte 0.0F 3.4 X 10^-38 ~ 3.4 X 10^38
double 8 byte 0.0 1.7 X 10^-308 ~ 1.7 X 10^308
문자형 char 2 byte, 유니코드 '\u0000' 0 ~ 65,535

 

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

위의 프리미티브 타입과 다르게 레퍼런스(Reference) type은 참조형이다.

타입이 객체로 할당되며, 빈 객체는 Null값으로 존재한다.

레퍼런스 타입 변수는 값이 저장되어 있는 곳의 주소값을 저장하며 힙 메모리에 저장된다.

객체에 값을 할당하지 않고 사용하면, Null 이므로 NullPointException이 발생한다.

 

타입 메모리 크기 기본값
배열 ( Array ) 4 byte ( 객체의 주소값 ) Null
클래스 ( Class )
열거 ( Enumeration )
인터페이스 ( Interface )

 

3. 리터럴

변수에 넣을 변하지 않는 데이터를 의미한다. 즉, 넣으면 변수가 상수가 되는 데이터이다.

따라서 값이 바뀔 수 있는 인스턴스는 리터럴이 될 수 없다.

int one = 1; // 여기서 1이 리터럴이다. 별다른 큰 뜻이 없다.

 

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

int num; // num의 값은 0, 초기화하지 않아 primitive 타입의 기본값이 들어가기 때문
int num2 = 100; // num2의 값을 100으로 초기화

int[] arr; // arr에 매핑된 값은 null, Reference 타입이므로
int[] arr2 = new int[10]; // 10개의 0으로 채워진 배열이 arr2를 가리키고 있다.

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

변수의 스코프 : 해당 변수가 위치하는 {, } 내에서 사용할 수 있다.

class Mandu{

	int Milgaru;
    
    void manduSok(){
    	int gogi;
    	
        void manduSokTwo(){
        	int dangMyeon;
        }
    
    
    }

}

위의 코드 같은경우 Milgaru는 가장 큰 클래스 Mandu 변수 내에 위치해 모든 함수에서 접근할 수 있고,

gogi는 manduSok 내에 위치해 자신의 함수와 manduSokTwo에서 사용되는 것처럼 자신을 포함하는 {, }내에서는 모두 사용할 수 있다.

 

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

- 자동 타입 변환 ( Promotion )

작은 크기의 Primitive type 변수가 큰 크기의 Primitive type 변수에 저장될 때 발생

int a = 4;
double b = a; // b = 4.0

작은 크기 타입의 변수가 큰 크기 타입의 변수로 들어가면, 데이터 공간이 남아 손실되는 데이터가 없어 자동으로 형변환이 이루어진다.

(단, 음수가 저장될 수 있는 타입 (byte, int 등)은 char 타입으로 자동 변환할 수 없다.

 

- 강제 타입 변환 ( Casting )

자동 타입 변환의 경우와 반대로 큰 크기 타입의 변수가 작은 크기 타입의 변수로 형변환 될 때를 의미한다.

int a = 10241240;
byte b = (byte)a; // 기존의 데이터가 byte변수의 크기로 잘려서 저장된다.

 

7. 1차 및 2차 배열 선언하기

1차 배열

int[] arr = new int[5]; // { 0,0,0,0,0 }

2차 배열

int[][] arr = new int[3][3];
// { 0,0,0 }
// { 0,0,0 }
// { 0,0,0 }

 

8. 타입 추론, var

Java 10 부터 추가된 키워드로 JavaScript의 var와 비슷한 느낌이지만 다르다.

Java 의 var는 local variable 이며, 선언과 동시에 초기화가 필수다.

var Hi = "Hello~"; // String 형으로 타입 추론

리터럴 값의 스코프나 형태를 보고 변수의 타입을 추론한다.

혼자 개발할땐 편할수도 있겠지만, 협업 코드에서는 주석이나 네이밍으로 확실하게 표현해주는 것이 좋아보인다.

'Java' 카테고리의 다른 글

[Java] 상속  (0) 2021.02.21
[Java] 클래스  (0) 2021.01.04
[Java] 제어문, Queue, Stack, LinkedList  (0) 2020.12.23
[Java] 연산자  (0) 2020.12.20
[Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.  (0) 2020.12.17