C#으로 개발하다 보면 특정 문자나 문자열을 지정한 횟수만큼 반복해야 하는 경우가 자주 있습니다. 예를 들어 구분선을 만들거나, 문자열 패딩을 처리하거나, 테스트 데이터를 생성할 때 유용하게 활용됩니다. 이 글에서는 가장 널리 사용되는 세 가지 방법을 코드 예제와 함께 정리했습니다.
- string 생성자 –
new string(charToRepeat, 5): 단일 문자를 반복할 때 가장 간단하고 빠릅니다. - string.Concat + Enumerable.Repeat –
string.Concat(Enumerable.Repeat(charToRepeat, 5)): LINQ 스타일로 반복 시퀀스를 생성합니다. - StringBuilder – 반복문과 함께 사용 : 반복 횟수가 크거나 로직이 복잡할 때 성능상 유리합니다.
1. string 생성자 사용하기
string 생성자는 문자(char)와 반복 횟수를 인자로 받아, 해당 문자를 지정한 횟수만큼 반복한 새 문자열을 반환합니다.
예제
using System;
namespace DemoApplication {
public class Program {
static void Main(string[] args) {
string myString = "Hi";
Console.WriteLine($"String: {myString}");
char charToRepeat = '!';
Console.WriteLine($"Character to repeat: {charToRepeat}");
string repeatedString = new string(charToRepeat, 5);
Console.WriteLine($"Repeated String: {myString}{repeatedString}");
Console.ReadLine();
}
}
}출력 결과
String: Hi Character to repeat: ! Repeated String: Hi!!!!!
위 예제에서는 new string(charToRepeat, 5)를 사용하여 문자 '!'를 5번 반복했습니다. 단일 문자를 반복할 때는 별도의 네임스페이스 참조 없이 가장 직관적이고 효율적으로 처리할 수 있습니다.
2. string.Concat과 Enumerable.Repeat 사용하기
System.Linq 네임스페이스의 Enumerable.Repeat 메서드는 지정한 값을 원하는 횟수만큼 반복하는 시퀀스를 생성합니다. 이를 string.Concat과 함께 사용하면 문자 시퀀스를 하나의 문자열로 합칠 수 있습니다.
예제
using System;
using System.Linq;
namespace DemoApplication {
public class Program {
static void Main(string[] args) {
string myString = "Hi";
Console.WriteLine($"String: {myString}");
char charToRepeat = '!';
Console.WriteLine($"Character to repeat: {charToRepeat}");
var repeatedString = string.Concat(Enumerable.Repeat(charToRepeat, 5));
Console.WriteLine($"Repeated String: {myString}{repeatedString}");
Console.ReadLine();
}
}
}출력 결과
String: Hi Character to repeat: ! Repeated String: Hi!!!!!
위 예제에서는 string.Concat(Enumerable.Repeat(charToRepeat, 5))를 사용하여 문자 '!'를 5번 반복했습니다. LINQ에 익숙한 개발자라면 선언형 스타일로 작성할 수 있어 코드 가독성이 좋다는 장점이 있습니다.
3. StringBuilder 사용하기
StringBuilder를 사용하면 반복할 문자열의 길이를 미리 계산해 초기 용량을 설정한 뒤, 반복문으로 문자열을 추가하는 방식으로 처리할 수 있습니다. 불필요한 문자열 재할당을 줄여주기 때문에 반복 횟수가 많을 때 특히 유리합니다.
예제
using System;
using System.Text;
namespace DemoApplication {
public class Program {
static void Main(string[] args) {
string myString = "Hi";
Console.WriteLine($"String: {myString}");
string stringToRepeat = "!";
Console.WriteLine($"String to repeat: {stringToRepeat}");
StringBuilder builder = new StringBuilder(stringToRepeat.Length * 5);
for (int i = 0; i < 5; i++) {
builder.Append(stringToRepeat);
}
string repeatedString = builder.ToString();
Console.WriteLine($"Repeated String: {myString}{repeatedString}");
Console.ReadLine();
}
}
}출력 결과
String: Hi Character to repeat: ! Repeated String: Hi!!!!!
위 예제에서는 먼저 반복할 문자열의 길이를 구한 후, for 반복문 안에서 Append 메서드로 문자열 "!"를 5번 추가했습니다. 마지막에는 ToString()을 호출하여 최종 문자열을 얻습니다.
어떤 방법을 선택해야 할까?
- 단일 문자 반복 :
new string(char, count)가 가장 간결하고 성능도 우수합니다. - 문자열 반복 또는 LINQ 선호 :
string.Concat(Enumerable.Repeat(...))조합이 읽기 쉽고 유연합니다. - 대용량·동적 반복 :
StringBuilder가 메모리 할당 측면에서 가장 효율적입니다.
상황에 맞는 방법을 선택하면 코드의 가독성과 성능을 모두 챙길 수 있습니다.