Note* C#에서는 int도 하나의 클래스이다. int a 는 int클래스의 a 객체라는 뜻

image.png

class Cat
{
    public string Name; -> 멤버변수(C++), property(C#)이라고 부름
    public string Color; -> 멤버변수(C++), property(C#)이라고 부름

    public void Meow() -> 함수(C++), 메소드(C#)이라고 부름
    {
        Console.WriteLine("{0} : 야옹", Name);
    }
}

Cat kitty = new Cat(); 
-> 여기서 kitty라는 얘는 stack에 참조변수로 정의됨
-> 그리고 new 라는 걸 하면 Heap에 Cat()이라는 클래스에 대한 메모리를 할당하기시작함.
-> Cat(틀) kitty(객체) 라고 구조화된다.
-> 이때 new 뒤의 Cat()은 함수고 이건 생성자이다!
(즉, 객체를 만들면 생성자가 10000000% 작동된다는 것을 알것이다)
(또한 생성자는 닥치고 클래스이름과 같아야만 한다! 관례적인게 아니라 꼮!!) 

image.png

생성자의 경우에는 반환하는 함수가 아니므로 void Cat()이다. 그러나 무조건 생성자는 반환이 아니라 참조변수에 메모리 연결해주는 역할이므로 void조차 적지 않는다!

(이 그림에서는 Cat에 대한 생성자를 오버로딩 해놓았다)

(또한, 만일 생성자를 정의하지 않았다면 디폴트 생성자가 만들어지며 그냥 메모리만 잡는 역할)

→ 내가 생성자를 정의했다면 디폴트 생성자는 만들어지지 않는다.

But, 만일 내가 public Cat(string _Name, string _Color) 를 만들어 놓고 Cat() 이렇게 부르면 어떻게 될까? → 컴파일 에러가 난다 디폴트 생성자가 만들어지지 않기 때문에!!!!!!

소멸자는 메모리가 삭제될때 선언되는 메소드를 말한다. Cat c = new Cat(); 했을때 c라는 참조변수는 코드블록을 벗어날때 스택에 있던 c는 사라짐 .

그러나 new Cat()에 해당하는 애는 Heap에 있고 이를 가르키는 주소가 더 이상 없으므로 가비지컬렉터가 이를 제거하는 구조다.