📌 프리미티브 타입(기본형)과 레퍼런스 타입(참조형)
- 변수란 : 하나의 값을 저장할 수 있는 기억공간
- 기본형 : 총 8개, 실제 값을 저장
- 참조형 : 기본형을 제외한 나머지, 객체의 주소를 저장
📌 프리미티브 타입 종류와 값의 범위 그리고 기본 값
종류 | 값의 범위 | 기본값 | ||
논리형 | boolean | true, false | false | |
문자형 | char | 0 ~ 2^16 -1 (0~65535) | ‘\u0000' | |
숫자형 | 정수형 | byte | -2^7 ~ 2^7-1 (-128~127) | 0 |
short | -2^15 ~ 2^15-1 | 0 | ||
int | -2^31 ~ 2^31-1 | 0 | ||
long | -2^63 ~ 2^63-1 | 0L | ||
실수형 | float | 1.4*10^-45 ~ 3.4*10^38 | 0.0f | |
double | 4.9*10^-324 ~ 1.8*10^308 | 0.0d 또는 0.0 |
- 문자형 (char) : 변수 당 하나의 문자만 저장
- 정수형의 범위 : -2(^n-1) ~ 2(^n-1) -1 (*n은 bit 수)
📌 리터럴
- 변수 : 하나의 값을 저장하기 위한 공간
- 상수 : 값을 한번만 저장할 수 있는 공간
- 리터럴 : 그 자체로 값을 의미하는 것
* 변수는 하나의 값을 저장하는 공간이고, 상수는 그 값을 한 번 저장하면 변경할 수 없는 공간이다.
우리가 기존에 알고 있던 '상수'의 개념을 (12, 3.14 등)을 프로그래밍에서는 리터럴이라는 용어를 사용한다.
📌 변수 선언 및 초기화하는 방법
// 변수 선언
int age; // age 이름의 변수 선언
// 변수 초기화
int age = 25;
변수 선언
- 타입 변수명;
- 변수 선언하면, 메모리의 빈 공간에 '변수타입' 크기의 저장공간 확보되고, '변수명'을 통해 사용할 수 있다.
변수 초기화
- 변수를 사용하기 전 변수에 처음으로 값을 저장하는 것
- 전역 변수(인스턴스 변수, 클래스 변수)는 초기화하지 않을 경우, 기본값으로 자동 초기화된다.
지역변수는 자동 초기화되지 않기 때문에 사용하기 전 반드시 초기화해야 한다.
📌 변수의 스코프와 라이프타임
- 변수의 선언 위치가 변수의 종류와 범위(scope)를 결정한다.
class Variables{
int iv; // 인스턴스변수
static int cv; // 클래스변수(static 변수)
static void method(){
int lv; // 지역변수
}
}
변수의 종류 | 스코프 | 라이프타임 | 선언위치 |
클래스변수 | 클래스 전체 | 클래스가 메모리에 올라갈 때 생성, 프로그램 종료될 때 소멸 |
클래스 영역 |
인스턴스변수 | static method 제외한 클래스 전체 | 인스턴스 생성 할 때 생성되고, 참조변수가 없을 때 GC에 의해 자동 제거 |
|
지역변수 | 선언된 메서드 내 | 변수 선언문 수행 시 생성, 메서드 종료 또는 블럭({}) 벗어나면 소멸 |
메서드 영역 |
📌 타입 변환, 캐스팅 그리고 타입 프로모션
캐스팅(형변환)
- 값의 타입을 다른 타입으로 변환하는 것
- boolean을 제외한 7개의 기본형은 서로 형변환 가능
- btye 크기가 큰 타입에서 작은 타입으로 변환할 경우 값 손실 발생할 수 있음.
- 방법 : (변경할 타입) 피연산자
double d = 85.4;
int score = (int)d; // scorre = 85
타입 프로모션(자동 형변환)
- btye 크기가 작은 타입에서 큰 타입으로 변환할 경우 형변환 생략 가능하다.(컴파일러가 자동으로 해줌)
- 자동 형변환의 기준 : 기존의 값을 최대한 보존 할 수 있은 타입으로 형변환
int d = 85;
double score = d; // scorre = 85.0
📌 1차 및 2차 배열 선언하기
- 배열이란 : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
- 배열 선언 : 생성된 배열 다루는 데 사용할 참조변수 선언
- 배열 생성 : 값을 저장할 수 있는 공간 생성
- 배열 초기화 : 생성된 배열에 처음으로 값을 저장하는 것
1차 배열
// 1차 배열 선언
int score[]; // int[] score;과 동일
// 1차 배열 생성
score = new int[3]; // int score[] = new int[3]; 선언과 생성 동시에 가능
// 1차 배열 초기화
score[0] = 100;
score[1] = 200;
score[2] = 300;
int score[] = {100, 200, 300}; // ok
int score[] = new int[]{100, 200, 300}; // ok
int score[];
score[] = new int[]{100, 200, 300}; // ok
int score[];
score[] = {100, 200, 300}; // error
2차 배열
// 2차 배열 선언
int score[][]; // int[][] score;과 동일
// 2차 배열 생성
score = new int[3][2]; // 3행 2열의 2차원 배열 생성
// int score[][] = new int[3][2]; 선언과 생성 동시에 가능
// 2차 배열 초기화
score[0][0] = 1;
score[0][1] = 2;
score[1][0] = 3;
score[1][1] = 4;
score[2][0] = 5;
score[2][1] = 6;
// 선언, 생성, 초기화 동시에
int score[][] = new int[][]{ {1, 2}, {3, 4}, {5, 6} }; // ok
int score[][] =
{
{1, 2},
{3, 4},
{5, 6}
};
📌 타입 추론, var
- 타입추론(type-inference)
: 변수의 타입을 적지 않아도, 컴파일러가 알아서 변수의 타입을 대입된 리터럴로 추론하는 것
- 자바 10부터 가능
- var는 초기화 값이 있는 지역변수로만 선언이 가능하다.(멤버변수, 메소드의 매개값, 리턴 타입으로 사용 불가)
- var타입 변수에 null 값 대입 안됨
var no1 = "hello"; // String으로 추론
var no2 = 2; // int로 추론
var no3 = List.of(1,2,3) // List로 추론
[참고]
- 자바의정석
- https://velog.io/@jaden_94/2%EC%A3%BC%EC%B0%A8-%ED%95%AD%ED%95%B4%EC%9D%BC%EC%A7%80
'스터디 > 2209_자바의정석' 카테고리의 다른 글
6주차 과제 : 상속 (0) | 2022.09.29 |
---|---|
5주차 과제 : 클래스 (0) | 2022.09.26 |
4주차 과제 : 제어문 (0) | 2022.09.18 |
3주차 과제 : 연산자 (0) | 2022.09.18 |
1주차 과제 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2022.09.13 |
댓글