프로그래밍/C#

[C#] 클래스(Class) 첫번째 시간

gameObject 2023. 6. 13. 01:50
728x90

클래스

논리가 객체를 중심으로 이루어진다. 

예를들어 게임을 만들기 위해서 여러사람들이 코드를 짜게되면

코드가 제각각으로 나오게되는데 이런 상태에서 게임을 만들게 되었을때

절차지향이면 다 다르게 설계가 된다.

객체지향으로 설계를 하게되면 규격이 통일되기 때문에 유지보수가 좋다.

 

Dog 클래스 생성하며 알아보기

아래 코드를 보면 cat과 dog가 있는데

dog만 보도록 해보자 cat은 구조체이다.

 

개를 생각하면 어떤것이 떠오르는가?

이름, 짖는 소리, 색 이런것들이 떠오른다.

 

이것들을 변수로써 Dog class에 넣어주게 되면 앞으로 Dog 클래스를 선언할때

해당 내용들은 자연스럽게 따라오게 된다.

 

클래스의 선언

Dog babyDog = new Dog(); 

Dog adultDog = new Dog();

이런식으로 애기개와 어른개 여러개를 만들어 줄  수 있다.

 

내 느낌상 int, string처럼 자료형과 비슷하다고 생각이 들었다.

 

생성자

생성자_ 구조체 (or클래스) 본인의 이름과 완전히 동일한 매서드가 있다, 리턴타입이 그냥 전혀 없다 void도 아님
외부에서 new를 통해 할당할때 해당 값을 받겠다는 의미이다.

반대로 이 클래스가 끝날때 실행되는것이 소멸자 이다 ( 소멸자는 아직 안적었음)

//Main에서 선언
Dog mydog = new Dog("멍뭉이","하얀색","왈왈");



//class내부
public class Dog
{
	//여기가 생성자
	public Dog(string name, string color, string sound)
    {
    	
    }

}

이런 느낌이다. 

 

////// Cat, Dog 클래스와 구조체 맛보기

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace csharp_practice
{
    public class Program
    {
        static void Main(string[] args) // static함수와 static함수가 아닌 함수를 부르는 순서가 달라서 static함수 내에서는 static함수만 써야한다.
        {
            // 구조체,클래스

            //프로그래밍 용어 캐싱이란caching : 메모리에 공간을 할당해서 어떤 값을 저장하여 미리 들고 있는 것을 의미한다. (전역변수 등이 그렇다)

            // 클래스 사용
            Dog.Print_DogDescription002();// static함수로 해서 new Dog 전부터 사용이 가능하다

            Dog myDog = new Dog();
            Console.WriteLine("우리집 강아지 이름은 {0} 이, 다리개수는 {1}개 이다.", myDog.legCount, myDog.dogName);

            myDog.Print_DogDescription();


            // 구조체 사용
            Cat myCat = new Cat(4, "야옹이", "검정색");
            myCat.Print_MyCat();
            myCat.catName = "새로운 양옹이";
            myCat.Print_MyCat();


        }//Main()
    }// class Program
}
using System;

struct Cat
{
	private int legCount;
	public string catName;
	private string catColor;

	public Cat(int legCount_, string catName_, string catColor_)
	{
		legCount = legCount_;
		catName = catName_;
		catColor = catColor_;
	} // 생성자_ 구조체 (or클래스) 본인의 이름과 완전히 동일한 매서드가 있다, 리턴타입이 그냥 전혀 없다 void도 아님
	  // 외부에서 new를 통해 할당할때 해당 값을 받겠다는 의미이다
	  // 반대로 이 클래스가 끝날때 실행되는것이 소멸자 이다 ( 소멸자는 아직 안적었음)

	public void Print_MyCat()
	{
		Console.WriteLine("우리집 고양이 이름은 {0}이고 , 색은 {1} 이다.", catName, catColor);
	}
}


namespace csharp_practice
{

    public class Dog
	{
		//접근 제한자 , 접근 지정자
		// public, protected, private 가 있다.
		// private 외부에서 접근할 수 없다
		// 
		public int legCount = 4;
        public string dogName = "멍멍";

        private string dogColor = "하얀색";
		private string dogSound = "왈크왈크";

		public void Print_DogDescription()
		{
			Console.WriteLine("강아지 색은 {0}이고, 짖는 소리는 {1} 이다.", dogColor, dogSound);
		}

        public void Print_DogDescription(int a) // function 오버로딩, 반환형식이달라서는 안된다.
        {
            Console.WriteLine("강아지 색은 {0}이고, 짖는 소리는 {1} 이다.", dogColor, dogSound);
        }

        public static void Print_DogDescription002()
		{
			//Console.WriteLine("강아지 이름은 {0}이고, 색상은 {1} 이다.",dog) 여기서는 dog에 접근이 불가하다, 생성 시점이 다르기 때문
			Console.WriteLine("강아지 이름은 {0}이고, 색상은 {1} 이다.", "모름", "모른다"); //여기서는 dog에 접근이 불가하다, 생성 시점이 다르기 때문

        }

    }
}
728x90