Skip to content

Naramal.Josa

SteamB23 edited this page Jul 31, 2020 · 6 revisions

개요

조사를 문자열 포맷에 맞게 변환해주는 포맷 제공자입니다. 기본적으로 조사라고 칭하고 있으나 비슷한 규칙을 따르는 접미사들도 사용 가능합니다.

이것은 text(이/)다.
text(은/는) 맛있다.
text(와/과) 밥을 먹었다.
그건 text(이에/예)요.

text = 소시지
이것은 소시지다.
소시지는 맛있다.
소시지와 밥을 먹었다.
그건 소시지예요.

text = 미역국
이것은 미역국이다.
미역국은 맛있다.
미역국과 밥을 먹었다.
그건 미역국이에요.

특수 규칙으로, '으로'의 경우 받침이 ㄹ이거나 없으면 '로'로 변화합니다.

나는 text(으로/로)간다.

text = 원주
나는 원주로 간다.

text = 부산
나는 부산으로 간다.

text = 서울
나는 서울로 간다.

일반 사용법

포맷 문자열에 받침있을때/받침없을때로 구분하여 사용하시면 됩니다.

한국어에서 받침이 없는 '소시지', 받침이 있는 '미역국'이라는 단어가 있을 때 문장은 다음과 같이 변화합니다.

Interpolation 메서드 / 문자열 보간

가장 권장되는 사용법이며 다음과 같이 사용 가능합니다.

Josa.Interpolation($"이것은 {text:이/}다.");
Josa.Interpolation($"{text:은/는} 맛있다.");
Josa.Interpolation($"{text:과/와} 밥을 먹었다.");
Josa.Interpolation($"그건 {text:이에/예}요.");
Josa.Interpolation($"나는 {text:으로/로} 간다.");

Format 메서드 / 서식 문자열

문자열 보간과 사용법은 비슷합니다. 다만 전통적인 서식 문자열 방식입니다.

주의

Josa.Format에서 문자열 보간을 사용하면 컴파일러 규칙에 따라 조사가 처리 되지 않을 수 있습니다. 필요한 경우 Josa.Interpolation 메서드를 사용하시기 바랍니다.

Josa.Format("이것은 {0:이/}다.", text);
Josa.Format("{0:은/는} 맛있다.", text);
Josa.Format("{0:과/와} 밥을 먹었다.", text);
Josa.Format("그건 {0:이에/예}요.", text);
Josa.Format("나는 {0:으로/로} 간다.", text);

특수 사용법

문화권 지정

특정 문화권의 날짜 및 숫자 서식을 사용해야하면 Josa 클래스 인스턴스 생성시 CultureInfo 형식의 참조를 넘겨주면됩니다.

var josaCulture = new Josa(CultureInfo.CurrentCulture);

josaCulture.Interpolation($"{text:은/는} {now}에 수확되었습니다.");

인스턴스를 유지할 필요가 없다면 다음과 같이 사용가능합니다. 메서드 내부에서 인스턴스를 생성한 뒤 폐기하므로 참고하세요.

Josa.Interpolation(CultureInfo.CurrentCulture, $"{text:은/는} {now}에 수확되었습니다.");

수동 방식

비효율적인 방법이지만 필요한 경우 사용할 수 있도록 기술하였습니다. 별다른 이유가 없다면 일반적인 서식 문자열이나 문자열 보간을 사용하시는 것을 추천합니다. Interpolation 메서드나 Format 메서드는 내부적으로 Process 메서드를 사용하며 그 내부에서는 Select 메서드를 호출해 결합될 조사/접미사를 선택합니다.

"이것은" + Josa.Process(text, "이/") + "다.";
Josa.Process(text, "은/는") + "맛있다.";
Josa.Process(text, "과/와") + "밥을 먹었다.";
"그건 " + Josa.Process(text, "이에/예") + "요.";
"나는 " + Josa.Process(text, "으로/로") + " 간다.";

"이것은" + text + Josa.Select(text, "이/") + "다.";
text + Josa.Select(text, "은/는") + "맛있다.";
text + Josa.Select(text, "과/와") + "밥을 먹었다.";
"그건 " + text + Josa.Select(text, "이에/예") + "요.";
"나는 " + text + Josa.Select(text, "으로/로") + " 간다.";