자바에서 변수는 값을 저장하기 위한 이름이 붙은 메모리 공간으로, 프로그램이 데이터를 일시적으로 기억하고 활용할 수 있게 해줍니다. 변수는 사용하기 전에 반드시 선언해야 하며, 선언 시에는 자료형(예: int, double, String)과 함께 변수 이름을 명시합니다. 자바는 정적 타입 언어이므로 변수의 자료형이 고정되며, 다른 자료형의 값을 저장하려 하면 컴파일 에러가 발생합니다. 변수는 선언된 위치와 사용 방법에 따라 지역 변수, 멤버 변수(필드), 클래스 변수(static)로 나뉘며, 각각의 용도와 메모리 저장 위치가 다릅니다. 올바른 변수 선언과 사용은 자바 프로그래밍의 기초이자 핵심입니다.
자료형 변수이름; // 변수 선언
변수이름 = 값; // 값 저장(대입)
int age; // 정수형 변수 age 선언
double height; // 실수형 변수 height 선언
String name; // 문자열을 저장할 변수 name 선언
age = 20;
height = 160.5;
name = "김사과";
int age = 20;
double height = 160.5;
String name = "김사과";
public class VariableEx {
public static void main(String[] args) {
int age = 20; // 나이를 저장하는 변수
double height = 160.5; // 키를 저장하는 변수
String name = "김사과"; // 이름을 저장하는 변수
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("키: " + height);
}
}
Ctrl + J | 단축구문 전체 팝업 |
sout | System.out.println(); 자동완성 |
serr | System.err.println(); 자동완성 |
main / psvm | public static void main(String[] args) { } 자동완성 |
Alt + Insert | 생성자, getter/setter 메서드 자동 생성 (cmd + N on Mac) |
Shift + Enter | 커서 위치에 상관없이 다음 줄 생성 |
Ctrl + Shift + ↑/↓ | 현재 줄 위/아래로 이동 (라인 위치 바꾸기) |
Ctrl + I | 상속받은 메서드 자동완성 |
Ctrl + Shift + U | 대/소문자 전환 |
Alt + Enter | 오류/경고 위에서 대체 옵션 제안 |
F2 | 다음 오류/경고/제안으로 이동 |
Ctrl + B | 변수/클래스/메서드 선언부로 이동 |
Ctrl + / | 현재 줄 주석 처리 (//) |
Ctrl + Shift + / | 블록 주석 처리 (/* */) |
Ctrl + Enter | 조건문 괄호 입력 후 {} 자동 생성 |
Ctrl + Shift + Enter | 조건문 전체 문장 자동완성 (if, for 등) |
Ctrl + Alt + L | 코드 자동 줄맞춤 (포맷팅) |
Shift + Shift | 전체 검색 (클래스, 파일, 심볼 등) |
Ctrl + Y | 현재 줄 삭제 |
Ctrl + D | 현재 줄 복사하여 아래에 붙여넣기 |
Ctrl + Alt + O | import 문 최적화 |
Ctrl + Alt + T | 선택한 코드 블록으로 감싸기 (if, try, for 등) |
Ctrl + R | 찾은 문자열을 다른 문자열로 바꾸기 |
Shift + F6 | 변수/파일 이름 바꾸기 (리팩토링) |
Ctrl + Alt + S | 설정(Settings) 창 열기 |
Ctrl + Alt + Shift + S | Project Structure 창 열기 |
Ctrl + . | 접기(Folding) 기능 – 코드 일부를 ...으로 축약 |
데이터 타입(Data Type)은 "변수에 어떤 종류의 데이터를 저장할 수 있는지"를 정해주는 설명서 같은 역할을 합니다. 즉, 변수에 숫자를 저장할지, 글자를 저장할지, 참/거짓을 저장할지를 자바에 미리 알려주는 것입니다.
총 8가지 타입이 있으며, 메모리에 직접 값 자체를 저장합니다.
byte | 1바이트 | byte a = 100; | -128 ~ 127 정수 |
short | 2바이트 | short b = 30000; | 작은 정수 |
int | 4바이트 | int c = 100000; | 일반적인 정수 타입 |
long | 8바이트 | long d = 10000000000L; | 큰 정수, 끝에 L 붙이기 |
float | 4바이트 | float e = 3.14f; | 소수점 숫자, 끝에 f |
double | 8바이트 | double f = 3.141592; | 더 정밀한 소수 |
char | 2바이트 | char g = 'A'; | 한 글자 문자, 작은따옴표 ' ' 사용 |
boolean | 1바이트 (논리값) | boolean h = true; | true 또는 false |
기본형이 아닌 모든 데이터는 참조형입니다.
→ 실제 데이터가 있는 메모리 주소(참조)를 변수에 저장합니다.
String | String name = "홍길동"; | 문자열 저장 (한 글자 이상) |
배열 | int[] numbers = {1, 2, 3}; | 같은 타입의 데이터를 여러 개 저장 |
클래스 | Person p = new Person(); | 사용자 정의 클래스의 객체 |
public class DataTypeEx {
public static void main(String[] args) {
int age = 20; // 정수형
double height = 160.5; // 실수형
char grade = 'A'; // 문자형
boolean isStudent = true; // 논리형
String name = "김사과"; // 문자열 (참조형)
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("키: " + height);
System.out.println("학점: " + grade);
System.out.println("학생 여부: " + isStudent);
}
}
자바에서 형 변환(Type Casting)은 변수나 값의 자료형을 다른 자료형으로 바꾸는 과정입니다. 숫자 타입 간(예: int → double)에는 자동 변환이 가능하지만, 크기가 큰 타입에서 작은 타입으로 바꿀 때는 명시적 형 변환(casting)이 필요합니다. 형 변환은 계산, 저장, 비교 등의 작업에서 타입이 서로 다를 때 자주 사용되며, 잘못 사용하면 데이터 손실이 발생할 수 있으므로 주의해야 합니다.
int num = 100;
double result = num; // int → double 자동 변환
System.out.println(result); // 출력: 100.0
double pi = 3.14159;
int intPi = (int) pi; // double → int 명시적 형 변환
System.out.println(intPi); // 출력: 3
public class TypeCastingEx {
public static void main(String[] args) {
// 자동 형 변환 (묵시적)
int score = 90;
double average = score; // int → double
System.out.println("자동 형 변환 결과: " + average); // 90.0
// 강제 형 변환 (명시적)
double pi = 3.14159;
int truncatedPi = (int) pi; // double → int
System.out.println("강제 형 변환 결과: " + truncatedPi); // 3
// char → int
char grade = 'A';
int gradeCode = grade;
System.out.println("문자 A의 유니코드 값: " + gradeCode); // 65
// int → char (강제 형 변환)
int code = 66;
char letter = (char) code;
System.out.println("유니코드 66에 해당하는 문자: " + letter); // B
}
}
👉 크기를 비교할 때는 단순한 바이트 수가 아니라, 표현할 수 있는 값의 종류와 범위를 기준으로 봐야 합니다. 따라서 long이 float보다 더 "큰 타입"이 아닙니다. 자바에서는 float이 long보다 "더 큰 타입"으로 간주됩니다.
public class FloatLongTest {
public static void main(String[] args) {
long bigNumber = 100000000000L; // long 타입
float converted = bigNumber; // long → float (자동 형 변환, 정밀도 손실)
System.out.println("long → float 변환: " + converted);
float pi = 3.14159f;
long piToLong = (long) pi; // float → long (명시적 형 변환, 소수점 잘림)
System.out.println("float → long 변환: " + piToLong);
}
}