본문 바로가기
프로그래밍/c#

c# 확장 메소드(Extension Method)?? 확장 메소드란 무엇인가? 사용방법과 예제

by 지나팩 2024. 11. 4.

C#의 확장 메소드(Extension Method)는 기존 클래스에 새로운 메소드를 추가하는 방법입니다. 이를 통해 클래스의 원래 소스 코드를 수정하지 않고도 기능을 확장할 수 있습니다. 특히, 기존 클래스가 닫혀 있거나 수정할 수 없는 경우 유용하게 사용할 수 있습니다.

 

예를 들어, string 클래스에 우리가 원하는 메소드를 추가해 문자열을 더욱 쉽게 조작할 수 있습니다. 확장 메소드는 LINQ와 같이 메소드를 체이닝하여 사용할 때도 활용됩니다.

 

 

확장 메소드 정의 방법

확장 메소드를 정의하기 위해서는 아래의 조건을 따라야 합니다.

  1. 정적 클래스(Static Class) 안에서 메소드를 정의해야 합니다.
  2. 정적 메소드(Static Method)로 선언해야 합니다.
  3. 메소드의 첫 번째 매개변수에 this 키워드를 사용하여, 해당 메소드가 어떤 클래스의 확장인지 지정합니다.

이제 예제를 통해 확장 메소드를 알아보겠습니다.

 

 

 

 

 

 

 

 

 

 

string 클래스에 확장 메소드를 추가하여 문자열의 첫 글자를 대문자로 변환하는 기능을 구현해 보겠습니다.

  1. 먼저, 확장 메소드를 담을 정적 클래스를 만듭니다.
  2. CapitalizeFirstLetter라는 확장 메소드를 추가하여 문자열의 첫 글자만 대문자로 변환합니다.

 

 

  • 정적 클래스 StringExtensions: 모든 확장 메소드를 담을 컨테이너로, 반드시 static 키워드가 붙어야 합니다.
  • 정적 메소드 CapitalizeFirstLetter: 이 메소드는 string 클래스의 인스턴스에서 호출할 수 있도록 확장됩니다. 메소드의 첫 번째 매개변수는 this string str로 설정되어 있어, 해당 메소드가 string 클래스의 확장임을 나타냅니다.
  • 로직: string.IsNullOrEmpty(str)로 문자열이 비었는지 확인한 후, 비어 있지 않다면 첫 글자를 대문자로 변환하여 반환합니다.

 

 

 

위의 코드에서 text.CapitalizeFirstLetter()를 호출하면, text 문자열의 첫 글자만 대문자로 변환된 결과를 반환합니다. 이처럼 확장 메소드를 사용하면 객체를 수정하지 않고도 원하는 기능을 손쉽게 추가할 수 있습니다.

 

 

 

 

 

 

 

 

 

주의사항

확장 메소드를 사용할 때 몇 가지 주의할 점이 있습니다.

  1. 이름 충돌 방지: 확장 메소드 이름이 클래스의 기존 메소드와 겹치지 않도록 주의해야 합니다. 기본 클래스에 동일한 이름의 메소드가 있다면, 기존 메소드가 우선 호출됩니다.
  2. 호출 가능한 범위: 확장 메소드를 정의한 네임스페이스를 using 지시문을 통해 포함해야 합니다. 그렇지 않으면 확장 메소드가 표시되지 않습니다.
  3. 상속되지 않음: 확장 메소드는 상속되지 않습니다. 즉, 파생 클래스에서 기본 클래스의 확장 메소드를 사용할 수는 있지만, 확장 메소드가 자동으로 파생 클래스의 멤버가 되는 것은 아닙니다.

 

 

List를 활용한 추가 예제들

 

리스트의 평균값 구하기

List<int> 타입에 확장 메소드를 추가하여 리스트의 평균값을 계산하는 메소드를 작성해 보겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

문자열 리스트에서 특정 길이 이상의 문자열만 필터링하기

List<string> 타입에 확장 메소드를 추가하여 특정 길이 이상의 문자열만 남겨두는 메소드를 작성해 보겠습니다. 

 

 

앞선 예제의 ListExtensions 클래스 내에 추가로 작성하셔도 무방합니다.

 

 

 

이 외에도 확장 메소드를 활용할 방법은 무궁무진합니다. 여러 상황에 알맞게 잘 활용하시길 바랍니다.

댓글