공공부하자개발 · 영어 학습 노트
자바
초급자바의 뼈대0/8 완료
  • 00개발 환경과 첫 프로그램
  • 01변수, 데이터 타입, 형변환
  • 02연산자와 제어문
  • 031차원 · 2차원 배열
  • 04클래스, 객체, 생성자, 오버로딩
  • 05접근 제어자와 캡슐화
  • 06메서드 활용 패턴 (초급)
  • 07enum, 패키지와 import, static 과 final
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 초급 › 01 / 8

변수, 데이터 타입, 형변환

섹션 7진행 0 / 8
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

❌ 실수 1: 지역 변수를 초기화하지 않고 사용

java
public static void main(String[] args) {
    int total;
    System.out.println(total);   // 컴파일 오류: variable total might not have been initialized
}

클래스 필드는 기본값(0, null, false)이 자동으로 들어가지만, 메서드 안의 지역 변수는 그렇지 않습니다. 컴파일러가 "값이 정해지지 않은 변수를 읽으려 한다"고 막습니다. 실수로 쓰레기값을 읽는 C 언어의 사고를 원천 차단하려는 설계입니다.

✅ int total = 0; 처럼 선언과 동시에 초기화합니다.

❌ 실수 2: 정수 나눗셈으로 비율 계산

java
int passed = 45, applicants = 60;
double rate = passed / applicants * 100;   // 0.0

passed / applicants가 정수 나눗셈이라 0이 되고, 그 다음 100을 곱해도 0입니다. double 변수에 넣는다고 계산이 double로 되지 않습니다. 계산은 피연산자 타입으로 결정됩니다.

✅ double rate = (double) passed / applicants * 100; → 75.0

❌ 실수 3: long 리터럴에 L을 빼먹음

java
long bigNumber = 3000000000;   // 컴파일 오류: integer number too large

리터럴 3000000000은 int로 해석되는데 int 범위를 넘습니다. 변수 타입이 long이어도 리터럴은 별개입니다.

✅ long bigNumber = 3_000_000_000L;

❌ 실수 4: float에 f를 빼먹음

java
float ratio = 0.75;   // 컴파일 오류: possible lossy conversion from double to float

실수 리터럴 기본 타입은 double이므로 float에 넣으려면 narrowing이 됩니다.

✅ float ratio = 0.75f; — 또는 그냥 double을 씁니다. float를 써야 할 이유가 없다면 double이 답입니다.

❌ 실수 5: 문자열을 == 로 비교

java
String input = new String("admin");
if (input == "admin") {          // false
    System.out.println("관리자");
}

==는 두 변수가 같은 객체(같은 주소)인지 봅니다. 내용이 같아도 다른 객체면 false입니다. 사용자 입력, DB 조회 결과 등 런타임에 만들어진 문자열은 리터럴과 다른 객체입니다.

✅ if ("admin".equals(input)) — 리터럴을 앞에 두면 input이 null이어도 NPE가 나지 않습니다.

❌ 실수 6: 돈을 double로 계산

java
double price = 0.1;
double sum = 0;
for (int i = 0; i < 10; i++) sum += price;
System.out.println(sum == 1.0);   // false (0.9999999999999999)

✅ BigDecimal을 문자열 생성자로 만들어 계산하거나, 원 단위 long으로 저장합니다.

❌ 실수 7: char에 문자열, String에 문자

java
char c = "A";      // 컴파일 오류: String을 char에
String s = 'A';    // 컴파일 오류: char를 String에

작은따옴표는 한 글자 char, 큰따옴표는 String입니다. 길이 1인 문자열도 String입니다.

✅ char c = 'A'; String s = "A"; 변환이 필요하면 String.valueOf(c), s.charAt(0).

자주 하는 실수 (Tip)
  • ❌ 실수 1: 지역 변수를 초기화하지 않고 사용
  • ❌ 실수 2: 정수 나눗셈으로 비율 계산
  • ❌ 실수 3: long 리터럴에 L을 빼먹음
  • ❌ 실수 4: float에 f를 빼먹음
  • ❌ 실수 5: 문자열을 == 로 비교
  • ❌ 실수 6: 돈을 double로 계산
  • ❌ 실수 7: char에 문자열, String에 문자
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제