필자가 처음 아희 발견한 것은 백준 알고리즘의 소스코드 제출에 등재된 언어 목록에서다. 처음엔 오타인가? 싶었지만 그럴리는 없었고 궁금해서 인터넷에 바로 검색했다. 오직 한글로만 작성할 수 있는 난해한 프로그래밍 언어다.





Hello, World!

발다빠빠따빠밪나파빠밣다빠밦다빠밪타빠밣다밣밤따밞밤따밣다빠밝타밪따빠밪타빠빠밝타밞밣따아멓희

아희의 기본적인, Hello, World! 구조다. 이 언어의 이름이 신기해서 찾아봤는데 구조가 더 말이 안됐다. 도대체 이게 어떻게 동작하는 것인지 궁금증이 생겼다. 필자의 머리로는 아희의 문법을 이해할 수 없었다.


자바스크립트 아희 처리기


위 웹페이지에서 한단계씩 돌려가며 프로그램의 흐름을 직접 관찰하기로 하였다. 연구할 대상은 1부터 입력값까지 덧셈을 실행하는 프로그램이다. 입력에 덧셈, 반복과정까지 거치는 만큼 한눈에 보기 쉬울거라 판단됐다.


삭받받타사붕
투터번벋썩뻐
삭다사빠아초
붸에엙희멍석


▼ 진지하게 공부중


공부하면서 알게된 사실들을 기록해 보자면,

먼저 알아야 할 사실은 아희는 C언어처럼 위에서 아래로 코드가 진행되는게 아니라 사용자가 설정한 방향으로 움직인다. 또한 아희에는 받침으로 구성된 스택, 큐 자료구조(간단히 생각하면 변수)가 있다.


가령, ‘삭받받타사붕’ 의 경우를 먼저 분석해 보자.

‘삭’ 의 ㅅ은 선택이다. ㄱ 변수를 선택하고, ㅏ 방향으로 진행한다.
‘받’ 의 ㅂ은 삽입이다. ㄷ 의 획수만큼의 숫자를 변수에 저장하고 ㅏ 방향으로 진행한다.
‘받’ ㄱ 변수에 3을 한번 더 삽입한 뒤 ㅏ 방향으로 진행된다.
‘타’ 의 ㅌ은 뺄셈을 의미한다. 스택에 있는 두 숫자를 뺄셈한 후 ㅏ 방향으로 진행된다.
‘붕’ 의 ㅂ은 입력을 의미하며, ㅇ은 숫자를 의미한다. 사용자에게 숫자를 입력받고 ㅜ 방향으로 진행된다.


이 한줄의 코드가 이제 이해가 되는가? 결국 ‘악’변수에는 0이 저장된다. 아희에서는 0과 1을 표현할 수 없어서 임의적으로 만들어야 하기때문에 작성된 코드라고 생각할 수 있다. 받받발발 혹은 밝밝밢밢으로 수정해도 문제없이 작동된다.


이외에 ㅃ은 복사를 의미하고 ㅆ은 이동이며 ㅊ은 조건문반복문으로 활용할 수 있는것 같은데 아직 여기까진 어떻게 응용해야할 지 모르겠다. 그외 연산에는 ㄷㄸㅌㄴㄹ가 있는데 각각 덧셈(ㄷ), 곱셈(ㄸ), 뺄셈(ㅌ), 나눗셈(ㄴ), 나머지(ㄹ)를 의미한다. ㅎ은 프로그램의 종료. ㅇ은 아무런 동작도 하지 않는다.

먼 여정이었다. 이제 본격적으로 “안녕,세상!”을 코딩해보았다.



드디어... 안녕

먼저 아희에서는 원하는 숫자를 바로 넣을 수 없다. 직접 만들어야한다. 안(50504), 녕(45387), 세(49464), 상(49345)의 숫자를 직접 만들어야 한다(글자들은 UTF-8코드로 표시된 것이다하지만 이 언어를 어제 처음 접한데다 원래부터 코딩머리가 좋진 않았으므로 효율없는 수작업을 수행했다.


▼ 완성된 코드

샆밚밚다빠따뿌두섞썪뻐썪뻐썪뻐썪뻐섳터섞썪
잉우석숱쎁뿌썿다다다받타샄빠싻샃빠싻삯불뽀
뿌섶노벅뽀떠뚜범더범벍섢떠범벓섡썬뻐터떠솥
쌐샄빠다빠두빠싼삱빠반따싻샃빠빠빠싻싼쑨쏚
뿌더섴쎀뻐섶유어어더터벅벋더터더선더터섟뽀
싹샃빠싹빠싹빠싹빠싹빠싹삭다다다다다밤다솤
숛멓섢멓섞멓석맣아희.
맣산맣삱받박타도

7-8행이 실질적인 출력부분 그 위 부분은 전부 숫자를 생산하는 부분이다.




아희가 정규적으로 사용되는 언어였다면 정말 볼 만 했을것 같다.


“3행에 ‘벍섢떠범’부분 ‘차숞떠떠’로 하는게 효율 좋지 않을까요?”

“오! 그러네 4행 ‘빠빠빠’도 고쳐주고 깃에 커밋남겨~”




▼ 코드 동작


생각보다 정말 재밌다. 특히 완성했을 때의 쾌감은 말로 이루 말할 수 없다. 나중에 백준 알고리즘 적어도 하나는 이걸로 풀어서 내봐야겠다. 쉬운걸로... ㅋ



WRITTEN BY

배진오

소비적인 일보단 생산적인 일을 추구하며, 좋아하는 일을 잘하고 싶어합니다 :D
im@baejino.com