toUpperCase / toLowerCase

JayJi·2026년 4월 24일

알고리즘

목록 보기
1/30

관련 문제

문제난이도핵심
시저 암호Lv.1대소문자 변환 응용
같은 숫자는 싫어Lv.1문자열 처리 기초
문자열 내 마음대로 정렬하기Lv.1대소문자 무시 정렬

1. 개념

toUpperCase()toLowerCase()문자열의 모든 알파벳을 대문자 또는 소문자로 변환하는 메서드다.

String s = "Hello World";
System.out.println(s.toUpperCase());  // HELLO WORLD
System.out.println(s.toLowerCase());  // hello world

알파벳이 아닌 문자(숫자, 공백, 특수문자)는 그대로 유지된다.


2. 동작 과정

toUpperCase() — "Hello" 변환

문자ASCII (원본)변환 결과ASCII (변환)
H72 (이미 대문자)H72
e101E69
l108L76
l108L76
o111O79

소문자와 대문자의 ASCII 차이는 항상 32다. toLowerCase()는 반대로 32를 더한다.


3. 핵심 사용 패턴

대소문자 무시 비교

알고리즘 문제에서 가장 자주 쓰이는 패턴이다.

String a = "Hello";
String b = "hElLo";

// ❌ 틀린 방법
a.equals(b);             // false — 대소문자 구분

// ✅ 올바른 방법 1
a.equalsIgnoreCase(b);   // true

// ✅ 올바른 방법 2
a.toLowerCase().equals(b.toLowerCase());  // true

문자 단위 변환

Character 클래스를 활용하면 문자 하나씩 변환할 수 있다.

char c = 'a';
Character.toUpperCase(c);  // 'A'
Character.toLowerCase(c);  // 'a'

// 대소문자 판별
Character.isUpperCase(c);  // false
Character.isLowerCase(c);  // true

4. 핵심 포인트 2가지

원본 문자열은 변하지 않는다

Java의 String은 불변(Immutable) 이기 때문에 반환값을 반드시 받아야 한다.

String s = "hello";
s.toUpperCase();          // ❌ 아무 효과 없음 — 반환값을 버림
s = s.toUpperCase();      // ✅ 올바른 사용

Locale에 따라 결과가 달라질 수 있다

일부 언어(예: 터키어)는 i → I 변환이 다르게 동작한다. 알고리즘 문제에선 대부분 영어만 다루므로 무시해도 되지만, 실무에서는 toUpperCase(Locale.ROOT)를 쓰는 것이 안전하다.

// 알고리즘 문제용 (영어만 다룰 때)
s.toUpperCase();

// 실무용 (언어 독립적)
s.toUpperCase(Locale.ROOT);

5. 시간복잡도

메서드시간복잡도비고
toUpperCase()O(N)문자열 전체 순회
toLowerCase()O(N)문자열 전체 순회
equalsIgnoreCase()O(N)내부적으로 toLowerCase 후 비교
Character.toUpperCase()O(1)문자 1개만 처리

6. 주의사항

  • 반환값을 반드시 저장해라. s.toUpperCase()만 호출하고 결과를 버리는 실수가 잦다.
  • 비교할 때는 둘 다 변환해라. a.toLowerCase()b를 비교하면 b에 대문자가 섞여 있을 때 틀린다. 둘 다 변환하거나 equalsIgnoreCase()를 써라.
  • 숫자와 특수문자는 변환되지 않는다. "abc123".toUpperCase()"ABC123"이 된다.
  • char 배열 처리 시 Character 클래스를 활용해라. 'a' - 32처럼 ASCII 연산으로 직접 변환하는 것도 가능하지만, 가독성이 떨어지고 실수하기 쉽다.
profile
Java와 SpringBoot를 이용한 백엔드 개발자가 되려고 합니다.

0개의 댓글