텍스트 뒤집기, 글자·단어·줄 뭐가 다를까

"텍스트를 뒤집는다"는 말은 사실 한 가지 동작이 아닙니다. 글자를 하나씩 뒤집는 것, 단어 순서를 뒤집는 것, 줄의 위아래 순서를 뒤집는 것 — 세 가지가 전혀 다른 결과를 냅니다.
원하는 모양이 안 나오는 대부분의 이유는 계산을 못 해서가 아니라 이 세 단위 중 엉뚱한 것을 골랐기 때문입니다. 이 글은 세 단위가 각각 무엇을 뒤집는지 예시로 비교하고, 이모지나 한글이 깨지지 않는 이유까지 정리합니다.
요약 ① 글자 단위는 문자를 하나씩, 단어 단위는 각 줄 안의 단어 순서만, 줄 단위는 줄의 위아래 순서만 뒤집습니다. ② 이모지·한글이 깨지지 않는 건 문자를 코드 유닛이 아니라 코드 포인트 단위로 읽어 뒤집기 때문입니다. ③ 결과가 기대와 다른 대부분의 원인은 글자 단위와 단어 단위를 혼동한 것입니다.
같은 문장인데 세 가지 답이 나옵니다
"안녕 하세요"를 뒤집는다고 해봅시다. SNS에 거꾸로 글씨를 올리고 싶은 사람도 있고, 단어 순서만 바꿔 문장을 재구성하려는 사람도 있습니다.
그런데 글자 단위로 뒤집으면 "요세하 녕안"이 나오고, 단어 단위로 뒤집으면 "하세요 안녕"이 나옵니다. 한 문장이 두 개의 완전히 다른 결과를 냅니다.
여기에 이모지까지 섞이면 문제가 하나 더 생깁니다. 방식을 잘못 쓰면 😀 같은 이모지가 뒤집는 순간 깨진 네모 상자로 변합니다. 왜 그런지, 그리고 어떻게 하면 안 깨지는지가 이 글의 핵심입니다.
도구 없이 직접 뒤집는 방법
세 가지 모두 손으로, 또는 짧은 코드로 할 수 있습니다. 원리를 알면 결과를 읽는 눈이 생깁니다.
글자 단위는 문장을 오른쪽 끝에서부터 한 글자씩 거꾸로 옮겨 적으면 됩니다. "안녕 하세요"라면 요·세·하·(공백)·녕·안 순서로 읽어 "요세하 녕안"이 됩니다. 공백도 하나의 글자로 취급돼 위치가 함께 뒤집힙니다.
단어 단위는 먼저 공백을 기준으로 단어를 나누고, 그 목록의 순서만 뒤집은 뒤 다시 공백으로 잇습니다. "안녕 / 하세요"를 "하세요 / 안녕"으로 바꿔 "하세요 안녕"이 됩니다. 글자 자체는 그대로이고 순서만 바뀝니다.
줄 단위는 줄에 번호를 매긴 뒤 마지막 줄부터 첫 줄 순서로 다시 적습니다. 각 줄 안의 내용은 손대지 않고, 줄의 위아래 순서만 뒤집힙니다.
코드로 처리할 때 이모지가 깨지는 이유
프로그래밍으로 글자 단위를 처리한다면 한 가지 함정이 있습니다. "문장".split("").reverse().join("") 방식은 문자를 UTF-16 코드 유닛 단위로 자릅니다. 이모지처럼 두 유닛(서로게이트 쌍)으로 이뤄진 문자는 반으로 쪼개져 순서가 뒤바뀌고, 결과적으로 깨진 문자가 됩니다.
대신 Array.from("문장").reverse().join("")처럼 코드 포인트 단위로 읽으면 이모지 한 글자를 통째로 하나의 요소로 다루기 때문에 뒤집어도 깨지지 않습니다. 이 도구도 바로 이 방식을 씁니다.
저희 도구로 확인하기.
설치·회원가입 없이 브라우저에서 바로 글자·단어·줄 단위로 텍스트를 뒤집습니다. 입력한 내용은 서버로 전송되지 않습니다.

헷갈리기 쉬운 부분 정리
가장 흔한 실수는 단어 순서만 바꾸고 싶은데 글자 단위를 선택하는 것입니다. 그러면 단어 안의 글자까지 전부 거꾸로 뒤집혀 읽을 수 없는 문자열이 나옵니다.
같은 입력 "안녕 하세요"를 세 단위로 각각 돌리면 차이가 한눈에 보입니다.
| 반전 단위 | 하는 일 | 결과 |
|---|---|---|
| 글자 단위 | 문자를 하나씩 거꾸로(공백 포함) | 요세하 녕안 |
| 단어 단위 | 각 줄 안 단어 순서만 뒤집음 | 하세요 안녕 |
| 줄 단위 | 줄의 위아래 순서만 뒤집음 | 안녕 하세요 (한 줄이라 그대로) |
단어 단위에서 공백과 줄바꿈이 그대로 남는 것도 이 원리 때문입니다. 이 도구의 단어 단위는 각 줄을 따로 처리해 줄 안의 단어 순서만 바꾸므로, 줄바꿈(엔터)은 위치가 유지되고 줄 순서도 바뀌지 않습니다. 줄의 순서까지 뒤집고 싶다면 줄 단위를 따로 골라야 합니다.
결과 아래에는 글자 수, 단어 수(공백으로 나눈 개수), 줄 수(줄바꿈으로 나눈 개수)가 함께 표시됩니다. 이 숫자는 반전 방식과 무관하게 입력 내용을 세는 값이라, 단위를 바꿔도 글자·단어·줄 수 자체는 달라지지 않습니다.
정리
- 텍스트 뒤집기는 하나의 동작이 아니라 글자·단어·줄 세 가지 단위로 나뉘고, 각각 결과가 다릅니다.
- 글자 단위는 공백을 포함해 문자를 하나씩, 단어 단위는 각 줄 안의 단어 순서만, 줄 단위는 줄의 위아래 순서만 뒤집습니다.
- 이모지·한글이 안 깨지는 건 문자를 코드 유닛이 아니라 코드 포인트 단위로 읽어 뒤집기 때문입니다.
- 원하는 결과가 안 나오면 십중팔구 글자 단위와 단어 단위를 혼동한 경우이니 단위부터 다시 확인하면 됩니다.
- 아래 숫자(글자·단어·줄 수)는 반전 방식과 무관하게 입력 내용을 세는 값입니다.
설치·회원가입 없이 브라우저에서 바로 글자·단어·줄 단위로 텍스트를 뒤집습니다. 입력한 내용은 서버로 전송되지 않습니다.
자주 묻는 질문
이모지나 한글도 깨지지 않고 뒤집히나요?
네. 자바스크립트 문자열은 UTF-16 코드 유닛의 나열이라, 이모지처럼 두 유닛으로 이뤄진 문자를 코드 유닛 단위로 자르면 반쪽이 갈라져 깨집니다. 이 도구는 코드 포인트 단위로 문자를 읽어 뒤집으므로 이모지 한 글자, 완성형 한글 한 글자가 통째로 보존됩니다. 다만 가족 이모지(👨👩👧)처럼 여러 문자가 결합기호로 이어진 경우는 각 조각이 깨지지는 않아도 조각들의 순서가 뒤집힐 수 있습니다.
글자 단위와 단어 단위는 뭐가 다른가요?
글자 단위는 공백을 포함해 문자를 하나씩 거꾸로 놓기 때문에 단어 안의 글자까지 뒤집힙니다. 단어 단위는 글자는 그대로 두고 단어의 나열 순서만 뒤집습니다. "I love you"를 예로 들면 글자 단위는 "uoy evol I", 단어 단위는 "you love I"가 됩니다.
여러 줄을 통째로 위아래만 뒤집으려면요?
줄 단위를 고르면 됩니다. 줄 단위는 각 줄 안의 내용은 그대로 두고 줄의 위아래 순서만 뒤집습니다. 반대로 단어 단위는 줄바꿈을 유지한 채 각 줄 안에서만 단어를 뒤집으므로, 목록의 순서 자체를 거꾸로 만들고 싶을 때는 줄 단위를 선택해야 합니다.
결과는 언제 나오고, 입력한 내용은 서버로 전송되나요?
실행 버튼이 따로 없습니다. 입력하거나 단위를 바꾸는 즉시 결과와 글자·단어·줄 통계가 다시 계산됩니다. 모든 처리는 브라우저 안에서만 이뤄지며 입력한 내용은 서버로 전송되지 않습니다.
