목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
1. 프리미티브(Primitive) 타입 종류와 값의 범위 그리고 기본 값
- 기본형(Primitive) 타입 총 8가지로 구성되며, 메모리의 Stack에 저장됨.
기본값이 있기 때문에 Null 이 존재하지 않음. 만약 기본형 타입에 Null을 넣고 싶다면 Wrapper 클래스를 사용해야함.
2. 프리미티브 타입(primitive type)과 레퍼런스 타입(reference type)
- new 키워드를 이용하여, 객체를 생성하고 데이터가 생성된 주소를 참조하는 타입.
빈 객체를 의미하는 Null 이 존재하고, 참조타입의 데이터 크기가 가변적, 동적이기 때문에 Heap 메모리에 저장됨.
더이상 참조하는 변수가 없을 때, Gabage Collector에 의해 메모리 삭제됨.
3. 리터럴(literal)
: 프로그램에서 직접 표현한 값(소스 코드의 고정된 값) / 선언된 변수에 값을 넣어 초기화할 때, 사용하는 값.
ex. 정수, 실수, 문자, 논리, 문자열 리터럴이 존재
+ 추가
4. 변수 선언 및 초기화하는 방법
: 멤버변수는 초기화 하지 않아고, 변수의 타입에 맞는 기본 값(1번 표 참고)으로 초기화.
지역 변수는 사용하기 전에 반드시, 초기화가 이뤄져야 함.
- 멤버 변수(인스턴스 변수, 클래스 변수)의 초기화 방법 3가지
1. 명시적 초기화(explicit initialization)
: 변수 선언과 동시에 초기화 하는 것. 변수의 초기화
Class Test {
int t1= 3; //기본형 변수의 초기화
Sample s = new Sample(); // 참조형 변수의 초기화
}
2. 생성자(constructor)
3. 초기화 블럭(initialization block) : 복잡한 초기화 작업을 진행할 때
class initBlock {
static {} // 클래스 초기화 블럭
{ } //인스턴스 초기화 블럭
}
1) 클래스 초기화 블럭
- 클래스를 초기화하는데 사용
- 클래스가 처음 메모리에 로딩될 때 한 번 만 수행
2) 인스턴스 초기화 블럭
- 인스턴스 변수를 초기화하는데 사용
- 생성자와 같이 인스턴스가 생성될 때 수행
- 인스턴스 초기화 블럭이 생성자보다 먼저 수행
인스턴스 변수의 초기화는 주로 생성자를 사용.
인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행되어야 하는 코드를 넣는데 사용
* 예시 (코드 중복)
Test() {
count++; //코드 중복
num = count; //코드 중복
color = "red";
}
Test(String color){
count++; //코드 중복
num = count; //코드 중복
this.color = color;
}
//인스턴스 초기화 블럭을 통해 중복 제거
//코드의 간결성 Up!!
{
count++; //코드 중복
num = count; //코드 중복
}
Test() {
color = "red";
}
Test(String color){
this.color = color;
}
- 실행 순서
: 클래스 초기화 분석 (메모리 로딩시 1번) -> 인스턴스 블럭 -> 생성자
5. 변수의 스코프와 라이프타임
- scope란?
: 프로그램 상에서 변수의 사용가능한 범위. Block scope { }
- 라이프타임?
: 변수가 메모리에 살아있는 기간
- static 변수
: 메모리에 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미.
일반적으로 Class는 Static영역에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성됨.
Heap 영역의 메모리는 Garbagr Collector를 통해 수시로 관리됨.
* 장점
static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리가 됨.
* 단점
프로그램 종료시 가지 메모리가 할당된 채로 존재하여 시스템 퍼포먼스 악영향
6. 타입 변환, 캐스팅 그리고 타입 프로모션
묵시적 타입 변환(자동 타입 변환) - 타입 프로모션
- 컴파일러가 자동으로 수행하는 타입 변환
- 데이터 손실을 최소화하게 노력
- 작은 데이터 타입에서 큰 데이터 타입으로의 변한을 의미
명시적 타입 변환(강제 타입 변환) - 타입 캐스팅
- 사용자가 타입캐스트 연산자 ( )를 사용해 강제적으로 수행하는 타입 변환
- 큰 데이터 타입에서 작은 데이터 타입으로의 변환은 명시적으로 되어야 함.
7. 1차 및 2차 배열 선언하기
// 1차 배열 선언
int[] arr;
int []arr;
int arr[];
// 1차 배열 초기화
int[] arr;
arr = new int[5];
int[] arr = new int[5];
int[] arr = {1,2,3,4,5} // 배열 크기 5
// 2차 배열 선언
int[][] arr;
int []arr[];
int arr[][];
// 2차 배열 초기화
int[][] arr;
arr = new int[3][2];
int[][] arr = new int[4][3];
int[][] arr = {{0,1,2},{3,4}} // 배열 크기 4
// 2차원 배열 생성시, 열의 길이를 명시 안하면, 행마다 길이 다르게 가변배열 생성 가능
참고 @ kils-log-of-develop.tistory.com/311
8. 타입 추론, var
: 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 것.
지역변수 내에서만 사용해야하고, 선언시 바로 초기화해야함.
ex. var a=1; //'int'로 타입 추론
'[IT] > JAVA' 카테고리의 다른 글
[JAVA] String 값 Boolean으로 변경하기 (0) | 2023.03.27 |
---|---|
[JAVA] OOP(객체 지향 프로그래밍)의 개념과 특징 (장단점/추상화/다형성/캡슐화/상속) (0) | 2022.05.04 |
[JAVA] Window10 JAVA 환경 변수 설정하기 (환경 변수 설정 이유) (0) | 2021.11.18 |
[REST][REST API] REST란 무엇일까? (0) | 2020.12.29 |
[Java] Java Virtual Machine(자바 가상 머신) 이란 / 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기 (0) | 2020.11.23 |