github.com/whiteship/live-study/issues/2
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 · Issue #2 · whiteship/live-study
목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언
github.com
백기선님이 진행하시는 Java 온라인스터디 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 |