- 한글/영어 문자를 모스부호로 변환시켜주는 서비스
- 2024.03.10 - 2024.04.08 (4주)
- 한글과 영어를 모스코드로 변환해보기
- 한/영 모스코드 변환
- 모스코드 라이트/진동/소리 작동
- 모스코드 표 조회
- 버전 정보
- iOS 16.0 이상
- 라이브러리 및 프레임워크
UIKitCombineSnapkitFastlane
| 한글 모스코드 변환 | 영어 모스코드 변환 |
|
|
| 모스코드 재생 | 모스코드 표 조회 |
|
|
- 한글을 모스부호로 변환하면서 겪은 문제
영어와 달리 한글은 자음, 모음 한 개가 의미를 가지지 않는 특성이 있다.
한글을 모스부호로 변환하기 위해서는 자음, 모음 한 개를 각각 따로 변환 시켜야 하는 상황이 생겼다.
“안”을 각각 “ㅇ”, “ㅏ”, “ㄴ” 으로 분리하여, 모스부호로 변환을 시켜야 한다.
- “안” 과 같은 단어를 초성, 중성, 종성 으로 분리시켜야 했다.
func translateKoreanToUtf(at message: String) -> [Int] {
var answer = [Int]()
var index = 0
for i in message.utf16 {
index = Int(i)
let cho = ((index - 0xAC00) / 28) / 21 // 초성
answer.append(cho)
let jung = ((index - 0xAC00) / 28) % 21 // 중성
answer.append(jung)
let jong = (index - 0xAC00) % 28 - 1 // 종성
answer.append(jong)
}
return answer
}- 변환된 Int 배열을 For 문을 사용하여 한글 모스부호 리스트와 맞는 것을 찾아 나간다.
func checkKoreanSingleCharacter(input: String) -> String {
let koreanText = input.split(separator: "").joined()
var answer = ""
for i in koreanText.enumerated() {
let utfList = translateKoreanToUtf(at: i.element.description)
let x = utfList[0] >= 0
let y = utfList[1] >= 0
let z = utfList[2] >= 0
answer += x ? morseList[0][utfList[0]].morseCode : ""
answer += y ? morseList[1][utfList[1]].morseCode : ""
answer += z ? morseList[2][utfList[2]].morseCode : ""
if i.offset < koreanText.count - 1 {
answer += " "
}
else if i.element == "\\n" {
answer += "\\n"
}
else {
answer += ""
}
}
return answer
}- 1,2 과정을 실행한 결과, 정상적으로 변환된 모스부호들이 나왔다.
“안”, “아” 와 같은 단어들은 정상적으로 출력이 되었다. 그러나 “ㅇ”, “ㅏ”, “ㄴ” 과 같은 하나의 자음 또는 모음만 입력했을 때는 실패 값을 내보내는 것이다.
checkKoreanSingleCharacter메서드를 다시 살펴 보았다.
func checkKoreanSingleCharacter(input: String) -> String {
let koreanText = input.split(separator: "").joined()
var answer = ""
for i in koreanText.enumerated() {
let utfList = translateKoreanToUtf(at: i.element.description)
let x = utfList[0] >= 0
let y = utfList[1] >= 0
let z = utfList[2] >= 0
answer += x ? morseList[0][utfList[0]].morseCode : ""
answer += y ? morseList[1][utfList[1]].morseCode : ""
answer += z ? morseList[2][utfList[2]].morseCode : ""
if i.offset < koreanText.count - 1 {
answer += " "
}
else if i.element == "\\n" {
answer += "\\n"
}
else {
answer += ""
}
}
return answer
}- 살펴 본 결과, “ㅇ”, “ㅏ”, “ㄴ” 처럼 하나의 자음, 모음만 입력받으면 x, y, z 변수들이 한글 모스부호 리스트에서 값을 찾지 못하는 것을 확인하였다. 그래서 예외 케이스에 대응할 수 있는 코드를 만들었다.
if x == false, y == false, z == false {
// zip 으로 x, y만 검사한 이유는 종성만 따로 쓸 수가 없기 때문이다.
for d in zip(morseList[0], morseList[1]) {
if d.0.alphabetName == i.element.description {
answer += d.0.morseCode
}
else if d.1.alphabetName == i.element.description {
answer += d.1.morseCode
}
}
}“안”, “ㅇ” 과 같은 입력들을 정상적으로 모스부호로 변환시켰다.



