본문 바로가기
카테고리 없음

자주 틀리는 Java 조건문 오류 (if문, else문, switch) 실수 줄이기

by info95686 2025. 10. 2.

초보자가 자주 틀리는 Java 조건문 오류
초보자가 자주 틀리는 Java 조건문 오류

조건문은 자바(Java) 프로그래밍에서 가장 기초적이고 필수적인 제어 구조입니다. 하지만 초보자일수록 단순해 보이는 조건문에서 자주 실수합니다. 특히 if문, else문, switch문은 문법적으로는 간단하지만, 괄호나 연산자, 코드 블록 처리에서 작은 착오가 프로그램 전체의 흐름을 깨뜨릴 수 있습니다. 이번 글에서는 자바 조건문에서 초보자가 자주 범하는 실수와 그 원인, 그리고 이를 예방하는 올바른 코딩 습관을 구체적인 예제를 통해 정리하겠습니다.

if문에서 발생하는 실수

자바의 if문은 조건이 참일 때 특정 블록을 실행하는 가장 기본적인 조건문입니다. 하지만 초보자들은 몇 가지 실수를 반복하곤 합니다. 첫 번째 실수는 == 연산자와 = 대입 연산자를 혼동하는 경우입니다.

int x = 5;
if (x = 10) { // 컴파일 에러 발생
    System.out.println("x는 10입니다.");
}

위 코드는 조건식에서 =를 사용했기 때문에 컴파일 자체가 되지 않습니다. 자바에서는 조건식에 반드시 불리언 값이 필요하기 때문에, =는 허용되지 않습니다. 올바른 코드는 ==를 사용해야 합니다.

if (x == 10) {
    System.out.println("x는 10입니다.");
}

두 번째 실수는 중괄호 {}를 생략하는 것입니다. 자바는 if문에 단일 문장이 있으면 중괄호를 생략할 수 있지만, 이후 코드를 추가할 때 의도치 않은 버그가 생깁니다.

if (x > 0)
    System.out.println("양수입니다.");
    System.out.println("조건문 끝.");

위 코드는 조건문 끝.이 조건과 상관없이 항상 실행됩니다. 따라서 if문에는 습관적으로 중괄호를 반드시 붙이는 것이 안전합니다.

세 번째 실수는 복잡한 조건식에서 괄호를 소홀히 하는 것입니다.

if (x > 0 && x < 10 || x == 20)

&&||보다 먼저 평가되므로, x == 20이 별개로 취급됩니다. 따라서 괄호로 의도를 명확히 해야 합니다.

if ((x > 0 && x < 10) || x == 20)

else문에서 발생하는 실수

else문if문 조건이 거짓일 때 실행되는 블록을 의미합니다. 하지만 초보자들은 다음과 같은 오류를 자주 범합니다.

첫 번째는 중첩 if-else에서 매칭 오류입니다. 자바는 else가 가장 가까운 if와 연결됩니다.

int score = 85;
if (score > 90)
    if (score > 95)
        System.out.println("A+");
else
    System.out.println("B");

위 코드에서 else는 바깥쪽이 아니라 안쪽 if(score > 95)와 연결됩니다. 따라서 반드시 중괄호를 사용해야 합니다.

if (score > 90) {
    if (score > 95) {
        System.out.println("A+");
    } else {
        System.out.println("A");
    }
} else {
    System.out.println("B");
}

두 번째 실수는 else if 체인의 조건 중복입니다.

if (score >= 90) {
    System.out.println("A");
} else if (score >= 80) {
    System.out.println("B");
} else if (score >= 80) {
    System.out.println("C"); // 절대 실행되지 않음
}

마지막 else if는 무의미합니다. 조건을 설계할 때 반드시 중복 여부를 점검해야 합니다.

세 번째 실수는 else문 생략 후 발생하는 의도치 않은 결과입니다. 경우의 수가 명확할 때는 else를 두는 것이 안정적입니다.

switch문에서 발생하는 실수

switch문은 다중 조건 분기를 처리할 때 편리합니다. 하지만 초보자가 특히 자주 하는 실수는 break문을 빠뜨리는 것입니다.

int day = 2;
switch (day) {
    case 1:
        System.out.println("월요일");
    case 2:
        System.out.println("화요일");
    case 3:
        System.out.println("수요일");
    default:
        System.out.println("기타");
}

위 코드를 실행하면 day == 2일 때 "화요일", "수요일", "기타"가 연속으로 출력됩니다. break를 반드시 붙여야 합니다.

switch (day) {
    case 1:
        System.out.println("월요일");
        break;
    case 2:
        System.out.println("화요일");
        break;
    case 3:
        System.out.println("수요일");
        break;
    default:
        System.out.println("기타");
}

두 번째 실수는 switch에서 지원하지 않는 타입 사용입니다. JDK 7 이전에는 String을 조건식으로 쓸 수 없었습니다. JDK 7 이후부터는 지원합니다.

 

세 번째 실수는 default문을 생략하는 것입니다. 모든 경우를 다루지 않는다면 반드시 default를 넣어야 예외 상황을 처리할 수 있습니다.

결론: 조건문 실수를 줄이는 습관

자바 조건문은 간단해 보이지만 작은 문법적 차이와 습관 때문에 오류가 쉽게 발생합니다. if문에서는 연산자 혼동, 중괄호 생략, 조건식 괄호 누락이 흔합니다. else문에서는 매칭 오류, 조건 중복, 불완전한 분기 처리가 문제를 일으킵니다. switch문에서는 break문 누락, 잘못된 타입 사용, default 생략이 대표적인 오류입니다.

이런 실수를 줄이려면 중괄호 습관적으로 사용하기, 조건식 괄호로 우선순위 명확히 하기, default 반드시 포함하기, 코드 리뷰와 테스트 강화하기 같은 습관을 들이면 됩니다. 조건문은 프로그램의 흐름을 제어하는 핵심 구조이므로, 올바른 습관을 통해 코드 안정성과 가독성을 높이는 것이 중요합니다.