[C#] string 객체 μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜

2023. 3. 18. 16:41Β·πŸ“ Language/✏ C#

string κ°μ²΄ μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜

ν•œ λ©”μ„œλ“œ μ•ˆμ˜ 둜컬 λ³€μˆ˜λ“€μ€ κ·Έ λ©”μ„œλ“œκ°€ 끝날 λ•Œ ν•΄μ œν•˜κ²Œ λœλ‹€. Value νƒ€μž…μ˜ λ³€μˆ˜λŠ” ν•¨μˆ˜ 리턴과 λ™μ‹œμ— μŠ€νƒμ—μ„œ ν•΄μ œλ˜κ³ , Reference νƒ€μž…μ˜ λ³€μˆ˜λŠ” GC에 μ˜ν•΄ νž™μ—μ„œ μžλ™ ν•΄μ œλœλ‹€. μ—¬κΈ°μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜ 쀑 ν•˜λ‚˜λŠ” 레퍼런슀 νƒ€μž…μ˜ 객체λ₯Ό λΆˆν•„μš”ν•˜κ²Œ λ„ˆλ¬΄ 많이 λ§Œλ“œλŠ” 것이닀.

 

예λ₯Ό λ“€μ–΄ μ•„λž˜ μ˜ˆμ œλŠ” string 객체λ₯Ό n개 μ”© 계속 μƒμ„±ν•˜κ³  μžˆλ‹€.

public string Get1ToN_Bad(int n)
{
   string s = "";
   for (int i = 1; i <= n; i++)
   {
      s += i.ToString() + ".";
   }
   return s;
}

 

string κ°μ²΄λŠ” 처음 μƒμ„±λ˜λ©΄ 내뢀에 μžˆλŠ” κ·Έ 값을 λ³€κ²½ν•  수 μ—†λ‹€. λ”°λΌμ„œ μƒˆλ‘œμš΄ 값이 동일 λ³€μˆ˜μ— ν• λ‹Ήλ˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ μƒˆλ‘œμš΄ string 객체λ₯Ό λ§Œλ“€κ³  μƒˆλ‘œμš΄ 값을 ν• λ‹Ήν•œ ν›„ 동일 λ³€μˆ˜μ— μΉ˜ν™˜ν•˜κ²Œ λœλ‹€. μƒˆ string 객체 ν• λ‹ΉμœΌλ‘œ μ˜ˆμ „ string κ°μ²΄λŠ” λΆˆν•„μš”ν•˜κ²Œ λ˜μ–΄ GC에 μ˜ν•΄ ν•΄μ œλœλ‹€. λ§Œμ•½ μœ„ 예제λ₯Ό 백만, 천만 λ“±μœΌλ‘œ 계속 μ‹€ν–‰ν•œλ‹€λ©΄ μ„±λŠ₯에 λ¬Έμ œκ°€ 생길 수 μžˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ 이런 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆμ„κΉŒ?

 

객체λ₯Ό μƒˆλ‘œ ν• λ‹Ήν•˜μ§€ μ•Šκ³  데이터λ₯Ό λ³€κ²½ν•  수 μžˆλŠ” StringBuilderλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀. λ¬Όλ‘  StringBuilder도 λ‚΄λΆ€μ μœΌλ‘œ 버퍼가 λΆ€μ‘±ν•˜λ©΄ κΈ°μ‘΄ λ²„νΌμ˜ 2κ°œμ— ν•΄λ‹Ήν•˜λŠ” μƒˆ 버퍼λ₯Ό ν• λ‹Ήν•˜κ³  여기에 데이터λ₯Ό λ³΅μ œν•˜κ²Œ λœλ‹€. ν•˜μ§€λ§Œ ν•΄λ‹Ή StringBuilder 객체λ₯Ό ν•΄μ œ ν›„ λ‹€μ‹œ μƒμ„±ν•˜λŠ” 것은 μ•„λ‹ˆλ‹ˆ GCκ°€ μˆ˜λ§Žμ€ 객체듀을 ν•΄μ œν•΄μ•Ό ν•˜λŠ” 뢀담은 μ—†κ²Œ λœλ‹€.

public string Get1ToN_Good(int n)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 1; i <= n; i++)
    {
        sb.Append(i.ToString() + ",");
    }
    return sb.ToString();
}

 

λ˜ν•œ, μ„±λŠ₯ ν–₯상을 μœ„ν•΄ 미리 버퍼λ₯Ό 크게 ν• λ‹Ήν•˜λ„λ‘ capacityλ₯Ό 생성 μ‹œ μ§€μ •ν•  수 μžˆλ‹€.

 

https://www.csharpstudy.com/Mistake/Article/3

 

string 객체 μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜ - C# ν”„λ‘œκ·Έλž˜λ° 배우기 (Learn C# Programming)

string 객체 μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜ [제λͺ©] string 객체 μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜ ν•œ λ©”μ„œλ“œ μ•ˆμ˜ 둜컬 λ³€μˆ˜λ“€μ€ κ·Έ λ©”μ„œλ“œκ°€ 끝날 λ•Œ ν•΄μ œλ˜κ²Œ λœλ‹€. Value νƒ€μž…μ˜ λ³€μˆ˜λŠ” ν•¨μˆ˜ 리턴과 λ™μ‹œμ— μŠ€νƒ

www.csharpstudy.com

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C#' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C#] Math
  • [C#] struct λŒ€μ‹  classλ₯Ό 써야 ν•  λ•Œ
  • [C# 8.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (3) - using μ„ μ–Έ, 널 병합 ν• λ‹Ήμž, ꡬ쑰체 읽기 μ „μš© 멀버
  • [C# 8.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - Nullable Reference Type, 인덱싱과 μŠ¬λΌμ΄μ‹±
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C#] string 객체 μ‚¬μš©μ—μ„œ ν”νžˆ ν•˜λŠ” μ‹€μˆ˜
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”