C#μμλ μΈλΆ μμ(νμΌ, λ€νΈμν¬ μ€νΈλ¦Ό, DB μ°κ²° λ±)μ λ€λ£° λ λ°λμ λͺ
μμ μΈ ν΄μ κ° νμν©λλ€. κ·Έλ μ§ μμΌλ©΄ λ©λͺ¨λ¦¬ λμλ νμΌ μ κΈ κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ C#μ IDisposable μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄λ₯Ό μλμΌλ‘ ν΄μ ν΄μ£Όλ using ν€μλλ₯Ό μ 곡ν©λλ€.
using ν€μλλ λ€μκ³Ό κ°μ λ κ°μ§ λ°©μμΌλ‘ μ¬μ©ν μ μμΌλ©°, μμ κ΄λ¦¬μ μ½λμ μμ μ± μΈ‘λ©΄μμ λ§€μ° μ€μν μν μ ν©λλ€.
1οΈβ£ using λ¬Έ (using statement)
using (var stream = new FileStream("example.txt", FileMode.Open))
{
// νμΌμ μ½κ±°λ μ
} // using λΈλ‘μ΄ λλλ©΄ stream.Dispose()κ° μλ νΈμΆλ¨
μ½λ λΈλ‘μ΄ μ’
λ£λλ©΄ Dispose()κ° μλμΌλ‘ νΈμΆλμ΄ μμμ ν΄μ ν©λλ€.
μμΈκ° λ°μνλλΌλ finally λΈλ‘μ²λΌ μμ νκ² μ 리λ©λλ€.
2οΈβ£ using μ μΈ (C# 8.0λΆν° λμ )
using var stream = new FileStream("example.txt", FileMode.Open);
// μ½λ λΈλ‘ μμ΄λ μ¬μ© κ°λ₯νλ©°, λ³μμ μ€μ½νκ° λλλ©΄ Dispose() μλ νΈμΆ
λ³΄λ€ κ°κ²°ν μ½λ μμ±μ΄ κ°λ₯νλ©°, λ³μμ μλͺ
μ£ΌκΈ°(scope)μ λ°λΌ μλ ν΄μ κ° μ΄λ€μ§λλ€.
λ¨, μ΄ λ°©μμ λ³μκ° μ μΈλ λ©μλ λ΄μμλ§ μ ν¨ν©λλ€.
μ μμ κ²½μ° C# ꡬλ²μ λΆν° μ§μνμ§λ§, νμμ κ²½μ°μλ 8.0 λ²μ μ΄νλΆν° μ§μν΄μ£Όκ³ μμ΅λλ€.
νμκ° λ μ΅κ·Όμ λμ¨ ννμμ΄λ νμλ‘ μ°λ©΄ νμ μ’μκΉμ?
μμνμ
¨λ€μνΌ μλλλ€.
π‘μ μ ν using μ¬μ©λ²
μ€μ νμ©ν μ μλ μ½λ κ΅¬μ‘°λ‘ λ³΄λ©΄μ λ κ°μ§μ μ°¨μ΄μ μ λκ»΄λ³΄κ² μ΅λλ€.
β 1. using λ¬Έ
class Temp : IDisposable
{
public Temp() => Console.WriteLine("Temp κ°μ²΄ μμ±");
public void Dispose() => Console.WriteLine("Temp κ°μ²΄ ν΄μ ");
}
class Program
{
static void Main()
{
using (var temp = new Temp()) // -> λΈλ‘ λ΄λΆμμλ§ temp μ¬μ© κ°λ₯
{
Console.WriteLine("λΈλ‘ λ΄λΆ μ€ν");
} // β
λΈλ‘μ΄ λλλ μ¦μ Dispose() νΈμΆλ¨
Console.WriteLine("λΈλ‘ μ’
λ£");
}
}
using λ¬Έμ νμ©νλ©΄ using λ¬Έμ΄ λλ λ Dispose() λ₯Ό νΈμΆνμ¬ κ°μ²΄ μλ©Έ κ³Όμ μ΄ μ΄λ€μ§λλ€. μ μμ μ½λμμ β μ€μ μ§λλ©΄ λ°λ‘ Dispose() ν¨μκ° νΈμΆλλ κ²μ΄μ£ .
Temp κ°μ²΄ μμ±
λΈλ‘ λ΄λΆ μ€ν
Temp κ°μ²΄ ν΄μ
λΈλ‘ μ’
λ£
β 2. using μ μΈ
class Temp : IDisposable
{
public Temp() => Console.WriteLine("Temp κ°μ²΄ μμ±");
public void Dispose() => Console.WriteLine("Temp κ°μ²΄ ν΄μ ");
}
class Program
{
static void Main()
{
using var temp = new Temp();
Console.WriteLine("λ©μλ λ΄λΆ μ€ν");
// β
temp λ³μλ₯Ό νΈμΆν λΈλ λ΄μμ κ³μ μ¬μ©ν μ μμ
Console.WriteLine("μμ§ Dispose() νΈμΆ μ λ¨");
} // β
λ©μλ μ’
λ£ μ Dispose() νΈμΆλ¨
}
using μ μΈμ μ¬μ©νλ κ²½μ° using ν€μλλ₯Ό μ¬μ©ν λΈλ‘μ΄ λλμΌλ§ Dispose() νΈμΆλ©λλ€.
Temp κ°μ²΄ μμ±
λ©μλ λ΄λΆ μ€ν
μμ§ Dispose() νΈμΆ μ λ¨
Temp κ°μ²΄ ν΄μ
λμΉ λΉ λ₯΄μ λΆμ΄λΌλ©΄ μ κ° μ΄λ€ μ μ λ§ν λ €κ³ νλμ§ λμΉ μ±μ ¨μ κ²λλ€.
CASE 1
class Program
{
static void Main()
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
// DB κ΄λ ¨ λ‘μ§
} // β
λΈλ‘μ΄ λλλ μ¦μ conn.Dispose() νΈμΆλ¨
// μ°μ°μ΄ λ§€μ° μ€λ 걸리λ μ½λ
}
}
CASE 2
class Program
{
static void Main()
{
using var conn = new SqlConnection(connectionString); // DB connection λ§Ίλ λ‘μ§
conn.Open();
// DB κ΄λ ¨ λ‘μ§
// μ΄ν μ°μ°μ΄ λ§€μ° μ€λ 걸리λ μ½λ
} // β
λ©μλ μ’
λ£ μ conn.Dispose() νΈμΆλ¨
}
μ λ κ°μ§ μΌμ΄μ€λΌλ©΄ μ°¨μ΄κ° λκ»΄μ§μλμ?
νμμ κ²½μ°λ₯Ό νμ©νκ² λλ©΄, DB 컀λ₯μ
μ ν΄μ νμ§ μμ μ± μ°μ°μ΄ λ§€μ° μ€λ 걸리λ μ½λλ₯Ό μ§λ λΈλ‘μ΄ λλ λ κ°μ²΄ μλ©Έ κ³Όμ μ΄ μΌμ΄λ κ²μ
λλ€.
νμ§λ§ μ μμ κ²½μ° μ»€λ₯μ
μ λ§Ίκ³ κ΄λ ¨ λ‘μ§ μ΄ν λ°λ‘ μλ©Έ κ³Όμ μ κ±°μΉκ³ , κ·Έλ€μ μ°μ°μ΄ λ§€μ° μ€λ 걸리λ λ‘μ§μ΄ μ€νλ©λλ€.
DB 컀λ₯μ
μ μ€λ λ¬Όκ³ μμΌλ©΄ μ’μ§ μμ΅λλ€. λ€λ₯Έ μ€λ λκ° μ»€λ₯μ
μ λ§Ίμ΄μΌνλλ°, κ³μ 컀λ₯μ
μ λ¬Όκ³ μλ€λ©΄ 컀λ₯μ
νμ μ°κ²°ν μ μλ 컀λ₯μ
μ΄ λ¨μ μμ§ μμ μ μμ΅λλ€.
μ΄μ κ°μ΄ 빨리 μμ ν΄μ λ₯Ό ν΄μ€μΌνλ κ²½μ° λλ μ΄ν λ‘μ§μ΄ μκ° λ³΅μ‘λκ° λμ κ²½μ° using λ¬Έμ μ¬μ©νμ¬ ν¨μ¨μ μΌλ‘ 리μμ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
β¨λ§λ¬΄λ¦¬
DB 컀λ₯μ
μ GCλ§μΌλ‘λ ν΄μ κ° λ³΄μ₯λμ§ μλ λ€νΈμν¬ κΈ°λ°μ μμμ
λλ€.
μ¬μ© ν λͺ
νν Close() λλ Dispose()νμ§ μμΌλ©΄ 컀λ₯μ
ν κ³ κ°, μΈμ
μ κΈ λ±μ΄ λ°μν μ μμ΅λλ€.
μ΄λ κ² IDisposableμ ꡬνν κ°μ²΄λ κ΄λ¦¬λμ§ μλ μμ(unmanaged resources)μ ν¬ν¨ν μ μμΌλ―λ‘, GC(Garbage Collector)λ§μΌλ‘λ ν΄μ κ° λ³΄μ₯λμ§ μμ΅λλ€.
usingμ μ΄λ¬ν λ¬Έμ λ₯Ό μλμΌλ‘ λ°©μ§νλ κ°λ ₯ν λꡬμ
λλ€. usingμ μ¬μ©νλ©΄ μ½λκ° λμ± λͺ
ννκ³ μμΈμ μμ νλ©°, 리μμ€ λμλ₯Ό λ°©μ§ν μ μμ΅λλ€.
리μμ€λ₯Ό λ€λ£¨λ λͺ¨λ μ½λμ usingμ μ μ ν μ¬μ©νλ©΄, μμΈ μν©μλ κ°μΈνκ³ κΉλν μ½λλ₯Ό μ μ§ν μ μμ΅λλ€. νΉν νμΌ I/O, DB μ°κ²°, λ€νΈμν¬ ν΅μ λ±μμλ usingμ μ°λ κ²λ§μΌλ‘λ λ§μ λ²κ·Έλ₯Ό μλ°©ν μ μμ΅λλ€.
'C# Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
.NET (CLR) ν λ©λͺ¨λ¦¬ ꡬ쑰μ GC (κ·Έλ°λ° JVM κ³Ό λΉκ΅λ₯Ό κ³λ€μΈ....) (0) | 2025.03.14 |
---|
λκΈ