250x250
Rainbow🌈Coder
My dev NoteπŸ“’
Rainbow🌈Coder
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (411)
    • 곡지사항 (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • νƒ€μž…μŠ€ν¬λ¦½νŠΈ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE κ°œλ°œν™˜κ²½μ„€μ • (3)
      • React와 Node 같이 λ•Œλ €μž‘κΈ° (6)
      • next.js (2)
      • pixi.js (7)
    • λ§ˆν¬μ—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • 이것이 C#이닀 (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(기초) (8)
      • Unity(C#쀑급) (5)
      • μœ λ‹ˆν‹° 포톀(λ„€νŠΈμ›Œν¬) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • μŠ€ν”„λ§ (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜ (15)
      • 자료ꡬ쑰 (5)
      • μ•Œκ³ λ¦¬μ¦˜ (10)
    • ν˜•μƒκ΄€λ¦¬ (15)
      • Git (11)
      • μ†ŒμŠ€νŠΈλ¦¬ (3)
    • κ·Έλž˜ν”½μŠ€ (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • λ¦¬λˆ…μŠ€ (5)
      • λ¦¬λˆ…μŠ€ (5)
    • μ±… 리뷰 (13)
      • ν΄λ¦°μ½”λ“œ(책리뷰) (3)
      • μœ μ§€λ³΄μˆ˜κ°€λŠ₯ν•œμ½”λ”©μ˜κΈ°μˆ C#편(책리뷰) (1)
      • λ¦¬νŒ©ν† λ§(μžλ°”μŠ€ν¬λ¦½νŠΈνŒ) (9)
    • Server (2)
      • κ²Œμž„ μ„œλ²„(λ„€νŠΈμ›Œν¬, λ©€ν‹°μ“°λ ˆλ“œ,OS) (2)
    • 섀계, 아킀텍쳐 (4)
    • 파이썬 (5)
    • λ””μžμΈνŒ¨ν„΄ (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • 인곡지λŠ₯ (1)
      • ν˜Όμžκ³΅λΆ€ν•˜λŠ”λ¨Έμ‹ λŸ¬λ‹+λ”₯λŸ¬λ‹ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • μ»΄ν¬μ§€μ…˜
  • MySQL
  • γ…£γ„·
  • μœ„μž„

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Rainbow🌈Coder

My dev NoteπŸ“’

19. [static]정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œ
C#/이것이 C#이닀

19. [static]정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œ

2022. 2. 10. 12:54
728x90

static은 μ‚¬μ „μ μœΌλ‘œ '정적'μ΄λΌλŠ” λœ»μ„ κ°€μ§€κ³  μžˆλ‹€.(움직이지 μ•ŠλŠ”λ‹€.)

C#μ—μ„œ static은 λ©”μ†Œλ“œλ‚˜ ν•„λ“œκ°€ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ 클래슀 μžμ²΄μ— μ†Œμ†λ˜λ„λ‘ μ§€μ •ν•˜λŠ” ν•œμ •μžμ΄λ‹€. 

 

 

ν•œ ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ μΈμŠ€ν„΄μŠ€λŠ” μ—¬λŸ¬ κ°œκ°€ μ‘΄μž¬ν•  수 μžˆμœΌλ‚˜ ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•œλ‹€.

λ˜‘κ°™μ€ ν΄λž˜μŠ€κ°€ 두 개 이상 μ‘΄μž¬ν•  μˆ˜λŠ” μ—†λ‹€.

μ–΄λ–€ ν•„λ“œκ°€ ν΄λž˜μŠ€μ— μ†Œμ†λœλ‹€λŠ” 것은 κ³§ κ·Έ ν•„λ“œκ°€ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μœ μΌν•˜κ²Œ μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

 

λ‹€μŒ ν‘œλŠ” ν•„λ“œ(클래슀 μ•ˆμ— μ„ μ–Έν•œ λ³€μˆ˜)κ°€ μΈμŠ€ν„΄μŠ€μ— μ†Œμ†λœ κ²½μš°μ™€ ν΄λž˜μŠ€μ— μ†Œμ†λœ 경우의 예제 μ½”λ“œλ₯Ό λ‹΄κ³  μžˆλ‹€.

static으둜 ν•œμ •ν•˜μ§€ μ•Šμ€ ν•„λ“œλŠ” μžλ™μœΌλ‘œ μΈμŠ€ν„΄μŠ€μ— μ†Œμ†λ˜λ©°,

static으둜 ν•œμ •ν•œ ν•„λ“œλŠ” ν΄λž˜μŠ€μ— μ†Œμ†λœλ‹€.

 

정적 ν•„λ“œλ₯Ό λ§Œλ“€μ–΄μ„œ μ–»λŠ” 이득:

static으둜 μˆ˜μ‹ν•œ ν•„λ“œλŠ” ν”„λ‘œκ·Έλž¨ 전체에 걸쳐 ν•˜λ‚˜λ§Œ λ§Œλ“€ 수 있게 λœλ‹€.

κ·ΈλŸ¬λ―€λ‘œ ν”„λ‘œκ·Έλž¨ 전체에 걸쳐 κ³΅μœ ν•΄μ•Ό ν•˜λŠ” λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ 정적 ν•„λ“œλ₯Ό μ΄μš©ν•˜λ©΄ λœλ‹€.

 

<전체 μ†ŒμŠ€μ½”λ“œ>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class MyClass1
    {
        public int a;
        public int b;
    }
    class MyClass2
    {
        public static int a;
        public static int b;
    }

    class Cat
    {
        public Cat()
        {
            name = "";
            color = "";
        }
        ~Cat()
        {
            WriteLine($"잘 κ°€, {name}");
        }
        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            MyClass1 obj1 = new MyClass1();
            obj1.a = 1;
            obj1.b = 2;

            MyClass1 obj2 = new MyClass1();
            obj2.a = 3;
            obj2.b = 4;

            MyClass2.a = 1;
            MyClass2.b = 2;


            int a = new int();
            a = 3;
            string lovemessage = new string(new char[] {'I',' ', 'l', 'o', 'v','e', ' ', 'y','o','u' });
            WriteLine(a);
            WriteLine(lovemessage);
            Cat nabi = new Cat(); //nabi 객체 생성
            Cat neko = new Cat("neko","νšŒμƒ‰"); //nabi 객체 생성
            nabi.Meow();
            neko.Meow();
            Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");

            Cat nero = new Cat(); //nero 객체 생성
            nero.SetColor("검은색");
            nero.SetName("λ„€λ‘œ");
            nero.Meow();
            WriteLine($"{nero.GetName()}의 색깔은 {nero.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}

λ‹€μŒμ€ 정적 ν•„λ“œλ₯Ό μ΄μš©ν•˜λŠ” μ˜ˆμ € ν”„λ‘œκ·Έλž¨μ΄λ‹€.

μ—¬λŸ¬ ν΄λž˜μŠ€μ—μ„œ Globalμ΄λΌλŠ” 이름을 κ°€μ§„ 클래슀의 정적 ν•„λ“œμ— μ ‘κ·Όν•˜λŠ” 예제λ₯Ό 보여쀀닀.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Global
    {
        public static int Count = 0;
    }
    class ClassA
    {
        public ClassA()
        {Global.Count++;}
    }
    class ClassB
    {
        public ClassB()
        {Global.Count++;}
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            WriteLine(Global.Count);
            new ClassA();
            new ClassA();
            new ClassB();
            new ClassB();
            WriteLine(Global.Count);
            Global.Count = 100;
            WriteLine(Global.Count);
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

0
4
100

 

정적 λ©”μ†Œλ“œ μ—­μ‹œ 정적 ν•„λ“œμ²˜λŸΌ μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ 클래슀 μžμ²΄μ— μ†Œμ†λœλ‹€.

정적 λ©”μ†Œλ“œμ— λŒ€ν•΄ μš°μ„ μ μœΌλ‘œ κΈ°μ–΅ν•΄μ•Ό ν•  것은

정적 λ©”μ†Œλ“œκ°€ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ 호좜이 κ°€λŠ₯ν•œ λ©”μ†Œλ“œλΌλŠ” 점이닀.

 

참고둜, 비정적 λ©”μ†Œλ“œλŠ” 

ν΄λž˜μŠ€μ— μ†Œμ†λ˜λŠ” 정적 λ©”μ†Œλ“œμ™€ 달리 μΈμŠ€ν„΄μŠ€μ— μ†Œμ†λœλ‹€κ³  ν•΄μ„œ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλΌκ³  ν•œλ‹€.

μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” μ΄λ¦„μ²˜λŸΌ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ†Œλ“œμ΄λ‹€.

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Global
    {
        public static int Count = 0;
        public static void StaticMethod()
        {
            Count += 100;
        }
    }
    class ClassA
    {
        public ClassA()
        {Global.Count++;}
    }
    class ClassB
    {
    public ClassB()
        {Global.Count++;}
    }
    class ClassC
    {
        public ClassC()
        { Global.StaticMethod(); }
    }
    class ClassD
    {
        public void nonstaticMethod()
        {
            WriteLine("μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            WriteLine(Global.Count);//0
            new ClassA();
            new ClassA();
            new ClassB();
            new ClassB();
            WriteLine(Global.Count);//4
            Global.Count = 100;
            WriteLine(Global.Count);//100
            Global.StaticMethod();
            WriteLine(Global.Count);//200
            new ClassC();
            WriteLine(Global.Count);//300
            ClassD test = new ClassD();
            test.nonstaticMethod(); //μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
        }
    }
}

보톡 객체 λ‚΄λΆ€μ˜ 데이터λ₯Ό μ΄μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•˜κ³ ,

λ‚΄λΆ€ ν…Œμ΄ν„°λ₯Ό μ΄μš©ν•  일이 μ—†λŠ” κ²½μš°μ—λŠ” λ³„λ„μ˜ μΈμŠ€ν„΄μŠ€ 생성없이 ν˜ΈμΆœν•  수 μžˆλ„λ‘

λ©”μ†Œλ“œλ₯Ό μ •μ μœΌλ‘œ μ„ μ–Έν•œλ‹€.

 

(μ–΄λ–€ κ²½μš°μ— μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν• μ§€ λ˜λŠ” 정적 λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  지에 λŒ€ν•΄μ„œλŠ” MS의 μ—”μ§€λ‹ˆμ–΄λ“€μ΄ .NET 클래슀 라이브러리 μ•ˆμ— 쒋은 예λ₯Ό λ§ˆλ ¨ν•΄λ†“μ€ 것을 μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•΄λ‚˜κ°€λ©΄ λœλ‹€.)

728x90

'C# > 이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

21. this, this() μƒμ„±μž  (0) 2022.02.10
20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)  (0) 2022.02.10
18. 객체의 μ‚Άκ³Ό 죽음(μƒμ„±μž,μ’…λ£Œμž) + μƒμ„±μž μ˜€λ²„λ‘œλ”©  (0) 2022.02.10
17. C#의 클래슀  (0) 2022.02.10
16. κ°’, 참쑰에 μ˜ν•œ λ§€κ°œλ³€μˆ˜ 전달, ref와 out의 차이  (0) 2022.02.09
    'C#/이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 21. this, this() μƒμ„±μž
    • 20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)
    • 18. 객체의 μ‚Άκ³Ό 죽음(μƒμ„±μž,μ’…λ£Œμž) + μƒμ„±μž μ˜€λ²„λ‘œλ”©
    • 17. C#의 클래슀
    Rainbow🌈Coder
    Rainbow🌈Coder
    λͺ°λΌλ„ 결ꡭ은 μ•„λŠ” 개발자, 그런 μ‚¬λžŒμ΄ 되기 μœ„ν•œ 맀일의 ν•œκ±ΈμŒ

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