티스토리 뷰
728x90
반응형
변수란
- 변수를 선언하는 것은 데이터를 저장하기 위해 메모리에 할당하는 것을 말합니다. 그리고 선언한 변수에 값을 넣는걸 초기화라고 합니다.
int a; // 변수 a 선언
float b; // 변수 b 선언
char c; // 변수 c 선언
a = 5; // 변수 a를 값 5로 초기화
b = 3.14f; // 변수 b를 값 3.14로 초기화
c = 'C'; // 변수 c를 값 C로 초기화
명시적 초기화
int a = 5;
float b = 3.14;
char c = 'C';
지역 변수의 초기화
- 자바에서 멤버 변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 초기화하지 않고 다른 변수에 대입해도 되지만 지역 변수는 사용전에 반드시 초기화를 해야합니다. 그렇지 않으면 에러가 발생합니다.
- 멤버변수(클래스 변수, 인스턴스 변수)와 배열의 초기화는 선택적이지만 지역변수의 초기화는 필수적입니다.
int a;
int num = a; // 정상
public void method(){
int b;
int c = b; // 에러 발생
}
변수의 스코프와 라이프 타임
- 변수의 스코프란 변수에 대한 접근돠 존재할 수 있는 영역을 의미합니다.
- 자바에서 스코프에 따른 변수의 종류에는 클래스변수(static 변수), 인스턴스 변수, 지역변수 3가지로 나눌 수 있습니다.
- 변수의 종류는 변수가 선언된 위치에 따라서 결정됩니다.
변수의 종류 | 선언 위치 | 초기화 시점 | 변수의 스코프 |
클래스 변수 | 클래스 영역 | 클래스가 처음 로딩될 때 | 클래스 전역 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성될 때 | 각각의 인스턴스 |
지역 변수 | 메소드 영역 | 변수 선언문이 수행됐을 때 | 메소드 안(메소드가 모두 수행되면 접근할 수 없는 상태가됨) |
라이프 타임
- 인스턴스 변수 - 객체가 생성되고 객체가 메모리에서 살아있는 동안
- 클래스 변수 - 클래스가 초기화되고 프로그램이 종료될때 까지
- 지역 변수 - 변수 선언 이후부터 블록을 벗어날 때 까지
타입 변환
타입 변환이란?
- 어떠한 값이나 변수의 타입을 다른 타입으로 변경하는것을 말합니다.
- 이때 타입은 두 가지 방향으로 변환될 수 있습니다. 확장(자동 형변환), 축소(명시적 형변환)
Case 01 - 확장(자동 형변환)
- 확장은 두 데이터 타입이 자동으로 변환되는 경우입니다.
- 더 작은 데이터 타입의 값을 더 큰 범위의 타입에 할당할 경우에만 동작합니다.
void 자동형변환(){
int a = 100;
long b = a;
float c = b;
}
Case 02 - 축소(명시적 형변환)
- 축소는 더 작은 범위의 타입에 더 큰 범위의 타입의 값을 할당하기 위해서는 반드시 명시적으로 형변환을 해주어야 합니다.
- 호환되지 않는 데이터 타입에도 사용할 수 있습니다.
void 명시적형변환(){
int a = 88;
char b = 'c';
b = a; // b의 타입이 더 작기 때문에 컴파일 에러 발생
b = (char)a; // 정상적인 형변환 가능
a = b; // a는 b보다 타입의 범위가 크므로 형변환 필요 없음, 자동
}
캐스팅
- 크기가 더 큰 자료형을 더 작은 자료형에 대입할 때, 자료형을 명시해서 강제로 집어넣는 것을 말합니다.
- 예시로 코끼리를 냉장고에 넣을거야! 라고 한다면 개발자가 명시적으로 코끼리의 크기를 냉장고에 들어갈 수 있는 크기로 해주어야합니다. 하지만 코끼리를 냉장고에 넣기위해서는 등분으로 짤라야하니 손실이 일어나게 됩니다.
- 아래 예제에서도 큰 데이터를 작은 데이터에 담을려고하니 데이터 손실이 발생하게 됩니다.
void casting {
float a = 3.14f;
int b = (int)a;
}
프로모션
- 크기가 더 작은 자료형을 더 큰 자료형에 대입할 때 자동으로 작은 자료형이 큰 자료형으로 변환되는 현상입니다.
- 예시로 코끼리를 동물원에 넣을거야! 라고 한다면 코끼리는 동물원에서 자유롭게 지낼 수 있으니 따로 형변환을 해주지 않아도 됩니다.
void promotion {
int a = 10;
float b = a;
}
1차 및 2차 배열 선언하기
// 1차 배열
int[] score = new int[5];
score[0] = 100;
score[1] = 95;
score[2] = 90;
score[3] = 85;
score[4] = 80;
// 2차 배열
int[][] arr = new int[5][5];
int[][] score = {{100, 200, 300}, {50, 10, 90}, {300, 320, 310}};
728x90
반응형
'JAVA > JAVA기본' 카테고리의 다른 글
JAVA - 불변객체(Immutable Object)란(feat.final)? (0) | 2021.12.12 |
---|---|
JAVA - Wrapper Class란? (0) | 2021.12.10 |
JAVA - 프리미티브 타입이란? (feat.레퍼런스 타입) (0) | 2021.12.08 |
JAVA - 리플렉션 (Reflection)이란? (0) | 2021.11.28 |
JAVA - Garbage Collection이란? (0) | 2021.11.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- redis sorted set
- 트랜잭셔널 아웃박스 패턴 스프링부트
- pipe and filter architecture
- spring boot excel download paging
- spring boot redisson sorted set
- spring boot excel download oom
- java userThread와 DaemonThread
- service based architecture
- transactional outbox pattern
- 람다 표현식
- spring boot redis 대기열 구현
- microkernel architecture
- redis sorted set으로 대기열 구현
- java ThreadLocal
- spring boot poi excel download
- spring boot redisson 분산락 구현
- spring boot redisson destributed lock
- space based architecture
- polling publisher spring boot
- redis 대기열 구현
- 레이어드 아키텍처란
- transactional outbox pattern spring boot
- pipeline architecture
- JDK Dynamic Proxy와 CGLIB의 차이
- @ControllerAdvice
- 자바 백엔드 개발자 추천 도서
- spring boot 엑셀 다운로드
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- 공간 기반 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함