[C# 시작 전 필수] Class의 개념

2025. 3. 19. 21:29programming/C#

💡클래스란?

클래스(Class)는 객체(Object)를 생성하기 위한 청사진(설계도 혹은 정의)다. ex) 붕어빵 틀 - 클래스 / 붕어빵 - 인스턴스 또는 객체 (객체와 인스턴스는 거의 같은 의미이다.) 객체지향에 대한 기본 개념 설명은 https://voltnuna.tistory.com/291 참고

클래스는 필드(속성 즉 변수 ), 메서드(행동), 생성자 등을 포함할 수 있으며, 객체의 데이터와 동작을 정의하는 역할을 합니다.


클래스의 기본 구조 작성법 배우기

고양이 다마고치로 클래스를 만들어보자.  아래는 고양이에대한 클래스다. 먹이를 주거나 놀이를 해주면 행복지수가 올라가고, 지루하면 행복지수가 떨어지게 동작하는 기능이 있다.

고양이 클래스를 통해 bori라는 3살짜리 고양이 객체를 만들고 고양이 클래스가 제공하는 기능들을 사용해보자.

namespace studyaboutClass
{
    public class Cat
    {
        public string Name; 
        public int Age; 
        private int Happiness = 50;

        //생성자는 무조건 public, return 타입이 없다. void도 없다. 함수명은 클래스 이름과 같아야 함.
        public Cat(string name, int age) { // 매개변수 없어도 무방
            this.Name = name; //this키워드는 생성된 인스턴스를 가리킴
            this.Age = age;
        }

        public void GetBored(){
            Happiness = Happiness - 10;
            if (Happiness < 0)
            {
                Happiness = 0;
            }
        }

        public void Play(){
            Happiness = Happiness + 10;
            if(Happiness > 100){
                Happiness = 100;
            }
        }

        public void Eat(){
            Happiness = Happiness + 20;
            if (Happiness > 100)
            {
                Happiness = 100;
            }
        }
        public string Express(){
            string message = "";

            if (Happiness >= 80)
            {
                message = "I'm very happy.";
            } else if (Happiness >= 60) {
                message = "I'm happy.";
            } else if (Happiness >= 40) {
                message = "I'm soso.";
            } else if (Happiness >= 20) { 
                message = "I'm gloomy.";
            }else{
                message = Name + ": " + message;
            }

            return this.Name + ": " + message;
         }
    }
}
namespace studyaboutClass
{
    public partial class Form1 : Form
    {
        private Cat MyCat = new Cat("bori",3);
        //Cat() 생성자라는 메소드로, new 키워드를 통해 클래스를 인스턴스화 즉 생성할 때만 호출됨
        
        public Form1()
        {
            InitializeComponent();
        }

        private void clicked_play(object sender, EventArgs e)
        {
            MyCat.Play();
            screen.Text = MyCat.Express();
        }

        private void clicked_feed(object sender, EventArgs e)
        {
            MyCat.Eat();
            screen.Text = MyCat.Express();
        }

        private void catTimer_Tick(object sender, EventArgs e) //5초마다 GetBored실행
        {
            MyCat.GetBored(); 행복지수 10씩 감소
            screen.Text = MyCat.Express();
        }
    }
}

 

012
결과물

 

+) 코드 각주 다시 정리

namespace: 하나의 툴박스라고 생각하면 된다. 즉, studyaboutClass라는 툴박스 안에 Cat이라는 툴이 있는 셈이다.
class에 대한 접근 제한자도 있다. (namespace(툴박스) 내부에서 접근 또는 외부 툴박스에서도 접근 가능할지 명시)  
class에 접근자를 명시하지 않을 경우 internal이 기본임. internal은 studyaboutClass라는 툴박스(네임스페이스) 내에서만 접근 가능 사용할 때는 using을 통해 접근해 사용할 수 있음.

ex) using System.Text; => System이라는 namespace안에 있는 Text 클래스를 사용한다.

  Cat myCat = new Cat();  //new는 메모리 할당 연산자

클래스 인스턴스 생성할 때는 단순히 하나의 변수를 선언하는 것이 아닌, 많은 변수가 조합되어서 만들어 지기 때문에  (클래스가 가지고 있는 속성이나 기능들을 모두 할당하는 것이기 때문에) 필요한 만큼의 메모리 할당이 필요하다.

그래서 new 키워드 사용

또한  Cat클래스에 생성자를 만들었지만, 만약 생성자를 따로 정의하지 않았다면 클래스 인스턴스 생성할 때 아래와 같은 기본 생성자가 호출되어 실행된다.

public Cat() {

}

 

아래 강의 보고 포스팅(강추)

https://www.youtube.com/@alongsidey4514/videos

 

Alongside Y

 

www.youtube.com