새로운(?) 자바 코딩법을 소개합니다
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0020\u0020\u0020\u0020
\u0048\u0065\u006c\u006c\u006f\u0057\u006f\u0072\u006c\u0064
\u0020\u007b\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u000d
\u000a\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0020\u0020
\u0020\u0076\u006f\u0069\u0064\u0020\u0020\u0020\u0020\u0020
\u0020\u006d\u0061\u0069\u006e\u0028\u0020\u0020\u0020\u0020
\u0020\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020
\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0020\u0020
\u000d\u000a\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u0020
\u0020\u0020\u006f\u0075\u0074\u002e\u0020\u0020\u0020\u0020
\u0020\u0020\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028
\u0020\u0020\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0022
\u002b\u0020\u0022\u0057\u006f\u0072\u006c\u0064\u0021\u0022
\u0020\u0020\u0029\u003b\u0020\u0020\u0020\u0020\u0020\u0020
\u0020\u000d\u000a\u007d\u000d\u000a\u007d\u000d\u000a\u0020
무슨 코드일까? 실행시켜보면 안다 ;)
Can It Be True?
Code

Result

Why? What the hell is wrong with that?

The red one is actually 'L', which means the result is gonna be 155L. I strongly recommend using L instead of l when you represent a number which is a type of Long.
한글 음절(syllable) 다루기
서론
음절은 하나 또는 그 이상의 말소리로 이루어져 독자적으로 발음되는 가장 작은 단위이다. 또 다른 말로는 '소리마디', 영어로는 syllable 이라고 한다. 한글의 음절은 초성, 중성, 종성으로 이루어진다. 초성과 중성은 반드시 있어야 하지만 종성은 없어도 음절을 구성하는데 지장이 없다. 더 자세히 들어가면 나의 국문학적 무지가 탄로날지도 모르니 서론은 여기서 그만 하도록 하겠다.
본론
간단하게 음절을 다루는 클래스, Syllable 을 작성하기로 했다. 내부적으로 초성, 중성, 종성을 분리하여 저장하고 있으며, 몇 가지 편리한 메소드를 제공한다.
Syllable 클래스를 작성하기 시작한지 얼마 지나지 않아서 문제에 봉착하게 되었다. 키보드에서 'ㄱ' 을 눌러서 타이핑된 글자의 코드는 0x3131 이지만, unicode specifications 에 나와있는 초성의 'ㄱ'은 0x1100, 종성의 'ㄱ'은 0x11A8 이다. 이 문제를 해결하기 위해 외부적으로는 0x3131 과 0x1100 이 모두 허용되도록 하고, 내부적으로는 specifications 에 나와있는 코드를 쓰기로 결정했다.
음절을 만드는 방법은 다음의 3가지가 있다.
방법 1
빈 음절 인스턴스를 만든 후, 초성, 중성, 종성을 따로 집어넣는다.
Syllable s1 = new Syllable();
s1.setChoSeong('ㅂ');
s1.setJungSeong('ㅡ');
s1.setJongSeong('ㄹ');
방법 2
방법 1과 비슷하다. 단지 생성자가 그 일을 대신할 뿐이다.
Syllable s2 = new Syllable('ㄹ', 'ㅗ');
방법 3
마지막으로, 생성자에 완전한 음절을 집어넣는 방법이 있다.
Syllable s3 = new Syllable('그');
예제
System.out.print(s1);
System.out.print(s2);
System.out.print(s3);
실행 결과는
블로그
전체 코드를 공개하면 좋겠지만, 안타깝게도 Syllable 클래스의 소스코드는 당분간 공개하지 않기로 결정했다. 대신, 프로토타입 정도는 공개한다.
public class Syllable {
private char choSeong;
private char jungSeong;
private char jongSeong;
public Syllable();
public Syllable(char syllable);
public Syllable(char choSeong, char jungSeong);
public Syllable(char choSeong, char jungSeong, char jongSeong);
public void setChoSeong(char choSeong);
public char getChoSeong();
public void setJungSeong(char jungSeong);
public char getJungSeong();
public void setJongSeong(char jongSeong);
public char getJongSeong();
public String toString();
public static boolean isSyllable(char character);
public static char[] split(char syllable);
public static char build(char choSeong, char jungSeong, char jongSeong);
}
참고 자료
- 유니코드 (구원의 여신 등장?)
- http://en.wikipedia.org/wiki/Hangul
- http://www.unicode.org/charts/PDF/U1100.pdf
- http://www.unicode.org/charts/PDF/UAC00.pdf