ToolActToolAct

Java 포맷 도구

Java 입력
출력 결과
줄 수: 1문자 수: 0바이트 수: 0
줄 수: 1문자 수: 0

Java 포맷이란?

Java 포맷은 복잡한 Java 코드를 표준화된 읽기 쉬운 형식으로 정리하는 과정입니다. 적절한 코드 포맷은 가독성을 높이고, 디버깅을 쉽게 하며, 오류를 줄입니다. 포맷에는 일관된 들여쓰기, 적절한 줄바꿈, 연산자 공백, 괄호 정렬이 포함됩니다. 압축은 모든 공백과 주석을 제거하여 파일 크기를 크게 줄입니다. 자동 서식 정리는 코드 스타일을 맞추는 데 유용하지만 컴파일 오류나 로직 문제를 해결하지는 않습니다. 적용 후에는 프로젝트의 빌드, 테스트, 팀 코드 규칙과 함께 확인해야 합니다.

사용 방법

사용 방법

  1. 왼쪽 입력란에 Java 코드를 붙여넣거나 입력하세요
  2. 들여쓰기 크기를 선택하세요 (2 spaces, 4 spaces 또는 Tab)
  3. '포맷'을 클릭하여 코드를 보기 좋게 정리하고, '축소'를 클릭하여 압축하세요
  4. 오른쪽에서 결과를 확인하세요 (구문 강조 포함)
  5. '복사'를 클릭하여 클립보드에 복사하세요

옵션 설명

들여쓰기 크기2 spaces, 4 spaces 또는 Tab 들여쓰기 중 선택
포맷적절한 들여쓰기와 줄 바꿈으로 코드를 보기 좋게 정리
축소공백과 주석을 제거하여 파일 크기를 줄임

코드 팁

  • 포맷팅은 가독성을 향상시키지만 Java 코드를 컴파일하거나 타입 검사를 하지 않으므로 편집 후 일반적인 빌드 또는 IDE 검사를 실행하세요.
  • Java 소스를 축소하는 것은 프로덕션 빌드에서 거의 유용하지 않습니다. 리뷰, 스택 트레이스, 향후 유지 관리를 위해 읽기 쉬운 포맷을 유지하세요.

활용 사례

코드 리뷰 전 붙여넣은 Java 정리메서드 본문이 일관되지 않은 간격으로 채팅, 문서, 티켓 댓글에서 복사된 경우 이 포맷터가 중괄호와 문장 주변의 읽기 쉬운 들여쓰기와 줄바꿈을 빠르게 복원합니다. 전체 IDE 프로젝트를 열지 않고도 코드 리뷰 가능한 형태로 만들고 싶은 작은 코드 조각에 특히 유용합니다.
문서나 버그 리포트용 간결한 예시 준비압축 모드는 주석과 불필요한 공백을 제거하여 Java 예시를 이슈 필드, 로그 주석, 재현 노트에 스크롤 없이 맞출 수 있습니다. 파싱과 압축이 브라우저에서 완전히 이루어지므로 내부 패키지 이름, 미완성 DTO, 비공개 브랜치의 독점 코드가 페이지를 벗어나지 않고 재구성됩니다. 고객 식별자가 아직 포함된 재현기를 공유할 때 중요합니다.
짧은 코드 조각에서 명백한 구조 오류 발견내장 검증은 문자열, 문자 리터럴, 주석을 존중하면서 괄호 균형을 확인하므로 다른 곳에 붙여넣기 전에 누락된 중괄호나 괄호를 잡을 수 있습니다. 컴파일러는 아니지만 면접 연습, 문서 샘플, 격리된 유틸리티 메서드에 대한 빠른 점검입니다.
생성된 코드를 프로젝트 들여쓰기에 맞춤2칸, 4칸, 탭 들여쓰기 간 전환하여 생성된 getter, Lombok 출력, IDE 내보내기가 주변 파일과 일치하도록 하세요. 팀의 Google Java Style, Checkstyle, Spotless 설정을 확인하기 전에 전체 모듈에 실행하지 마세요. 그렇지 않으면 포맷터 패스가 시끄러운 diff를 생성합니다.
enum과 애노테이션이 많은 코드 조각 안전하게 포맷팅상수, 메서드, 애노테이션 배열이 있는 enum을 붙여넣으면 채팅에서 읽을 수 없는 텍스트 벽으로 축소되는 경우가 많습니다. 각 상수와 인수가 독립된 행에 오도록 재포맷한 뒤 rewrite 후에도 import와 public 수정자가 여전히 존재하는지 확인하세요. Google Java Style은 4칸 들여쓰기와 100열 너비를 요구하고, Eclipse 기본 프로파일은 2칸 탭을 사용하며, IntelliJ 내장 스타일은 종종 120열까지 확장됩니다. 팀 프로파일을 먼저 확인하지 않고 이 포맷터를 실행하면 코드가 그 외에 유효하더라도 diff가 생깁니다. import 순서 규칙(정적 import 먼저, 그 다음 java.*, javax.*, 외부, 로컬)도 스타일별로 다르며, Map<String, List<Integer>>의 제네릭 꺾쇠괄호 간격은 Google Style에 따라 공백 없이 정규화됩니다.

기술 원리

Java 포맷팅은 어휘 분석과 AST 구축을 기반으로 합니다. 렉서는 소스를 문자 단위로 스캔하여 토큰을 생성합니다. 키워드(class, public, static 및 기타 예약어), 식별자(변수 및 클래스 이름), 리터럴(숫자, 문자열, 문자), 연산자(+, -, ==, && 등), 구분자({ } ( ) ; ,), 주석(//, /* */) 등입니다. 파서는 Java 언어 명세(JLS)에 따라 토큰 스트림을 추상 구문 트리(AST)로 변환하여 클래스 정의, 메서드 본문, 문장 블록, 제어 흐름 구조, 어노테이션 및 기타 구문 단위를 인식합니다. 포맷터는 AST를 순회하며 Google Java Style 같은 스타일 가이드에 따라 코드를 재생성합니다. 블록 깊이에 따라 들여쓰기가 증가하고, 줄 너비는 100열로 제한되며, 연산자 양쪽에 공백이 오고, 쉼표 뒤에 공백이 오며, 여는 중괄호는 같은 줄에 위치합니다(K&R 스타일). 어노테이션 처리는 Java 포맷팅의 특수한 경우입니다. 단일 어노테이션은 메서드와 같은 줄에 머물고, 더 긴 어노테이션 목록은 파라미터에 맞춰 줄바꿈되어 각 어노테이션이 독립된 줄에 위치합니다.

  • 어휘 분석: 50개의 Java 키워드, 식별자, 리터럴, 연산자, 주석을 인식하고 토큰 스트림을 출력합니다.
  • AST 구축: JLS 규칙에 따라 AST를 구축하고, 클래스, 메서드, 제어 흐름, 람다, try-with-resources를 올바르게 처리합니다.
  • 들여쓰기 규칙: Google 스타일은 기본적으로 레벨당 4칸을 사용하며, 100열 줄 너비를 적용합니다. 제한을 초과하는 줄은 자동으로 줄바뀝니다.
  • 줄바꿈 전략: 긴 메서드 체인, 파라미터 목록, 어노테이션은 쉼표나 점에서 줄바꿈되며, 연속 줄은 이전 줄의 첫 문자에 맞춰 정렬됩니다.
  • 어노테이션 처리: 단일 어노테이션은 같은 줄에 머물고, 여러 어노테이션은 길이와 파라미터 정렬 규칙에 따라 한 줄 또는 줄당 하나로 결정됩니다.
  • 주석 보존: //와 /* */ 주석을 원래 위치에 유지하며, 압축 시 제거가 선택 사항입니다.

예시

클래스 정의 포맷팅

입력:  public class User{private Long id;private String name;public User(Long id,String name){this.id=id;this.name=name;}}
출력:
public class User {
  private Long id;
  private String name;

  public User(Long id, String name) {
    this.id = id;
    this.name = name;
  }
}

메서드 체인 포맷팅

입력:  List<String> result=list.stream().filter(s->s.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());
출력:
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());

어노테이션 줄바꿈

입력:  @Override public ResponseEntity<User> getUser(@PathVariable Long id,@RequestParam(defaultValue="10") int size){...}
출력:
@Override
public ResponseEntity<User> getUser(
    @PathVariable Long id,
    @RequestParam(defaultValue = "10") int size) {
  ...
}

자주 묻는 질문

어떤 Java 스타일을 사용하나요?

기본값은 보통 Google Java Style 또는 Sun/Oracle 관례입니다. 4칸 들여쓰기, K&R 중괄호 스타일, 100자 줄 폭이 일반적입니다. 일부 빌드는 스타일 전환 옵션을 제공합니다. 어떤 스타일 가이드든 세부 규칙은 미묘하므로, 포매터를 실행하고 결과를 확인한 뒤 설정을 고정하세요.

최신 Java 문법도 인식하나요?

파서 버전에 따라 다릅니다. record, sealed 클래스, switch 표현식, 텍스트 블록, 패턴 매칭은 비교적 최근에 추가된 기능이라 구버전 파서는 처리하지 못할 수 있습니다. 코드를 짧게 시도해 보세요. 깔끔하게 포매팅되면 문제없고, 오류가 나면 파서 버전을 확인하면 됩니다.

import 정리나 미사용 변수 제거도 해주나요?

아니요. 포매팅은 공백과 중괄호 위치만 변경합니다. import 정리, 미사용 항목 제거 같은 정적 분석은 실제 IDE나 google-java-format(--skip-removing-unused-imports를 끈 상태)과 같은 도구가 필요합니다.

소스 코드가 업로드되나요?

아니요. 포매팅은 JS 기반 Java 파서를 통해 브라우저에서 실행되며 코드는 전송되지 않습니다. 다만 사내 보안 정책상 어떤 웹 도구에도 코드를 노출할 수 없다면 비공개 코드는 붙여 넣지 마세요.

결과가 IntelliJ나 Eclipse와 동일한가요?

정확히 일치하지 않을 가능성이 큽니다. 각 IDE는 수천 개의 옵션을 가진 자체 포매터를 사용합니다. 이 도구는 임시 포매팅용이며, 팀 전체의 일관성을 원한다면 빌드에 연결된 google-java-format이나 Spotless 같은 CI 강제 도구를 사용하세요.

Java 코드를 압축(minify)할 수 있나요?

Java는 컴파일 언어이므로 JS와 같은 의미의 minification은 적용되지 않습니다. 클래스 파일 최적화는 빌드 시 컴파일러나 ProGuard가 담당합니다. 본 페이지는 소스 수준 포매팅 전용입니다.

코드에 빈 줄이 추가되는 이유는 뭔가요?

많은 스타일 가이드는 클래스 멤버 사이나 메서드 사이에 빈 줄을 요구합니다. 포매터가 이 규칙을 따르려고 빈 줄을 삽입하는 것입니다. 더 압축된 코드를 원한다면 해당 스타일 옵션을 직접 조정하세요.