본문 바로가기
C#

c# ReplaceFirst - 확장메서드로 직접 만들어서 사용해보기

by ZEC 2021. 1. 25.

c# ReplaceFirst 확장 메서드로 직접 구현하기


안녕하세요:)

오늘은 c#에서 지원하지 않는 ReplaceFirst를 확장 메서드로 직접 만들어서 사용해보도록 하겠습니다.

우선 c#에서 기본적으로 제공하는 Replace는 java에서의 ReplaceAll의 역할을 하고 있어서

아래 date 변수의 "날짜 : 2021:01:25, 시간 : 00:00:00"의 값을 Replace를 사용하여 ":" 콜론을 치환하면

결과는 > "날짜  20210125, 시간  000000" 다음과 같이 바뀌겠죠?

java나 다른 언어에서는 ReplaceFirst를 기본적으로 제공하는 경우가 많습니다.

하지만 c#은 그렇지 않습니다. 하지만 확장 메서드라는 기능을 제공하고 있는데요

먼저 확장 메서드가 뭔지부터 알아보도록 하죠!

 

var date = "날짜 : 2021:01:25, 시간 : 00:00:00";
var replace = date.Replace(":", string.Empty);

확장 메서드(Extension Method)

확장 메서드는  c# 3.0부터 지원을 하는 메서드입니다. (아래 MSDN 링크를 남겨드렸으니 참고 바랍니다)

그리고 특수한 종류의 static메서드이고요, 확장 메서드를 이용한다면 기존 형식의 코드를

변경하지 않고 내 코드에서 어떤 형식이던지 메서드를 확장시킬 수 있습니다!

 

확장 메서드 - C# 프로그래밍 가이드

C#에서 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 추가할 수 있습니다.

docs.microsoft.com

확장 메서드(Extension Method) 사용조건

확장 메서드(ExtensionMethod)를 사용할 때 꼭 지켜야 할 조건이 있습니다.

  • 확장 메서드를 가진 클래스는 반드시 static class 이어야 합니다.
  • 확장 메서드는 static 메서드 이어야 합니다.
  • 확장 메서드의 첫 번째 파라미터에는 this 지시어가 들어가야 합니다.

저는 ExtensionsTest라는 static 클래스에 ReplaceFirst라는 static 메서드를 만들었습니다.

 

    public static class ExtensionsTest
    {
        public static string ReplaceFirst(this string source, string find, string replace)
        {
            int index = source.IndexOf(find);
            return index < 0 ? source : source.Substring(0, index) + replace + source.Substring(index + find.Length);
        }
    }

 

바로 한번 사용을 해볼까요?

아래 사진과 같이 확장 메서드를 추가한 이후에 ReplaceFirst라는 확장 메서드가 생긴 걸 확인할 수 있습니다.

 

 

 

 

            var date = "날짜 : 2021:01:25, 시간 : 00:00:00";
            var replace = date.Replace(":", string.Empty);
            var replaceFirst = date.ReplaceFirst(":", string.Empty);

            Console.WriteLine($"date = {date}");
            Console.WriteLine($"replace = {replace}");
            Console.WriteLine($"replaceFirst = {replaceFirst}");

 

결과는 어떨까요?

정말 재밌지 않나요? 맨 앞에 있는 날짜의 옆 ":" 콜론만 치환된 걸 확인할 수 있습니다. 

 

 

 

 

댓글