멋쟁이 사자처럼

[종합 프로젝트] 엔티티명을 Character 로 하면 안되는 이유

sunm2n 2025. 8. 11. 12:01

개발 중 엔티티의 필드명은 자바 표기법 (CamelCase)이고 키로 쓰는 문자열은 snake_case라서 변환해주는 메서드를 만들었다.

 

private String camelToSnake(String s) {
    StringBuilder out = new StringBuilder();
    for (char c : s.toCharArray()) {
        if (Character.isUpperCase(c)) {
            out.append('_').append(Character.toLowerCase(c));
        } else {
            out.append(c);
        }
    }
    return out.toString();
}

 

 

그랬더니 아래와 같은 오류가 떴다.

 

Cannot resolve method 'isUpperCase' in 'Character'

 

뭐지?

 

 

원인은 다음과 같았다.

 

 

import org.com.dungeontalk.domain.character.entity.Character;​

 

 

엔티티명을 Character 로 지정해버리는 큰 실수를 저질렀다.

 

 

Character 로 하면 안되는 이유

 

Java 표준 클래스 java.lang.Character와 이름이 충돌.

PostgreSQL에서 character는 타입 키워드라 테이블명과도 충돌(큰따옴표 필요)

 

 

이제 나는 어떻게 고칠지 고민을 해야한다.

 

 

 

 

 

방법 1 — java.lang.Character를 전체 경로로 사용

 

if (java.lang.Character.isUpperCase(c)) {
        out.append('_').append(java.lang.Character.toLowerCase(c));
        } else {
        out.append(c);
}

 

 

방법 2 — 엔티티 클래스 이름 변경

 

Character는 자바 표준 클래스(java.lang.Character)와 이름이 충돌하므로

엔티티 이름을 GameCharacter, PlayerCharacter 로 변경을 한다.

 

 

 

 

방법 3 — 정적 import

import static java.lang.Character.isUpperCase;
import static java.lang.Character.toLowerCase;

 

그 다음에

if (isUpperCase(c)) {
        out.append('_').append(toLowerCase(c));
        } else {
        out.append(c);
}

 

 

다음부터는 이런 실수를 하지 말자