일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 운영체제
- 모던자바스크립트
- javascript
- 확인문제
- 회고
- 상태관리
- 부스트캠프7기
- OS
- 타입
- CRDT
- 브라우저 렌더링
- 놀러와요_해커톤
- 모던 자바스크립트
- 인프콘
- 부스트캠프
- 우선순위상속프로토콜
- 부스트컨퍼런스
- 렌더 트리
- Java
- DB #데이터베이스
- 데이터독립성
- CSSOM
- 멤버십
- js
- GDSC
- 변수
- GDSC_PKNU
- 그룹프로젝트
- 우선순위역전
- 부스트캠프웹모바일
- Today
- Total
dohun.log
[Java] 02.변수와 타입 본문
변수
변수는 값을 저장할 수 있는 메모리 공간을 의미한다.
이렇게 말하면 너무 딱딱하니까 쉽게 말하면 데이터를 담을 수 있는 박스다.
그렇다고 박스에 아무거나 막 담을 수 있을까? 아니다😂
(약 타입 언어에서는 가능하지만 강 타입 언어에서는 절대 안 된다.)
타입
박스에 무엇을 담을 수 있는지 알려주는 이름표 같은 것이다.
타입의 종류
종류 | 타입 | 메모리 사용 크기 |
정수 | byte | 1 byte / 8 bit |
정수 | char | 2 byte / 16 bit |
정수 | short | 2 byte / 16 bit |
정수 | int | 4 byte / 32 bit |
정수 | long | 8 byte / 64 bit |
실수 | float | 4 byte / 32 bit |
실수 | double | 8 byte / 64 bit |
논리 | boolean | 1 byte / 8 bit |
변수의 선언
Java에서 변수 선언은 다음과 같이 한다.
타입 변수이름;
int age;
double height;
boolean isStudent;
변수의 초기화
변수를 초기화하려면 다음과 같이 선언을 하고 초기화하는 방법이 있고,
int age; // 변수 선언
age = 21; // 변수 초기화
선언과 동시에 초기화하는 방법이 있다.
int age = 21; // 변수 선언 + 초기화
변숫값 읽기
변수를 초기화했다면 이제 변수를 읽을 수 있다.
int age = 21;
int koreanAge = age - 1; // koreanAge는 20으로 초기화된다.
만약 초기화하지 않고 변수를 읽으려고 한다면 컴파일 에러가 난다.
int age;
int koreanAge = age - 1; // age값이 초기화되지 않았기때문에 컴파일 에러🚫
변수의 사용 범위
변수는 선언된 블록 내에서만 사용 가능하다.
다음과 같이 변수가 선언되어 있다면 컴파일 에러가 발생한다.
public class Dohun {
public static void main(String[] args) {
int age = 21;
if(age > 21) {
boolean isStudent = true;
}
// isStudent는 if문 안에서만 사용 가능
// 여기서 사용하려고 하면 컴파일 에러🚫
System.out.println(age + " " + isStudent);
}
}
age와 isStudent를 같이 print 하고 싶다면 다음과 같이 코드를 작성하면 된다.
public class Dohun {
public static void main(String[] args) {
int age = 21;
boolean isStudent = false;
if(age >= 21) {
isStudent = true;
}
// age와 isStudent가 같은 블럭안에 선언되어 있다.
// 사용 가능
System.out.println(age + " " + isStudent);
}
}
타입 변환
타입 변환이란 말 그대로 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
자동 타입 변환
작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 자동적으로 발생한다.
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환
이때 byte는 1byte이고 int는 4byte이다.
intValue의 최하위 1byte에 byteValue값을 넣어주면 된다.
intValue | |||
00000000 | 00000000 | 00000000 | 00000000 |
intValue | byteValue | ||
00000000 | 00000000 | 00000000 | 00001010 |
int가 4byte이기 때문에 byteValue에 3byte를 더해주기만 하면 된다.
데이터의 손실 없이 변환할 수 있다.
강제 타입 변환
큰 크기를 가지는 타입이 작은 크기를 가지는 타입에 저장될 때 발생한다.
이때는 자동 타입 변환과 같이 자동적으로 형 변환이 되지 않는다.
앞에서는 작은 크기를 큰 크기로 바꾸는것이기 때문에 데이터 손실 걱정 없이 형 변환을 할 수 있었지만
이 경우에 큰 크기를 작은 크기로 바꾸면서 데이터가 버려지기 때문에 변환될 타입의 최솟값과 최댓값을 벗어나는지 확인한 다음 변환을 진행해야 한다.
int intValue = 10;
byte byteValue = (byte)intValue; // 강제 타입 변환
이 경우는
intValue | |||
00000000 | 00000000 | 00000000 | 00001010 |
intValue의 상위 3byte를 버리면 된다.
byteValue |
00001010 |
이때 데이터는 그대로 보존 되지만
다음과 같은 경우에는 데이터가 보존되지 않는다.
int intValue = 103029770;
byte byteValue = (byte)intValue; // 강제 타입 변환
intValue | |||
00000110 | 00100100 | 00011100 | 00001010 |
이 경우에 상위 3byte를 버리면
intValue(상위 3byte) | ||
00000110 | 00100100 | 00011100 |
원래의 데이터가 버려진다.
그리고 byteValue는 10이 된다.
byteValue |
00001010 |
원래의 의도와는 다른 결과가 나오는 것이다.
따라서 강제 타입 변환을 할 때는 변환될 타입의 반드시 최솟값과 최댓값을 확인해야 한다.
출처: 이것이 자바다 Chater02 변수와 타입
'Study > Java' 카테고리의 다른 글
[Java]05.참조 타입 (2) | 2022.01.18 |
---|---|
[Java]01.자바 시작하기 (1) | 2022.01.11 |
[Java]04.조건문과 반복문 (0) | 2022.01.11 |
[Java]03.연산자 (0) | 2022.01.10 |
[Java]06.클래스-확인문제 (0) | 2021.12.29 |