객체 지향 / 클래스 / 정적 필드
객체 지향 프로그래밍
int a = 30;
int b = 40;int : 클래스
a,b : 객체(인스턴스, instance) - int의 인스턴스
Cat kitty = new Cat();Cat() : 생성자(Constructor) - 클래스의 이름과 같다
new : 연산자 - 생성자를 호출해서 객체를 생성하는데 사용
"모든 클래스는 복합 데이터 형식이다"
복합 데이터 형식은 참조 형식이다.
Cat kitty;여기서 kitty는 null을 가진다.
kitty 자체에 메모리가 할당되는 것이 아니라 kitty는 참조로써 객체가 있는 곳을 가르킬 뿐
그래서 new 연산자와 생성자가 필요하다.
new 연산자와 생성자를 이용해서 힙에 객체를 생성하고, kitty는 생성자가 힙에 생성한 객체를 가리킨다.
    class Cat   
    {
        public string Name;     // 필드
        public string Color;
        
        public void Meow()	// 메소드
        {
            Console.WriteLine($"{Name} : 야옹 ");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            // kitty 객체(instance, 인스턴스) 생성
            Cat kitty = new Cat();// Cat() : 생성자
            kitty.Name = "키티";
            kitty.Color = "하얀색";
            kitty.Meow();
            Console.WriteLine($"{kitty.Name} : {kitty.Color}");
        }
    }정적 필드와 메소드
static은 메소드나 필드가 클래스의 인스턴스(객체)가 아닌 클래스 자체에 소속되도록 지정하는 한정자
한 프로그램 안에서 인스턴스는 여러 개가 존재할 수 있으나 클래스는 단 하나만 존재
똑같은 클래스가 두 개 이상 존재할 수 없음
만약 어떤 필드가 클래스에 소속된다는 것은 곧 그 필드가 프로그램 전체에 유일하게 존재한다는 것
인스턴스에 소속된 필드
    class Program
    {
        class Aclass
        {
            public int a;
            public int b;
        }
        static void Main(string[] args)
        {
            Aclass obj1 = new Aclass();
            obj1.a = 1;
            obj1.b = 2;
            Aclass obj2 = new Aclass();
            obj2.a = 1;
            obj2.b = 2;
        }
    }클래스에 소속된 필드(static)
 	class Global
        {
            public static int Count = 0;        //static : 공유 변수
        }
        class ClassA
        {
            public int cnt = 0;
            public ClassA()
            {
                Global.Count++;
                this.cnt++;
            }
        }
        class ClassB
        {
            
            public ClassB()
            {
                Global.Count++;
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine($"Global.Count : {Global.Count}");
            ClassA a1 = new ClassA();
            ClassA a2 = new ClassA();
            ClassB b1 = new ClassB();
            ClassB b2 = new ClassB();
            Console.WriteLine($"Global.Count : {Global.Count} {a1.cnt} {a2.cnt}");
        }
    }
'ETC > C#' 카테고리의 다른 글
| 메소드 / 가변길이 매개 변수 / 로컬 함수 (0) | 2021.01.20 | 
|---|---|
| 매개 변수 / 참조 지역 변수 (0) | 2021.01.18 | 
| 데이터를 가공하는 연산자 (0) | 2021.01.11 | 
| C# 문자열 다루기 (0) | 2021.01.10 | 
| C# 데이터 보관하기 (3) (0) | 2021.01.10 | 
 
										
									 
										
									
댓글