이 글에서는 JavaScript를 사용해 임의의 문자열을 모스 부호(Morse Code)로 변환하는 방법을 단계별로 소개합니다.
모스 부호란 무엇인가?
모스 부호는 전기 통신에서 텍스트 문자를 점(dot)과 대시(dash)라고 불리는 두 가지 신호 길이의 표준화된 조합으로 인코딩하는 방식입니다. 짧은 점과 긴 대시의 나열로 알파벳과 숫자를 표현하며, 오랫동안 무선 통신 분야의 핵심 소통 수단으로 활용되어 왔습니다.
특정 문자열을 모스 부호로 변환하는 함수를 만들려면 먼저 모든 영어 알파벳을 해당 모스 부호에 매핑하는 객체가 필요합니다. 이 맵을 준비해 두면 문자열을 한 글자씩 순회하며 새로운 문자열을 만들기만 하면 되므로 구현이 매우 간단합니다.
알파벳 → 모스 부호 매핑 객체
다음은 각 알파벳 대문자를 모스 부호에 대응시킨 객체입니다.
const morseCode = {
"A": ".-",
"B": "-...",
"C": "-.-.",
"D": "-..",
"E": ".",
"F": "..-.",
"G": "--.",
"H": "....",
"I": "..",
"J": ".---",
"K": "-.-",
"L": ".-..",
"M": "--",
"N": "-.",
"O": "---",
"P": ".--.",
"Q": "--.-",
"R": ".-.",
"S": "...",
"T": "-",
"U": "..-",
"V": "...-",
"W": ".--",
"X": "-..-",
"Y": "-.--",
"Z": "--.."
};
문자열을 모스 부호로 변환하는 함수
변환 로직은 생각보다 간단합니다. 문자열을 대문자로 바꾼 뒤 한 글자씩 분리하고(split), 각 글자를 모스 부호로 치환한 다음(map), 마지막으로 다시 하나의 문자열로 합치면(join) 됩니다.
매핑 객체에 존재하지 않는 문자(예: 공백, 숫자, 특수문자)는 삼항 연산자에 의해 원래 문자 그대로 유지되므로 단어 사이의 공백도 자연스럽게 보존됩니다.
const convertToMorse = (str) => {
return str.toUpperCase().split("").map(el => {
return morseCode[el] ? morseCode[el] : el;
}).join("");
};
console.log(convertToMorse('Disaster management'));
console.log(convertToMorse('hey there!'));
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
-........-...-..-. --.-..--.--.-.- ....-.-- -......-..!
이처럼 매핑 객체와 기본 배열 메서드만 활용하면 별도의 라이브러리 없이도 문자열을 모스 부호로 손쉽게 변환할 수 있습니다. 필요하다면 숫자나 문장부호에 대한 모스 부호를 매핑 객체에 추가해 기능을 확장할 수도 있습니다.