C# - λ©μλμ ꡬ쑰체 μμ μ 볡: μ¬μ¬μ©μ±λΆν° ꡬ쑰 μ€κ³ + ꡬ쑰체 λ©λͺ¨λ¦¬
π§© λ©μλλ 무μμΈκ°?
β λ©μλμ μ μ
λ©μλ(Method)λ νλ‘κ·Έλ¨μμ νΉμ ν μμ
μ μννλλ‘ μ μλ μ½λ λΈλ‘μ΄λ€.
볡μ‘ν μ½λλ₯Ό κΈ°λ₯λ³λ‘ λΆλ¦¬νμ¬ λͺ¨λνν¨μΌλ‘μ¨ μ½λμ μ¬μ¬μ©μ±, κ°λ
μ±, μ μ§λ³΄μμ±μ λμΌ μ μλ€.
C#μμ λ©μλλ ν΄λμ€λ ꡬ쑰체 λ΄μ μ μλλ©°, μΈλΆμμ νΈμΆν μ μλ€. λ©μλλ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μν μ μννλ€.
β¨ λ©μλμ μ£Όμ νΉμ§
- μ½λ μ¬μ¬μ©μ±
λ°λ³΅μ μΌλ‘ μ¬μ©λλ μ½λλ₯Ό λ©μλλ‘ μ μν΄ ν λ²λ§ μμ±νλ©΄ μ¬λ¬ κ³³μμ νΈμΆνμ¬ μ¬μ©ν μ μλ€. - λͺ¨λν(Modularity)
νλ‘κ·Έλ¨μ λ Όλ¦¬μ μΈ λ¨μλ‘ λλ μ μλ€. κ° λ©μλλ νλμ μμ μλ§ μ§μ€νλλ‘ μ€κ³νλ κ²μ΄ μ’λ€. - κ°λ
μ± ν₯μ
λ©μλ μ΄λ¦λ§ λ³΄κ³ μ΄λ€ λμμ μννλμ§ μμΈ‘ κ°λ₯νλ―λ‘ μ½λ μ 체μ νλ¦μ μ΄ν΄νκΈ° μ¬μμ§λ€. - μ μ§λ³΄μ μ©μ΄μ±
λ²κ·Έ μμ μ΄λ κΈ°λ₯ λ³κ²½ μ, λ©μλ λ¨μλ‘ μμ μ΄ κ°λ₯νλ―λ‘ λ€λ₯Έ μ½λμ λ―ΈμΉλ μν₯μ μ΅μνν μ μλ€. - μ€λ³΅ μ κ±°
λμΌνκ±°λ μ μ¬ν μ½λκ° μ¬λ¬ λ² λ°λ³΅λλ κ²½μ°, νλμ λ©μλλ‘ μΆμΆν΄ μ€λ³΅μ μ κ±°ν μ μλ€.
π§ μ λ©μλκ° νμνκ°?
μ΄λ³΄ κ°λ°μκ° μμ±ν μ½λμμ κ°μ₯ νν λνλλ λ¬Έμ λ κ°μ λ‘μ§μ λ°λ³΅ν΄μ μμ±νλ κ²μ΄λ€.
μ΄λ λ©μλλ₯Ό μ¬μ©νλ©΄ μλμ κ°μ μ΄μ μ λ릴 μ μλ€.
κΈ°μ‘΄ μ½λ λ¬Έμ | λ©μλλ₯Ό μ¬μ©ν κ²½μ° |
λ°λ³΅λλ μ½λλ‘ κ°λ μ± μ ν | νλμ λ©μλλ‘ λ체 κ°λ₯ |
μμ ν λ λͺ¨λ λΆλΆμ μμ ν΄μΌ ν¨ | λ©μλ νλλ§ μμ νλ©΄ λ¨ |
κΈ°λ₯ ꡬλΆμ΄ μ΄λ €μ | κ° κΈ°λ₯λ³λ‘ λλ μ κ΅¬μ± κ°λ₯ |
π μμ: λ©μλ μμ΄ μμ±ν μ½λ
Console.WriteLine("μλ
νμΈμ!");
Console.WriteLine("μλ
νμΈμ!");
Console.WriteLine("μλ
νμΈμ!");
π μμ: λ©μλ μ¬μ© ν
void PrintGreeting() {
Console.WriteLine("μλ
νμΈμ!");
}
// νΈμΆ
PrintGreeting();
PrintGreeting();
PrintGreeting();
→ μ½λμ κΈΈμ΄λ μ€κ³ , κ°λ μ±μ ν₯μλλ€.
π§© λ©μλ μ μΈκ³Ό νΈμΆ
β λ©μλλ₯Ό μ μΈνλ λ°©λ²
C#μμ λ©μλλ λ€μκ³Ό κ°μ κ΅¬μ‘°λ‘ μ μΈνλ€.
[μ κ·Ό μ νμ] [λ°ν νμ
] [λ©μλ μ΄λ¦]([λ§€κ°λ³μ λͺ©λ‘])
{
// μ€νν μ½λ
}
μλ₯Ό λ€μ΄,
public int Add(int a, int b)
{
return a + b;
}
μμ μμλ AddλΌλ μ΄λ¦μ λ©μλλ₯Ό μ μν κ²μ΄λ€.
μ΄ λ©μλλ λ κ°μ μ μ λ§€κ°λ³μλ₯Ό λ°μ ν©μ°ν κ²°κ³Όλ₯Ό μ μνμΌλ‘ λ°ννλ€.
β¨ κ° κ΅¬μ± μμ μ€λͺ
- μ κ·Ό μ νμ (Access Modifier)
μΈλΆμμ μ΄ λ©μλλ₯Ό μ¬μ©ν μ μλμ§ μ¬λΆλ₯Ό κ²°μ νλ€.- public: ν΄λμ€ μΈλΆμμλ μ κ·Ό κ°λ₯
- private: μ μΈλ ν΄λμ€ λ΄λΆμμλ§ μ¬μ© κ°λ₯ (κΈ°λ³Έκ°)
- protected, internal λ±λ μ‘΄μ¬
- λ°ν νμ
(Return Type)
λ©μλκ° μ€ν ν λ°ννλ λ°μ΄ν°μ μλ£νμ λνλΈλ€.- μ: int, string, bool, void λ±
- λ°νκ°μ΄ μμ κ²½μ° voidλ₯Ό μ¬μ©
- λ©μλ μ΄λ¦ (Method Name)
λ©μλλ₯Ό μλ³νλ μ΄λ¦μ΄λ€. νΈμΆ μ μ΄ μ΄λ¦μ μ¬μ©νλ€.- μ: PrintMessage, CalculateSum λ±
- λ§€κ°λ³μ λͺ©λ‘ (Parameter List)
λ©μλ μ€νμ νμν μΈλΆ λ°μ΄ν°λ₯Ό μ λ¬λ°λ λ³μ λͺ©λ‘μ΄λ€.- μλ£νκ³Ό λ³μλͺ μ ν¨κ» μ μνλ€
- 0κ° μ΄μ μ μ κ°λ₯νλ©°, μΌν(,)λ‘ κ΅¬λΆ
π μμ : λ€μν λ©μλ μ μΈ
// λ°νκ°μ΄ μλ λ©μλ
public void SayHello()
{
Console.WriteLine("μλ
νμΈμ!");
}
// λ§€κ°λ³μλ₯Ό λ°λ λ©μλ
public void GreetUser(string name)
{
Console.WriteLine($"{name}λ, λ°κ°μ΅λλ€!");
}
// λ°νκ°μ΄ μλ λ©μλ
public int Multiply(int a, int b)
{
return a * b;
}
π§ͺ λ©μλ νΈμΆ λ°©λ²
λ©μλλ₯Ό νΈμΆνλ €λ©΄ λ©μλ μ΄λ¦ λ€μ κ΄νΈλ₯Ό μ΄κ³ , νμν λ§€κ°λ³μλ₯Ό λ£λλ€.
λ©μλμ΄λ¦(μ λ¬ν μΈμκ°);
μμ
SayHello(); // λ§€κ°λ³μ μμ
GreetUser("μ¬μ"); // λ¬Έμμ΄ λ§€κ°λ³μ μ λ¬
int result = Multiply(3, 4); // λ°νκ° μ¬μ©
π‘ μ£Όμμ¬ν
- νΈμΆ μ μ λ¬νλ μΈμμ κ°μ, μμ, μλ£νμ λ©μλ μ μΈκ³Ό λ°λμ μΌμΉν΄μΌ νλ€.
- λ©μλλ νΈμΆ μ μλ μ€νλμ§ μμΌλ©°, λ°λμ νΈμΆν΄μΌ μ½λκ° μ€νλλ€.
- void λ©μλλ κ°μ λ°ννμ§ μμΌλ―λ‘ λ³λλ‘ λ³μμ μ μ₯νμ§ μλλ€.
π μ€μ μμ
void PrintStars(int count)
{
for (int i = 0; i < count; i++)
{
Console.Write("*");
}
Console.WriteLine();
}
// νΈμΆ
PrintStars(10);
PrintStars(5);
π§© λ§€κ°λ³μμ λ°νκ°
β λ§€κ°λ³μ(Parameter)λ?
λ§€κ°λ³μλ λ©μλκ° μΈλΆλ‘λΆν° λ°μ΄ν°λ₯Ό λ°μλ€μΌ μ μλλ‘ μ μλ λ³μμ΄λ€.
λ©μλλ₯Ό νΈμΆν λ, μ λ¬λ κ°μ λ©μλ λ΄λΆμμ μ¬μ©ν μ μκ² ν΄μ€λ€.
β¨ λ§€κ°λ³μμ νΉμ§
- λ©μλ μ μΈλΆμ μλ£ν + λ³μλͺ ννλ‘ μ μνλ€.
- λ©μλ νΈμΆ μ κ΄νΈ μμ μΈμλ₯Ό μ λ¬νλ©΄, ν΄λΉ μΈμκ° λ§€κ°λ³μλ‘ λ³΅μ¬λλ€.
- μ¬λ¬ κ°μ λ§€κ°λ³μλ₯Ό μ¬μ©ν μ μμΌλ©°, μ½€λ§(,)λ‘ κ΅¬λΆνλ€.
- λ§€κ°λ³μλ λ©μλ λ΄μμ μ§μ λ³μμ²λΌ μ¬μ©λλ€.
π μμ : λ§€κ°λ³μλ₯Ό μ¬μ©νλ λ©μλ
void PrintMessage(string name)
{
Console.WriteLine($"{name}λ, λ°κ°μ΅λλ€!");
}
// νΈμΆ
PrintMessage("μ¬μ"); // μΆλ ₯: μ¬μλ, λ°κ°μ΅λλ€!
β λ°νκ°(Return Value)μ΄λ?
λ°νκ°μ λ©μλκ° μμ
μ μνν ν κ²°κ³Όλ₯Ό νΈμΆν κ³³μΌλ‘ λλ €μ£Όλ κ°μ΄λ€.
λ°νκ°μ΄ μλ λ©μλλ return ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ λ°ννλ€.
β¨ λ°νκ°μ νΉμ§
- λ°νκ°μ μλ£νμ λ©μλ μ μΈλΆμ λ°ν νμ κ³Ό λ°λμ μΌμΉν΄μΌ νλ€.
- λ©μλκ° returnμ λ§λλ©΄ μ¦μ μ’ λ£λλ©°, κ°μ νΈμΆν κ³³μ λλ €μ€λ€.
- voidλ₯Ό μ¬μ©νλ κ²½μ°μλ λ°νκ°μ΄ μμΌλ©°, return;λ§ μ¬μ©ν΄ λ©μλλ₯Ό μ’ λ£ν μ μλ€.
π μμ : λ°νκ°μ΄ μλ λ©μλ
int Add(int a, int b)
{
return a + b;
}
// νΈμΆ
int sum = Add(10, 20);
Console.WriteLine("ν©κ³: " + sum); // μΆλ ₯: ν©κ³: 30
β void λ©μλ
voidλ λ©μλκ° λ°νκ°μ΄ μλ€λ μλ―Έλ‘ μ¬μ©λλ€.
λ¨μν μΆλ ₯μ΄λ νΉμ μμ
μ μνν λ μ£Όλ‘ μ¬μ©νλ€.
void ShowNotice()
{
Console.WriteLine("μ
λ°μ΄νΈκ° μλ£λμμ΅λλ€.");
}
// νΈμΆ
ShowNotice();
π§ͺ λ€μν νμ© μμ
// λ¨μ μΆλ ₯
void PrintLine()
{
Console.WriteLine("====================");
}
// λ°λ³΅ μΆλ ₯
void PrintLineCount(int count)
{
for (int i = 0; i < count; i++)
{
Console.Write("=");
}
Console.WriteLine();
}
// ν©κ³ κ³μ°
int GetTotal(int x, int y)
{
return x + y;
}
// νΈμΆ
PrintLine();
PrintLineCount(10);
int result = GetTotal(100, 250);
Console.WriteLine("μ΄ν©: " + result);
π§ μ 리
κ°λ | μ€λͺ |
λ§€κ°λ³μ | λ©μλ μΈλΆμμ μ λ¬λλ μ λ ₯ κ° |
λ°νκ° | λ©μλ μ€ν κ²°κ³Όλ‘ λλ €μ£Όλ κ° |
void | λ°νκ°μ΄ μλ λ©μλμ μ¬μ©νλ ν€μλ |
π§© λ©μλ μ€λ²λ‘λ© (Method Overloading)
β λ©μλ μ€λ²λ‘λ©μ΄λ?
λ©μλ μ€λ²λ‘λ©μ΄λ νλμ λ©μλ μ΄λ¦μΌλ‘ μ¬λ¬ κ°μ λ©μλλ₯Ό μ μνλ κΈ°λ₯μ΄λ€.
λ§€κ°λ³μμ κ°μ, μλ£ν, μμκ° λ€λ₯΄λ©΄ λμΌν μ΄λ¦μ λ©μλλ₯Ό μ€λ³΅ν΄μ μ μΈν μ μλ€.
β¨ μ€λ²λ‘λ©μ 쑰건
λ€μ μ€ νλλΌλ λ€λ₯΄λ©΄ μ€λ²λ‘λ©μ΄ κ°λ₯νλ€.
- λ§€κ°λ³μμ κ°μκ° λ€λ₯Ό κ²½μ°
- λ§€κ°λ³μμ μλ£νμ΄ λ€λ₯Ό κ²½μ°
- λ§€κ°λ³μμ μμκ° λ€λ₯Ό κ²½μ°
β οΈ λ¨, λ°ννλ§ λ€λ₯΄κ² νλ κ²μ μ€λ²λ‘λ©μ΄ μλλ€.
π μμ : μ€λ²λ‘λ©λ λ©μλλ€
void PrintInfo(string name)
{
Console.WriteLine($"μ΄λ¦: {name}");
}
void PrintInfo(string name, int age)
{
Console.WriteLine($"μ΄λ¦: {name}, λμ΄: {age}");
}
void PrintInfo(int age, string name)
{
Console.WriteLine($"λμ΄: {age}, μ΄λ¦: {name}");
}
μ μμμμλ λͺ¨λ PrintInfoλΌλ μ΄λ¦μ λ©μλμ§λ§,
λ§€κ°λ³μμ κ°μ, μμ, μλ£νμ΄ λ€λ₯΄κΈ° λλ¬Έμ μ€λ²λ‘λ©μ΄ κ°λ₯νλ€.
π§ͺ μμ : μ€λ²λ‘λ©μ νμ©ν λ§μ λ©μλ
int Add(int a, int b)
{
return a + b;
}
int Add(int a, int b, int c)
{
return a + b + c;
}
double Add(double a, double b)
{
return a + b;
}
// νΈμΆ μμ
int sum1 = Add(1, 2); // 2κ° μ μ
int sum2 = Add(1, 2, 3); // 3κ° μ μ
double sum3 = Add(1.5, 2.5); // 2κ° μ€μ
Console.WriteLine(sum1); // μΆλ ₯: 3
Console.WriteLine(sum2); // μΆλ ₯: 6
Console.WriteLine(sum3); // μΆλ ₯: 4.0
π λ©μλ μ€λ²λ‘λ©μ μ₯μ
- κ°λ μ± ν₯μ: κ°μ μλ―Έμ μμ μ νλμ μ΄λ¦μΌλ‘ ν΅μΌν μ μλ€.
- μ½λ μΌκ΄μ± μ μ§: ν¨μ μ΄λ¦μ κ³μ λ°κΏ νμ μμ΄ λ§€κ°λ³μλ§ λ€λ₯΄κ² μμ±νλ©΄ λλ€.
- μ μ°μ± μ¦κ°: λ€μν ννμ μΈμ μ²λ¦¬ κ°λ₯
π§ μ 리
κ΅¬λΆ | μ€λ²λ‘λ© κ°λ₯ μ¬λΆ |
λ§€κ°λ³μ κ°μ λ€λ¦ | κ°λ₯ |
λ§€κ°λ³μ μλ£ν λ€λ¦ | κ°λ₯ |
λ§€κ°λ³μ μμ λ€λ¦ | κ°λ₯ |
λ°ννλ§ λ€λ¦ | λΆκ°λ₯ |
π μ¬κ· νΈμΆ (Recursive Call)
β μ¬κ· νΈμΆμ΄λ?
**μ¬κ· νΈμΆ(Recursion)**μ λ©μλκ° μκΈ° μμ μ λ€μ νΈμΆνλ λ°©μμ΄λ€.
λ¬Έμ λ₯Ό λ μμ λ¨μλ‘ λλμ΄ κ°μ λ°©λ²μΌλ‘ λ°λ³΅ μ²λ¦¬ν μ μλλ‘ νλ€.
β¨ μ¬κ· νΈμΆμ κΈ°λ³Έ ꡬ쑰
void ν¨μμ΄λ¦(λ§€κ°λ³μ)
{
if (μ’
λ£ μ‘°κ±΄)
{
// μ¬κ· μ’
λ£ μ μ€νν μ½λ
}
else
{
// μκΈ° μμ νΈμΆ (μ¬κ·)
ν¨μμ΄λ¦(λ§€κ°λ³μ λ³ν);
}
}
- λ°λμ **μ’ λ£ μ‘°κ±΄(νμΆ μ‘°κ±΄)**μ΄ μμ΄μΌ νλ€.
- μ’ λ£ μ‘°κ±΄μ΄ μμΌλ©΄ 무ν 루νλ‘ μΈν΄ Stack Overflow μ€λ₯κ° λ°μνλ€.
π μμ : μΉ΄μ΄νΈλ€μ΄
void CountDown(int n)
{
if (n <= 0)
{
Console.WriteLine("μΉ΄μ΄νΈ μ’
λ£");
}
else
{
Console.WriteLine(n);
CountDown(n - 1); // μ¬κ· νΈμΆ
}
}
// νΈμΆ
CountDown(5);
μΆλ ₯ κ²°κ³Ό
5
4
3
2
1
μΉ΄μ΄νΈ μ’
λ£
π μ¬κ· νΈμΆμ λμ μ리
- μ¬κ· νΈμΆμ΄ λ°μνλ©΄ νΈμΆν λ©μλλ λκΈ° μνκ° λκ³ ,
μλ‘μ΄ λ©μλκ° μ€νμ μμΈλ€. - κ° λ©μλ νΈμΆμ΄ μ’ λ£ μ‘°κ±΄μ λ§λλ©΄ νλμ© μ€νμμ μ κ±°λλ©° 볡κ·νλ€.
π μμ : ν©ν λ¦¬μΌ (Factorial)
int Factorial(int n)
{
if (n <= 1)
return 1;
else
return n * Factorial(n - 1);
}
// νΈμΆ
int result = Factorial(5);
Console.WriteLine(result); // μΆλ ₯: 120
- 5! = 5 × 4 × 3 × 2 × 1μ μ¬κ·μ μΌλ‘ κ³μ°νλ ꡬ쑰
- μ¬κ· νΈμΆμ΄ λ°λ³΅λλ©° μ μ μμ λ¬Έμ λ‘ λμκ°κ³ ,
λ§μ§λ§μ νλμ© κ³μ°λμ΄ λμμ¨λ€.
β οΈ μ£Όμν μ
- μ’ λ£ μ‘°κ±΄μ λ°λμ μ ννκ² μ€μ ν΄μΌ νλ€.
- λ무 κΉμ μ¬κ· νΈμΆμ **μ€ν λ©λͺ¨λ¦¬ μ΄κ³Ό(Stack Overflow)**λ₯Ό μ λ°ν μ μλ€.
- 볡μ‘ν μ¬κ·λ λ°λ³΅λ¬ΈμΌλ‘ λ체νλ κ²μ΄ λ ν¨μ¨μ μΈ κ²½μ°λ μλ€.
π§ μ 리
νλͺ© | λ΄μ© |
μ μ | λ©μλκ° μκΈ° μμ μ λ€μ νΈμΆνλ λ°©μ |
μ₯μ | λ¬Έμ λ₯Ό λ¨μνκ³ μ§κ΄μ μΌλ‘ νν κ°λ₯ |
λ¨μ | κ³Όλν μ¬κ·λ μ€ν μ€λ²νλ‘μ° μν μμ |
νμ μμ | μ’ λ£ μ‘°κ±΄ μ‘΄μ¬ νμ |
π οΈ λ©μλ νμ© μ¬λ‘
β λ©μλλ μ μ¬μ©νλκ°?
λ©μλλ λ¨μν μ½λλ₯Ό μ€μ΄κΈ° μν λκ΅¬κ° μλλΌ,
μ½λμ νμ§μ λμ΄κ³ μ μ§λ³΄μλ₯Ό μ©μ΄νκ² λ§λ€κΈ° μν ν΅μ¬ ꡬ쑰μ΄λ€.
π λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ μ΄μ
β μ½λμ μ¬μ¬μ©μ±
- λμΌν μμ μ μ¬λ¬ λ² κ΅¬νν νμ μμ΄, λ©μλλ‘ μ μν λ€ νμν λλ§λ€ νΈμΆνμ¬ μ¬μ© κ°λ₯νλ€.
- λ°λ³΅λλ μμ μ λ©μλλ‘ μΆμΆνλ©΄ μ½λμ μ€λ³΅μ μ κ±°ν μ μλ€.
β κ°λ μ± ν₯μ
- λ©μλλ μ½λλ₯Ό μλ―Έ λ¨μλ‘ λΆλ¦¬ν΄μ£Όλ―λ‘ μ 체 ꡬ쑰λ₯Ό νμ νκΈ° μ¬μμ§λ€.
- λ©μλ μ΄λ¦λ§ λ³΄κ³ λ ν΄λΉ λΈλ‘μ μν μ λΉ λ₯΄κ² μ΄ν΄ν μ μλ€.
β μ μ§λ³΄μμ νΈλ¦¬ν¨
- νΉμ κΈ°λ₯μ μμ ν λ ν΄λΉ λ©μλλ§ μμ νλ©΄ λλ―λ‘, μ 체 μ½λμ μν₯μ μ£Όμ§ μλλ€.
- κΈ°λ₯μ΄ λ 립μ μΌλ‘ λΆλ¦¬λμ΄ μμ΄ λλ²κΉ λ° ν μ€νΈκ° μ©μ΄νλ€.
π μμ : λ©μλ μμ΄ κ΅¬νν μ½λ
double radius = 5.0;
double circleArea = Math.PI * radius * radius;
double width = 3.0;
double height = 4.0;
double rectangleArea = width * height;
Console.WriteLine("μμ λμ΄: " + circleArea);
Console.WriteLine("μ¬κ°νμ λμ΄: " + rectangleArea);
- κ°λ¨ν μμμ§λ§, κ³μ° λ‘μ§μ΄ λ©μΈ νλ¦κ³Ό λ€μμ¬ μμ΄ νμ₯μ±κ³Ό μ¬μ¬μ©μ±μ΄ λ¨μ΄μ§λ€.
π μμ : λ©μλλ₯Ό νμ©ν μ½λ κ°μ
double CalculateCircleArea(double radius)
{
return Math.PI * radius * radius;
}
double CalculateRectangleArea(double width, double height)
{
return width * height;
}
// νΈμΆλΆ
double circleArea = CalculateCircleArea(5.0);
double rectangleArea = CalculateRectangleArea(3.0, 4.0);
Console.WriteLine("μμ λμ΄: " + circleArea);
Console.WriteLine("μ¬κ°νμ λμ΄: " + rectangleArea);
- κ³μ° λ‘μ§μ΄ λ©μλλ‘ λΆλ¦¬λμ΄ μλκ° λͺ ννκ³ μ μ§λ³΄μκ° μ¬μμ‘λ€.
- λ€λ₯Έ κ³³μμλ μ΄ λ©μλλ₯Ό μ¬μ¬μ©ν μ μλ€.
π μ€μ μμμ νμ© μ¬λ‘
κΈ°λ₯ μμ | λ©μλ νμ© λ°©μ |
νλ μ΄μ΄ μ€ν― κ³μ° | CalculatePlayerStats() λ©μλλ‘ λΆλ¦¬ |
UI μ λ°μ΄νΈ | UpdateUI() λ©μλλ‘ λΆλ¦¬ |
μμ΄ν ν¨κ³Ό μ μ© | ApplyItemEffect(Item item) λ©μλ νμ© |
μ λ ₯ μ²λ¦¬ | HandleInput() λ©μλλ‘ μΌκ΄ μ²λ¦¬ |
π§ μ 리
νλͺ© | μ€λͺ |
μ¬μ¬μ©μ± | λ°λ³΅λλ μ½λ μ κ±°, νΈμΆλ§μΌλ‘ μ¬νμ© κ°λ₯ |
κ°λ μ± | μ½λ λΈλ‘μ λͺ νν λλ λͺ©μ νμ μ΄ μ¬μ |
μ μ§λ³΄μ | λ³κ²½μ΄ νμν λ ν΄λΉ λ©μλλ§ μμ νλ©΄ λ¨ |
νμ₯μ± | κΈ°λ₯μ΄ λͺ νν λΆλ¦¬λμ΄ μλ‘μ΄ κΈ°λ₯ μΆκ° μ©μ΄ |
𧱠ꡬ쑰체 (Struct)
β ꡬ쑰체λ?
**ꡬ쑰체(Struct)**λ μ¬λ¬ λ°μ΄ν°λ₯Ό νλλ‘ λ¬Άμ΄μ μλ‘μ΄ μ¬μ©μ μ μ μλ£νμ λ§λλ λ°©μμ΄λ€.
C#μμλ ꡬ쑰체λ₯Ό ν΅ν΄ κ΄λ ¨λ λ°μ΄ν°λ₯Ό νλμ λ¨μλ‘ κ΄λ¦¬ν μ μμΌλ©°, ν΄λμ€μ μ μ¬νμ§λ§ κ° νμ
μ΄λΌλ μ°¨μ΄κ° μλ€.
𧩠ꡬ쑰체μ νΉμ§
νλͺ© | μ€λͺ |
ν€μλ | struct |
νμ κ΅¬λΆ | κ° νμ (Value Type) |
μ μ₯ μμΉ | μ€ν(Stack)μ μ μ₯ |
μμ μ¬λΆ | ν΄λμ€μ λ¬λ¦¬ ꡬ쑰체λ μμμ΄ λΆκ°λ₯ |
κΈ°λ³Έ μμ±μ | κΈ°λ³Έ μμ±μλ₯Ό μ§μ μ μν μ μμ (μ»΄νμΌλ¬κ° μλ μμ±) |
μ©λ | λ°μ΄ν° λ¬Άμ, κ²½λ κ°μ²΄ λ± μ±λ₯μ΄ μ€μν μν©μμ μ¬μ© |
π οΈ κ΅¬μ‘°μ²΄ μ μΈ μμ
struct Person
{
public string Name;
public int Age;
public void PrintInfo()
{
Console.WriteLine($"μ΄λ¦: {Name}, λμ΄: {Age}");
}
}
- Personμ΄λΌλ ꡬ쑰체λ μ΄λ¦κ³Ό λμ΄λ₯Ό νλμ λ¨μλ‘ λ¬Άμ μ¬μ©μ μ μ μλ£νμ΄λ€.
- PrintInfo() λ©μλλ₯Ό ν¬ν¨ν μ μμ΄ κ°λ¨ν λμλ ꡬ쑰체 λ΄λΆμμ μ²λ¦¬ κ°λ₯νλ€.
π§ͺ ꡬ쑰체 μ¬μ© μμ
Person person1;
person1.Name = "μ¬μ";
person1.Age = 26;
person1.PrintInfo();
μΆλ ₯
μ΄λ¦: μ¬μ, λμ΄: 26
π§ ν΄λμ€μ ꡬ쑰체μ μ°¨μ΄μ
νλͺ© | ν΄λμ€ | ꡬ쑰체 |
νμ | μ°Έμ‘° νμ (Reference Type) | κ° νμ (Value Type) |
μ μ₯ μμΉ | ν (Heap) | μ€ν (Stack) |
μμ κ°λ₯ μ¬λΆ | κ°λ₯ | λΆκ°λ₯ |
κΈ°λ³Έ μμ±μ | μ μ κ°λ₯ | μ μ λΆκ° (μλ μμ±) |
μ±λ₯ | μλμ μΌλ‘ λλ¦Ό | μλμ μΌλ‘ λΉ λ¦ |
μ©λ | 볡μ‘ν κΈ°λ₯, μμ νμ© | κ°λ¨ν λ°μ΄ν° λ¬Άμ, μ±λ₯ μ€μ |
π ꡬ쑰체 νμ© μ¬λ‘
- μ’ν μ 보: Point, Vector2, Vector3
- κ²μ λ΄ μ€ν― ꡬ쑰: PlayerStats, ItemData
- μμ μ 보: Color
- μκ° μ 보: DateTime (ꡬ쑰체 κΈ°λ°)
β οΈ κ΅¬μ‘°μ²΄ μ¬μ© μ μ£Όμμ
- ꡬ쑰체λ κ° νμ μ΄κΈ° λλ¬Έμ λ³΅μ¬ μ μ 체 κ°μ΄ 볡μ¬λλ€.
- λ³΅μ¬ λΉμ©μ΄ ν° κ²½μ° (μ: λ©€λ²κ° λ무 λ§κ±°λ λ¬΄κ±°μ΄ κ°μ²΄μΌ λ)λ ν΄λμ€κ° λ μ ν©νλ€.
- ꡬ쑰체 λ΄λΆμμ 볡μ‘ν μνλ₯Ό κ΄λ¦¬νκ±°λ μμμ΄ νμν κ²½μ°λ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ λ°λμ§νλ€.
β μ 리
ν΅μ¬ ν¬μΈνΈ | μ€λͺ |
κ° νμ ꡬ쑰 | μ€νμ μ μ₯λμ΄ μ±λ₯μ΄ μ’μ |
κ²½λ κ°μ²΄μ μ ν© | μ’ν, μμ, κ°λ¨ν μ 보 ꡬ쑰 |
ν΄λμ€λ³΄λ€ μ νμ | μμ λΆκ°, μμ±μ μ μ½ λ± μμ |
λ°μ΄ν° λ¬Άμμ μ©μ΄ | μ¬λ¬ λ°μ΄ν°λ₯Ό νλμ λ¨μλ‘ κ΄λ¦¬ κ°λ₯ |
β
κ·Όλ° κ°μκΈ° λ¬Έλ κΆκΈν΄μ‘λ€ κ΅¬μ‘°μ²΄λ κ° νμ μ΄λΌκ³ νλ κ·ΈλΌ κΈ°λ³Έμ μΌλ‘ μ€νμ μ μ₯μ΄ λκ² κ΅¬λ μΆμλ€.
κ·Όλ° GPTμκ² λ¬Όμ΄λ³΄λ..
β μ 리
μ¬μ© λ°©μ | μ μ₯ μμΉ |
μ§μ λ³μλ‘ μ μΈν ꡬ쑰체 | μ€ν |
ν΄λμ€μ νλλ‘ κ΅¬μ‘°μ²΄ ν¬ν¨ | ν |
λ°μ±λ ꡬ쑰체 | ν |
new ν€μλλ‘ κ΅¬μ‘°μ²΄ μ΄κΈ°ν | μ€ν |
β
μ΄λ κ² μκΈ°νλκ²μ΄ μλκ² λ..ν ..κ·Έλ¬λ©΄ μ¬λ¬ 쑰건μΌλ‘ λ¬Όμ΄λ΄€μλλ μ΄λ»κ² λλ΅νλμ§ κΆκΈνλ€.
Q. μ€ κ·Έλ¬λ©΄ ꡬ쑰체λ₯Ό ν΄λμ€ λ΄μμ μ μΈνκ³ μ¬μ©νλ©΄ νμ μ μ₯λκ³ , ꡬ쑰체λ₯Ό μ€λΈμ νΈ νμ μΌλ‘ λ³μλ₯Ό μ μΈνλ©΄ νμ μ μ₯λκ³ (λ°μ±), new ν€μλλ‘ κ΅¬μ‘°μ²΄λ₯Ό μ΄κΈ°ννλ©΄ μ€νμΌλ‘ μ‘΄μ¬νλ€λκ±°μ§? κ·Όλ° λ§μ½ ν΄λμ€ λ΄μμ νλ©΄ νμ΄κ³ ?
β ꡬ쑰체μ μ μ₯ μμΉ: μ€ν vs ν μ 리
1. κ΅¬μ‘°μ²΄κ° μ§μ λ³μμΌ λ (ν¨μ μμμ μ μΈ)
void Test()
{
PlayerState player = new PlayerState(); // ꡬ쑰체
}
- ꡬ쑰체λ κ° νμ μ΄κΈ° λλ¬Έμ μ€ν(stack) μ μ μ₯λ¨.
- new ν€μλλ ν ν λΉμ΄ μλλΌ, νλ μ΄κΈ°νλ§ ν΄μ€.
πΉ newλ₯Ό μΌλ€κ³ νμ μ μ₯λλ κ²μ΄ μλ!
2. κ΅¬μ‘°μ²΄κ° ν΄λμ€μ νλμΌ λ
class Game
{
public PlayerState player;
}
- Game κ°μ²΄λ ν(heap) μ μ μ₯λλ©°,
- κ·Έ μμ μλ ꡬ쑰체 νλ(player)λ ν μμ ν¬ν¨λ¨.
πΉ ꡬ쑰체μ μμΉλ ν΄λΉ κ΅¬μ‘°μ²΄κ° ν¬ν¨λ κ°μ²΄μ μμΉλ₯Ό λ°λ¦.
3. ꡬ쑰체λ₯Ό objectλ‘ μ μ₯ (λ°μ±)
object obj = new PlayerState();
- ꡬ쑰체λ κ° νμ μ΄κΈ° λλ¬Έμ objectμ κ°μ μ°Έμ‘° νμ μ μ μ₯ν λ λ°μ±(Boxing) μ΄ λ°μν¨.
- μ΄ κ²½μ°, ꡬ쑰체 볡μ¬λ³Έμ΄ νμ μλ‘ μμ±λ¨.
πΉ object, interface λ±μ ꡬ쑰체λ₯Ό λ΄μΌλ©΄ νμ λ°μ±λ¨.
π κ²°λ‘ μμ½
μ μΈ μμΉ/μ¬μ© λ°©μ | μ μ₯ μμΉ | λΉκ³ |
μ§μ λ³μλ‘ μ μΈλ ꡬ쑰체 | μ€ν | κΈ°λ³Έμ μΈ κ° νμ λμ |
new ν€μλλ‘ μ΄κΈ°νλ ꡬ쑰체 | μ€ν | λ¨μ νλ μ΄κΈ°ν |
ν΄λμ€μ νλλ‘ ν¬ν¨λ ꡬ쑰체 | ν | ν΄λμ€κ° νμ μ μ₯λκΈ° λλ¬Έ |
ꡬ쑰체λ₯Ό objectλ‘ λ°μ±νμ λ | ν | λ°μ± λ°μ |
ꡬ쑰체 λ°°μ΄μ κ²½μ° (λ°°μ΄μ΄ νμ μμ) | ν | λ°°μ΄μ μ°Έμ‘° νμ μ΄λΌ νμ μμ±λ¨ |
β
ν .. λ κΆκΈνκ² μκ²Όμ΅λλ€ ν΄λμ€ λ΄μμ ꡬ쑰체λ₯Ό μ μΈνκ³ μ¬μ©νλ©΄ νμ μ μ₯λλ€κ³ νλλ° κΈ°λ³Έμ μΌλ‘ ꡬ쑰체λ μ€νμ μ μ₯λλ€κ³ νλκΉ κ·Όλ° κ·ΈλΌ κ΅¬μ‘°μ²΄λ κ°μ μ€νμ μ μ₯λλ€κ³ νλλ° κ·Έλ¬λ©΄ ν΄λμ€ λ΄μμ ꡬ쑰체λ₯Ό μ μΈνκ³ μ¬μ©νλ©΄ νμ ꡬ쑰체μ μ£Όμκ°μ κ°μ§κ³ μκ³ μ€νμ κ°μ μ μ₯νλ κ²μΈκ°? λΌλ κΆκΈμ¦μ΄ μκ²Όλ€.
β “νμ ꡬ쑰체μ μ£Όμκ°μ΄ μκ³ , κ°μ μ€νμ μλ€” → β νλ¦° ννμ΄μΌ.
ꡬ쑰체λ κ° νμ
μ΄κΈ° λλ¬Έμ, κ·Έ κ° μμ²΄κ° μ΄λμ μ μ₯λλλκ° μ€μν΄.
κ° νμ
μ μ°Έμ‘°κ° μλλΌ μ€μ λ°μ΄ν°λ₯Ό κ·Έ μ리μ 볡μ¬ν΄μ 보κ΄νλ μ±κ²©μ΄μΌ.
β μ λ΅: ν΄λμ€μ νλλ‘ κ΅¬μ‘°μ²΄κ° μμ κ²½μ° → ꡬ쑰체 μ 체 κ°μ΄ νμ μ‘΄μ¬νλ€.
μμλ‘ λ³΄λ©΄:
struct PlayerState
{
public int hp;
public int mp;
}
class Game
{
public PlayerState state;
}
Game game = new Game();
- game κ°μ²΄λ newλ‘ μμ±λλ―λ‘ ν(heap) μ μ μ₯λ¨.
- κ·Έ μμ μλ state νλλ ꡬ쑰체λκΉ κ° νμ μ΄μ§λ§,
- ν΄λμ€ λ΄λΆμ ν¬ν¨λμ΄ μμΌλ―λ‘ stateμ κ° μ μ²΄κ° νμ ν¨κ» μ μ₯λλ€.
π μ΄λ νμ μλ 건 κ΅¬μ‘°μ²΄μ “μ£Όμ”κ° μλλΌ “μ€μ κ°”μ΄μΌ.
π‘ μ 리
μν© | ꡬ쑰체μ μμΉ | μ μ₯λλ κ² |
μ§μ λ³μλ‘ μ μΈλ¨ | μ€ν | ꡬ쑰체μ κ° |
ν΄λμ€μ νλλ‘ μ μΈλ¨ | ν (ν΄λμ€ λ΄λΆ) | ꡬ쑰체μ κ° |
objectμ λ°μ±λ¨ | ν (λ°μ±λ κ°μ²΄ λ΄λΆ) | ꡬ쑰체μ κ° |
π νΌλμ£Όμ
ꡬ쑰체λ μ°Έμ‘° νμ μ²λΌ “μ£Όμλ§ μ μ₯λκ³ κ°μ λ°λ‘” μλ κ² μλ.
ꡬ쑰체λ νμ κ° μμ²΄κ° κ·Έ μμΉμ 볡μ¬λμ΄ μ μ₯λ¨.
β
μ€μΌμ΄! κΆκΈμ¦ ν΄κ²°!