Day 2: 변수와 자료형
변수는 데이터를 저장하는 메모리 공간에 붙인 이름입니다. Java는 강타입(strongly typed) 언어이므로 변수를 선언할 때 반드시 자료형을 지정해야 합니다. 크게 기본형(primitive type) 8가지와 참조형(reference type)으로 나뉩니다.
기본 자료형 (Primitive Types)
Java의 8가지 기본 자료형은 메모리에 값 자체를 직접 저장합니다.
public class PrimitiveTypes {
public static void main(String[] args) {
// 정수형
byte smallNum = 127; // 1바이트, -128 ~ 127
short mediumNum = 32000; // 2바이트
int number = 2_000_000_000; // 4바이트 (가장 많이 사용)
long bigNum = 9_000_000_000L; // 8바이트, L 접미사 필수
// 실수형
float pi = 3.14f; // 4바이트, f 접미사 필수
double precise = 3.141592653; // 8바이트 (기본 실수형)
// 문자형
char letter = 'A'; // 2바이트, 유니코드
char korean = '가'; // 한글도 가능
// 논리형
boolean isJavaFun = true; // true 또는 false
System.out.println("정수: " + number);
System.out.println("실수: " + precise);
System.out.println("문자: " + letter);
System.out.println("논리: " + isJavaFun);
}
}
변수 선언과 초기화
변수는 선언과 동시에 초기화할 수도 있고, 나중에 값을 대입할 수도 있습니다.
public class VariableExample {
public static void main(String[] args) {
// 선언과 동시에 초기화
int age = 25;
String name = "홍길동";
// 선언 후 나중에 초기화
double salary;
salary = 3500.50;
// 상수: final 키워드 사용 (값 변경 불가)
final int MAX_SCORE = 100;
final String COMPANY = "NITEU";
// MAX_SCORE = 200; // 컴파일 에러!
// var 키워드 (Java 10+): 타입 추론
var message = "타입을 추론합니다"; // String으로 추론
var count = 42; // int로 추론
System.out.println(name + "의 나이: " + age);
System.out.println("급여: " + salary);
System.out.println("최대 점수: " + MAX_SCORE);
}
}
참조 자료형과 String
참조형은 객체의 메모리 주소를 저장합니다. String은 가장 많이 사용되는 참조형입니다.
public class ReferenceTypeExample {
public static void main(String[] args) {
// String은 참조형이지만 특별 대우를 받음
String greeting = "안녕하세요";
String language = new String("Java");
// 문자열 비교
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println(a == b); // true (같은 리터럴 풀)
System.out.println(a == c); // false (다른 객체)
System.out.println(a.equals(c)); // true (내용 비교)
// null: 참조형의 기본값 (아무 객체도 가리키지 않음)
String empty = null;
// empty.length(); // NullPointerException 발생!
}
}
변수의 스코프
변수는 선언된 블록 {} 안에서만 유효합니다.
public class ScopeExample {
// 클래스 변수 (static): 모든 인스턴스가 공유
static int classVar = 10;
// 인스턴스 변수: 객체마다 별도
int instanceVar = 20;
public static void main(String[] args) {
// 지역 변수: 메서드 안에서만 유효
int localVar = 30;
{
// 블록 변수: 이 블록 안에서만 유효
int blockVar = 40;
System.out.println(blockVar); // 사용 가능
}
// System.out.println(blockVar); // 컴파일 에러!
System.out.println("클래스 변수: " + classVar);
System.out.println("지역 변수: " + localVar);
}
}
오늘의 연습문제
-
개인정보 저장: 이름(String), 나이(int), 키(double), 결혼여부(boolean)를 각각 변수에 저장하고 한 줄씩 출력하는 프로그램을 작성하세요.
-
자료형 크기 비교:
Byte.MAX_VALUE,Short.MAX_VALUE,Integer.MAX_VALUE,Long.MAX_VALUE를 출력하여 각 정수 자료형의 최댓값을 비교하는 프로그램을 작성하세요. -
문자열 동등성 실험:
==와.equals()의 차이를 실험하세요.new String("test")로 만든 두 객체를==와.equals()로 각각 비교한 결과를 출력하고, 왜 다른지 주석으로 설명하세요.