c#(확장메서드, String불변성)

JHO·2024년 7월 25일
0

c#스터디

목록 보기
6/9

1. 확장메서드


1-1. 확장메서드

  • 타인이 만든 클래스에 직접 접근하여 기능을 추가하면 자신의 코드가 아니기때문에 에러가 발생할 수 있으므로 협업 관계에 혼란이 있을 수 있음.
  • 기존에 있는 클래스를 건들지 않고, 기능을 추가할 수 있도록 하는 기능.

1-2. 사용 방법

internal class Program
{
    public static void Main()
    {
        string text = "hello world";
        Console.WriteLine(text.WordCount());
        // Extension.WordCount(text)와 동일
        int a = 3;
        a.PrintNum("삼!");
    }
}
public static class Extension
{
    public static int WordCount(this string text)
    {
        return text.Split(' ').Length;
    }
    public static void PrintNum(this int num, string text)
    {
        Console.WriteLine($"{text}");
    }
}
  • 확장메서드 구현할 때, 꼭 static 클래스로 외부에서 선언한다.
  • 원하는 자료형의 기능을 추가할때 첫번째 매개변수에 this를 써준다.

2.StringBuilder


2-1. string의 불변성(Immutable)

  • 참조 타입의 변수들은 (ex) class) 깊은 복사가 아닌 얕은 복사가 일어난다.
    -> 즉, class a와 class b가 존재하고,a = b를 하면,
    a와 b는 같은 주소를 가리키기 때문에, a가 가리키는 주소의 값을 변경하면 b가 가리키는 주소의 값도 같이 변경된다.
  • string의 경우, 참조 타입이긴 하지만 불변성을 가지고 있다.
  • string a = "hi", string b = a; 을 하게 되면, a 와 b는 같은 주소를 가르키게 된다.
    -> 여기 까지는 기존 참조타입과 동일하다.
  • 여기서 a = "hello"을 하게 되면, 위의 사진 처럼 기존의 객체는 그대로 두고 새로운 객체를 만들어서 새로운 공간에 재할당하는 방식을 사용한다.
    -> 이러한 수정이 잦을 경우 성능에 악영향을 미침!

    2-2. StringBuilder

  • string의 단점을 보안한 방식
  • 대량의 text를 효과적으로 사용하기 위함.
  • using System.Text를 추가.
  • StringBuilder을 사용하는 경우 기존의 참조 타입과 같이 얕은복사의 동일한 결과를 얻을 수 있음.
profile
개발노트

0개의 댓글