C#에서는 외부 프로세스에 아규먼트(명령줄 인자)를 전달할 때 크게 두 가지 방식을 안내해드릴게요.
- 한 줄의 문자열로 인자를 구성하여 전달하는 방법
- 배열 형태로 개별 인자를 나눠서 처리하는 방법
아래에서는 각각의 방식으로 "BEOMSANG", "BEOM SANG" 등 다양한 형태의 데이터를 전달하는 방법을 소개해드리겠습니다.
1. 한 줄로 인자 전달하기
코드 예제
한 줄로 전달할 때는 공백과 특수 문자를 고려하여, 큰따옴표(")로 공백이 포함된 값을 묶어야 해요.
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "MyApp.exe",
Arguments = "\"BEOMSANG\" \"BEOM SANG\" \"\""
};
Process process = new Process
{
StartInfo = startInfo
};
process.Start();
결과
Main(string[] args)에서 배열 형태로 접근할 수 있으며, args 배열의 내용은 다음과 같이요.
args[0] == "BEOMSANG"args[1] == "BEOM SANG"args[2] == ""(빈 문자열)
2. 배열 형식으로 전달하기
C#에서는 배열로 개별 인자를 명확하게 나눈 뒤 처리할 수도 있습니다. 이 방식은 동적으로 많은 인자를 처리하거나 복잡한 구조를 다룰 때 유용해요.
코드 예제
string[] arguments = { "BEOMSANG", "BEOM SANG", "" };
// 배열을 한 줄로 변환
string argumentString = string.Join(" ", arguments.Select(arg => $"\"{arg}\""));
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "MyApp.exe",
Arguments = argumentString
};
Process process = new Process
{
StartInfo = startInfo
};
process.Start();
결과
위 코드는 배열 형태로 각 인자를 명시적으로 설정하고, 한 줄의 문자열로 변환하여 전달합니다. 결과는 한 줄로 전달했을 때와 동일해요.
args[0] == "BEOMSANG"args[1] == "BEOM SANG"args[2] == ""
3. Main(string[] args)에서 처리
외부 프로세스의 Main 메서드에서 전달받은 인자를 출력하는 코드
static void Main(string[] args)
{
Console.WriteLine("Received Arguments:");
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine($"Argument {i}: {(args[i] == "" ? "(Empty String)" : args[i])}");
}
}
출력 결과
한 줄로 전달하거나 배열로 처리한 경우 모두 동일한 결과를 출력해요.
Received Arguments:
Argument 0: BEOMSANG
Argument 1: BEOM SANG
Argument 2: (Empty String)
4. 한 줄 vs 배열 방식의 비교
| 항목 | 한 줄로 전달 | 배열로 처리 |
|---|---|---|
| 코드 가독성 | 단순한 경우 적합. 긴 인자는 복잡해질 수 있음. | 동적 인자 생성 시 적합하며, 가독성이 좋음. |
| 동적 처리 | 수동으로 문자열 조합 필요. | 배열 조작이 편리하여 동적 데이터 처리에 유리. |
| 공백 처리 | 수동으로 큰따옴표를 추가해야 함. | 자동으로 큰따옴표를 추가할 수 있어 실수가 줄어듦. |
| 유지보수 | 변경 시 문자열 수정 필요. | 추가/삭제가 간단하며 유지보수에 용이. |
5. Empty String 처리 유의점
- 빈 문자열(
"")은 명시적으로 따옴표로 전달해야 프로세스에서 무시되지 않고 인자로 인식합니다. null값은 전달되지 않으므로, 빈 값을 전달하려면 반드시""를 포함해야 해요.
요약
- 한 줄로 전달: 간단한 경우에 적합하며,
Arguments를 명시적으로 작성하세요.
예:Arguments = "\"BEOMSANG\" \"BEOM SANG\" \"\"" - 배열로 처리: 많은 인자를 동적으로 생성하거나 다룰 때 적합하며, 유지보수가 쉽습니다.
예:string[] arguments = { "BEOMSANG", "BEOM SANG", "" };
어떤 방식을 선택하든 프로세스 간 데이터 전달을 수행할 수 있습니다. 😊
