
📍 개요
◾ JAVA의 기초적인 변수 선언과 초기화 방법에 대해 알아보았습니다.
◾ 데이터 타입의 리터럴 범위를 초과할 경우 오버플로우 현상이 일어날 수 있다는 점을 배웠습니다.
◾ 리터럴 접미사를 통해 데이터 타입을 정확히 명시해줄 수 있다는 내용을 학습하였습니다.
📌 변수 선언 및 초기화
1️⃣ 기본 데이터 타입 변수
int age = 20; // 자료형 변수명 = 값;
2️⃣ 객체 타입 변수
HashMap<String, String> map = new HashMap<>(); // 제네릭 선언(코드의 안정성 보장)
❗변수는 반드시 초기화 해야합니다.
🧷 예제로 이해하기
public class VariableExample {
public static void main(String[] args) {
int value = 10; // main 메서드의 지역 변수
if (value == 10) {
int value2 = 11; // if 블록 내의 지역 변수
System.out.println(value2);
}
for (int i = 0; i < 5; i++) {
int value2 = 1; // for 블록 내의 지역 변수
System.out.println(value + 1);
System.out.println(value2 + 1);
}
System.out.println(value); // 출력 가능
System.out.println(value2); // 컴파일 오류 발생
}
}
👉 변수 `value2`는 `if` 블록과 `for` 블록 내에서만 유효하며, 블록 외부에서는 접근할 수 없습니다.
📁 소문자, 대문자 카멜 표기법
✔️ 소문자 카멜 표기법
변수명과 메서드명에 사용
✔️ 대문자 카멜 표기법
클래스명이나 인터페이스명에 사용

자바에서 변수가 선언된 블록 안에서만 사용 가능한 이유는 변수의 스코프 때문입니다.
스코프는 변수의 유효 범위를 말하는데 자바에서 블록 범위를 넘어서는 접근은 허용되지 않지만,
전역 변수를 사용하여 이 문제를 해결할 수 있습니다.
여기서 헷갈렸던 점이 `className` 은 예약어가 들어있어 불가능한 줄 알았는데
자바에서 변수명에 예약어가 포함되는 것은 문법적으로 가능하다고 합니다.
그렇지만 예약어가 들어가있는 변수명은 코드 가독성이 떨어지니 지양하는 것이 좋습니다!
📁 변수 타입별 값 범위와 오버플로우 현상
public class GarbageValueExample {
public static void main(String[] args) {
byte a = 127; // 최대값
int b = 127; // int 타입, 범위 문제가 없음
for (int i = 0; i < 5; i++) {
a++; // a는 127 -> -128로 돌아감, 오버플로우 발생
b++; // b는 127 -> 128, 정상적인 증가
System.out.println("a = " + a); // 오버플로우로 인해 -128, -127, ...
System.out.println("b = " + b); // 정상적으로 128, 129, ...
}
}
}
byte 타입에서 저장할 수 있는 값의 범위는 -128에서 127까지인데요.
a++;을 할 경우 최대값 범위를 넘어가기 때문에 오버플로우 현상이 나타납니다.
반대로 int의 값 범위는 -2,147,483,648 ~ 2,147,483,647 이기 때문에 정상적으로 증가하는 모습을 볼 수 있습니다.
이처럼 타입별로 고정된 범위의 값을 저장할 수 있는데 이 범위를 벗어나게 된다면
오버플로우 혹은 언더플로우 현상이 나타날 수 있습니다.

⭐ 현업에서 자주 쓰이는 타입은 정수 int, 실수 double, 문자열 String 이 있습니다.
📁 리터럴 접미사
리터럴을 명시하는 것은 특히 타입을 명확히 하거나, 기본 타입의 범위를 초과하는 값을 다룰 때 중요합니다.
// 리터럴 명시X
int intValue = 10; // int 리터럴 (기본적으로 int 타입)
double doubleValue = 3.14; // double 리터럴 (기본적으로 double 타입)
// 리터럴 명시 필수
long longValue = 10000000000L; // long 리터럴 (L 접미사로 long 타입으로 명시)
float floatValue = 3.14F; // float 리터럴 (F 접미사로 float 타입으로 명시)
👉 데이터 타입, 리터럴, 접미사 뜻 자체가 무엇인지 혼란이 와서 찾아보니
float pi = 3.14F;
데이터 타입은 `float`이고 리터럴은 `3.14`로 값을 말하며 접미사는 `F`를 의미합니다.
여기서 F 접미사를 붙이지 않으면 자동으로 기본 타입인 double으로 지정 되는 것이죠!
📝 오늘의 부트캠프 회고
1️⃣ 잘했던 점
코드에서 원래는 값에 이상이 없었는데 어느 순간 값을 보면 처음과 달라지는 경우가 있습니다. 이러한 현상이 데이터 타입과 관련이 있다는 것을 알았습니다.
이렇게 리터럴 값이 데이터 타입의 범위를 벗어나면 값이 달라질 수 있으므로 데이터 타입에 맞는 범위를 사용하는 것이 중요하다는 내용을 이번 시간에 깨닫게 되었습니다.
2️⃣ 부족했던 점
무조건적으로 고민하지 않고 long이나 double을 쓰면 편하겠지만 이렇게 되면 용량이 커지니 비효율적이게 되겠죠. 데이터 타입별로 바이트와 범위를 대략적으로라도 외워두어야겠다고 생각했습니다.
3️⃣ 향후 개선 방향
데이터 타입을 결정하는 것은 매우 중요한 점이라 느꼈기 때문에 추후에 개발을 할 때에 잘 고려해야겠다는 생각이 들었습니다.
'☕ JAVA' 카테고리의 다른 글
[🥸JAVA] 자바 조건문(if, switch)과 반복문(for, while) 정리 (0) | 2024.09.04 |
---|---|
[🥸JAVA] 실무에서 자주 사용하 자바 연산자 종류(➰단항, 이항, 삼항!) (0) | 2024.09.03 |
[🥸JAVA] 자바 자동/강제 타입 변환, 문자열 숫자 변환(➰parseInt, valueOf 메서드) (2) | 2024.09.02 |
[🥸JAVA] 자바 기본 타입 변수와 참조 변수 메모리 영역 차이(➰Heap, Stack) (2) | 2024.09.02 |
[🥸JAVA]객체지향 프로그래밍과 JAVA 동작 원리 기초(➰JVM 구조) (0) | 2024.08.30 |