별 개수: 50
속도: 2

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

카테고리 없음

Java와 JavaScript 제어문(조건문, 반복문) 비교

lamarcK 2025. 4. 30. 19:30

1. 1. Java와 JavaScript 제어문 비교표

구분 제어문 유형 Java JavaScript
공통 기본 조건문 if
if-else
if-else if-else
switch-case
삼항 연산자 (? :)
while
do-while
for
try-catch-finally
instanceof
Java 전용 switch expression  
Enhanced for (for-each)
synchronized 블록
assert
Label 제어 (보편적)
JavaScript 전용 for...in  
for...of
널 병합 연산자 (??)
옵셔널 체이닝 (?.)
단축 평가 (&&, ∥)
async/await
Promise 체이닝
Label 제어 (제한적)
버전별 특징 Java 12+ switch 표현식  
Java 16+ 패턴 매칭  
ES2020+ 널 병합 연산자  
ES2020+ 옵셔널 체이닝  

※ 참고사항:

  1. Java의 Label 제어는 루프 제어에 주로 사용
  2. JavaScript의 Label은 존재하나 실제 사용은 드묾
  3. Java의 향상된 switch와 패턴 매칭은 최신 버전에서 지원
  4. JavaScript의 async/await는 비동기 처리를 위한 특수 조건문

2. 2. if문 상세 비교

java
클릭하여 코드 펼치기
// Java
if (condition) {  // condition은 반드시 true/false
    // 코드 블록
} else if (anotherCondition) {
    // 코드 블록
} else {
    // 코드 블록
}
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript
if (condition) {  // condition은 truthy/falsy 값으로 평가
    // 코드 블록
} else if (anotherCondition) {
    // 코드 블록
} else {
    // 코드 블록
}
클릭하여 코드 복사
특징 Java JavaScript
조건식 타입 boolean만 허용 모든 타입 허용 (truthy/falsy)
중괄호 생략 한 줄일 때 가능하나 권장하지 않음 한 줄일 때 가능
블록 스코프 엄격한 블록 스코프 let/const는 블록 스코프, var는 함수 스코프
조건 평가 엄격한 boolean 평가 느슨한 형변환 후 평가
null 체크 명시적 null 체크 필요 falsy 값으로 자동 처리
  • falsy : false, 0, -0, 0n, "", null, undefined, NaN
    • 0n은 BigInt zero라고 해서 빅인트 타입의 0을 뜻함
  • truthy : falsy가 아닌 모든 것들

3. 3. switch문 상세 비교

java
클릭하여 코드 펼치기
// Java의 switch문은 제한된 타입만 사용 가능
switch (value) {
    case 1:  // 상수만 가능
        // 코드
        break;  // break 필수
    case 2:
        // 코드
        break;
    default:
        // 코드
}
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript의 switch문은 모든 타입 사용 가능
switch (value) {
    case "string":  // 문자열 가능
        // 코드
        break;  // break 선택적
    case 42:  // 숫자 가능
        // 코드
        break;
    default:
        // 코드
}
클릭하여 코드 복사

1. switch문 비교표

특징 Java JavaScript
지원 타입 byte, short, char, int, enum, String 모든 타입
case 값 상수만 가능 모든 표현식 가능
break 문 필수 (없으면 fall-through) 선택적
case 합치기 Java 12+ arrow syntax 지원 comma로 구분
표현식 반환 Java 12+ 가능 return 필요
동적 case 불가능 가능

2. 추가적인 고려 사항(switch expressions)

  • 자바의 switch 문은 기본적으로 각각의 case 절에 break;를 추가해서 의도적으로 case를 종료해야만 했다.
  • 만약 switch문에서 break를 사용하지 않으면 "fall through" 현상이 발생한다.
  • 즉, 해당 case가 끝나도 다음 case로 계속 실행이 되는 것이다.

하지만 ES2015+ 에서는 switch expressions이라는 새로운 문법이 도입되어 break 없이도 안전하게 사용할 수 있게 되었는데 switch expressions은 새로운 문법이라 사용 방식이 좀 다르다. expressions(표현식)이라는 것에서 알 수 있듯 기존의 함수 표현식처럼 화살표를 사용하는 문법이다.

 

switch expressions로 작성된 경우 화살표(->) 구문을 사용하며, 별도의 break 문이 없어도 각 case의 코드 실행 후 자동으로 해당 절을 종료한다.

또한 switch expressions는 식(expression)으로 사용될 수 있어, 스위치문의 결과를 직접 변수에 할당할 수 있다. 기존에는 변수를 먼저 선언하고 switch 문 내부에서 값을 할당해야 했던 것과 달리, 스위치문 전체를 하나의 식으로 처리할 수 있게 되었다.

물론 기존 switch 문처럼 단순 분기 처리용으로 사용하는 것도 가능하다.

java
클릭하여 코드 펼치기
// 기존 switch문 방식
String result;  // 먼저 변수 선언
switch(value) {
    case 1:
        result = "ONE";
        break;
    case 2:
        result = "TWO";
        break;
    default:
        result = "OTHER";
        break;
}
// result 사용
클릭하여 코드 복사
java
클릭하여 코드 펼치기
// 새로운 switch expressions
String result = switch(value) {  // 직접 할당 가능
    case 1 -> "ONE";
    case 2 -> "TWO";
    default -> "OTHER";
};
클릭하여 코드 복사

4. 4. 삼항 연산자 비교

java
클릭하여 코드 펼치기
// Java는 단일 표현식만 가능
String result = (condition) ? "true" : "false";

// 중첩 가능하지만 가독성 떨어짐
String result = (a > b) ? "a가 크다" : 
                (a < b) ? "b가 크다" : "같다";
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript는 더 유연한 사용 가능
let result = condition ? "true" : "false";

// 다중 표현식 가능
let result = condition 
    ? (x = 1, y = 2, "true") 
    : (x = 0, y = 0, "false");
클릭하여 코드 복사

1. 삼항 연산자 비교표

특징 Java JavaScript
중첩 사용 가능하나 권장하지 않음 자유롭게 가능
다중 표현식 단일 표현식만 가능 콤마 연산자로 다중 표현식 가능
반환 타입 동일한 타입이어야 함 다른 타입 가능
null 처리 명시적 처리 필요 단축 평가 가능

5. 5. while/do-while 비교

java
클릭하여 코드 펼치기
// Java
while (condition) {  // boolean 조건만 가능
    // 코드
}

do {
    // 코드
} while (condition);
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript
while (condition) {  // truthy/falsy 값 가능
    // 코드
}

do {
    // 코드
} while (condition);
클릭하여 코드 복사

1. while/do-while 비교표

특징 Java JavaScript
조건식 boolean만 가능 truthy/falsy 값
변수 스코프 블록 스코프 함수/블록 스코프
break/continue 레이블 지원 레이블 지원
무한 루프 while(true) while(true) 또는 while(1)

6. 6. 실무 활용 패턴

1. 널 체크 패턴

java
클릭하여 코드 펼치기
// Java
Optional.ofNullable(value)
        .map(v -> v.toString())
        .orElse("default");
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript
const result = value ?? "default";
클릭하여 코드 복사

2. 조건부 실행 패턴

java
클릭하여 코드 펼치기
// Java
if (debug) {
    logger.debug("디버그 메시지");
}
클릭하여 코드 복사
javascript
클릭하여 코드 펼치기
// JavaScript
debug && console.log("디버그 메시지");
클릭하여 코드 복사

7. 7. 성능 최적화 팁

  1. 조건문 순서 최적화
java
클릭하여 코드 펼치기
// 빈도가 높은 조건을 먼저 체크
if (commonCase) {  // 자주 발생하는 케이스
    // 처리
} else if (rareCase) {  // 드문 케이스
    // 처리
}
클릭하여 코드 복사
  1. switch문 활용
java
클릭하여 코드 펼치기
// 많은 조건 분기가 있을 때는 if-else보다 switch 선호
switch (value) {
    case 1: return "One";
    case 2: return "Two";
    default: return "Unknown";
}
클릭하여 코드 복사

8. 주요 주의사항

  1. Java
    • 항상 명시적인 boolean 조건 사용
    • switch문의 break 필수
    • 타입 안전성 보장
    • null 체크 필수
  2. JavaScript
    • truthy/falsy 값 이해 필요
    • 타입 변환 주의
    • === 사용 권장
    • 옵셔널 체이닝 활용

이동