자바 데이터 타입, 변수 그리고 배열
whiteship/live-study 2주차 정리
-
목표
-
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브(Primitive) 타입: 기본형이라고도 하며, 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 모두 8개의 타입이 있다.
-
기본형 크기(byte) 저장 가능한 범위 기본값 boolean 1 false,true false char 2 ‘\u0000’ ~ ‘\uffff’ (0 ~ 65535) ‘\u0000’ byte 1 -128 ~ 127 0 short 2 -32,768 ~ 32767 0 int 4 -2,147,483,648 ~ 2,147,483,647 0 long 8 -9,223,372,036,854,775,828 ~ 9,223,372,036,854,775,807 0L float 4 1.4E-45 ~ 3.4E38 (1.4 x 10^-45 ~ 3.4 x 10^38) 0F double 8 4.9E-324 ~ 1.8E308 (4.9 x 10^-324 ~ 1.8 x 10^308) 0
2. 프리미티브 타입과 레퍼런스 타입
- 레퍼런스(reference) 타입: 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.
- 프리미티브 타입은 크기가 정해져 있고 실제 값을 저장하는 반면, 레퍼런스 타입은 크기가 정해져 있지 않고 값이 저장되어 있는 주소를 가진다.
- 프리미티브 타입은 스택 영역에 생성이 되고, 레퍼런스 타입은 힙 영역에 생성된다.
- 레퍼런스 타입은 주소를 참조하기 때문에, 해당 레퍼런스 타입 변수의 값이 바뀌면 그 레퍼런스 타입을 참조하는 변수의 값또한 바뀐다.
- 비교 연산에서 == 는 메모리값을 비교하는 것이며, equals 는 값 자체를 비교하는 것이다. 어떠한 클래스를 equals 로 비교할 때는 그 클래스에서 equals 를 오버라이드해서 구현해야 한다.
3. 리터럴
- 리터럴: 그 자체로 값을 의미하는 것
-
종류 리터럴 논리형 true, false 정수형 123, 100L, 0xff … 실수형 3.14, 3.34f … 문자형 ‘A’, ‘1’ … 문자열형 “ABC”, “123” … 기타 리터럴 null, _
4. 변수 선언 및 초기화하는 방법
-
변수 선언: 데이터를 저장하기 위해 메모리를 할당하는 것
int number; String text;
-
초기화: 선언한 변수에 값을 넣는 것
number = 10; text = "hello";
-
선언과 동시에 초기화도 가능하다.
int number = 10; String text = "hello";
5. 변수의 스코프와 라이프타임
- 변수의 스코프란 변수에 대한 접근과 존재할 수 있는 영역을 의미하며, 자바에서 스코프에 따른 변수의 종류에는 클래스변수(static 변수), 인스턴스 변수, 지역변수 3가지로 나눌 수 있다.
-
클래스 변수는 인스턴스 분수에 static 키워드를 붙여준 변수로, 클래스가 로딩 될 때 한번만 생성된다.
-
종류 선언 위치 초기화 시점 변수의 스코프 클래스변수 클래스 영역 클래스가 처음 로딩될 때 클래스 전역 인스턴스 변수 클래스 영역 인스턴스가 생성될 때 각각의 인스턴스 지역변수 메소드 영역 메소드 영역 변수 선언문이 수행됐을 때
-
-
각 변수들의 라이프타임
-
종류 라이프타입 클래스 변수 프로그램 종료시까지 인스턴스 변수 객체가 메모리에 존재하는 동안 지역 변수 메소드 수행 완료시까지
-
6. 타입 변환, 캐스팅 그리고 타입 프로모션
- 형변환 : 변수나 리터럴의 타입을 다른 타입으로 변환하는 것으로, 변수나 리터럴 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주면 된다.
-
프리미티브 타입에서 boolean 을 제외한 나머지 타입들은 서로 형변환이 가능하다.
-
변환 코드 결과 int -> char char c = (char)65; ‘A’ char -> int int n = ‘A’; 65 float -> int int a = (int)1.4f; 1 int -> float float f = 20; 20.0
-
- 형변환의 종류에는 큰 메모리의 타입을 작은 타입으로 변환하는 캐스팅(강제 형변환), 작은 메모리 타입에서 큰 타입으로 변환하는 타입 프로모션(자동 형변환) 이 있다.
-
큰 메모리 타입을 작은 타입으로 변환할 때는 값 손실이 발생할 수도 있다. 아래와 같이 float 형을 int 형으로 변환시 소수점 아래의 값이 손실된다.
int number = (int)3.131f;
7. 1차 및 2차 배열 선언하기
- 배열 : 같은 타입의 여러 변수를 하나의 묶음으로 선언한 것.
-
1차원 배열 선언과 초기화
int[] score; int[] score = {1, 2, 3, 4, 5};
-
2차원 배열 선언과 초기화
// 3*3 2차원 배열 선언 int[][] score = { {1, 2, 3}, {1, 2, 2}, {3, 5, 7} };
8. 타입 추론, var
- 타입 추론 : 코드에 타입을 선언하지 않아도 컴파일러가 스스로 타입을 유추하는 것으로, 자바 10부터 var 라는 키워드로 사용할 수 있다.
-
var 키워드는 초기화한 값을 보고 타입을 유추하기 때문에 반드시 선언과 동시에 초기화를 해야 한다.
var text = "Hello";