내일배움캠프 6일차 TIL - C# 기초 주간 시작

권태하·2024년 4월 22일
post-thumbnail

오늘 한 것, 배운 것

  • C# 문법 강의 수강
  • 클래스와 객체
  • 상속
  • 오버라이딩과 오버로딩
  • 개인 프로젝트 시작

C# 문법 강의 수강

C# 문법 종합반 강의를 제공받아서 주말부터 듣기 시작했다. 일요일에 완강을 했는데, 2주차 후반부 내용부터 어려워지더니 3주차부터는 사실상 내가 한 번에 익힐 수 있는 내용이 아니었다. 주중에 다시 들으면서 복습한다 생각하고 일단 완강을 했는데, 좋은 선택이었던 것 같다. 오늘 3주차 내용까지 빠르게 강의를 돌려보니 어느정도 머릿속에 개념이 잡히기 시작했다. 하지만 여전히 4주차 5주차 내용은 끔찍하다. 하지만 실무에서 많이 활용되는 지식과 개념이라고 하고, 여기서 기초를 다져놔야 이후에 있을 C# 문법 심화 강의나 유니티 활용에 대해 배울 때 막힘이 없을테니 2~3회 듣는 다는 생각으로 집중해야겠다.

오늘 배운 내용 중에 몇가지를 정리해보자면...

클래스와 객체

클래스

  • 클래스는 객체를 생성하기 위한 템플릿 또는 설계도 역할을 한다.
  • 클래스는 속성과 동적을 가진다. 속성은 필드로, 동작은 메서드로 표현된다.
  • 객체를 생성하기 위해서는 클래스를 사용하여 인스터스를 만들어야 한다.
  • 붕어빵 가게에서 클래스는 붕어빵을 만들기 위한 붕어빵틀이라고 할 수 있다.
  • 클래스의 구성 요소로는 필드, 메서드, 생성자, 소멸자가 있다.
// <클래스 구조 기초>
class Person
{
    public string Name;
    public int Age;

    public void PrintInfo()
    {
        Console.WriteLine("Name: " + Name);
        Console.WriteLine("Age: " + Age);
    }
}

// 실행 영역
Person p = new Person();
p.Name = "John";
p.Age = 30;
p.PrintInfo(); // 출력: Name: John, Age: 30

위의 클래스에서

    public string Name;
    public int Age;

이 부분이 필드(클래스에서 사용되는 변수)이고

    public void PrintInfo()
    {
        Console.WriteLine("Name: " + Name);
        Console.WriteLine("Age: " + Age);
    }

이 부분이 메서드(클래스에서 수행되는 동작)이다.

객체

  • 객체는 클래스의 인스턴스이다. 클래스의 실체화된 형태라고 할 수 있다.
  • 객체는 클래스로부터 생성되며, 각 객체는 독립적인 상태를 가지고 있다. 즉, 객체마다 고유한 데이터를 가질 수 있다.
  • 붕어빵 가게에서 객체는 붕어빵이라고 할 수 있다. 붕어빵 틀로 만들어진 실제 붕어빵이 객체라고 볼 수 있다.

상속

  • 상속은 기존의 클래스(부모 클래스 또는 상위 클래스)를 확장하거나 재사용하여 새로운 클래스(자식 클래스 또는 하위 클래스)를 생성하는 것이다.
  • 자식 클래스는 부모 클래스의 멤버(필드, 메서드, 프로퍼티 등)를 상속받아 사용할 수 있다.
  • 상속을 통해 부모 클래스의 기능을 확장하거나 수정하여 새로운 클래스를 정의할 수 있다.

상속 예시1

// 부모 클래스
public class Animal
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }

    public void Sleep()
    {
        Console.WriteLine("Animal is sleeping.");
    }
}

// 자식 클래스
public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Dog is bark.");
    }
}

public class Cat : Animal
{
    public void Sleep()
    {
        Console.WriteLine("Cat is sleeping.");
    }

    public void Meow()
    {
        Console.WriteLine("Cat is meow.");
    }
}

// 사용 예시
Dog dog = new Dog();
dog.Name = "Bobby";
dog.Age = 3;

dog.Eat();      // Animal is eating.
dog.Sleep();    // Animal is sleeping.
dog.Bark();     // Dog is barking

Cat cat = new Cat();
cat.Name = "KKami";
cat.Age = 10;

cat.Eat();
cat.Sleep();
cat.Meow();

상속 예시2 (가상 메서드) - Virtual

가상 메서드는 기본적으로 부모 클래스에서 정의되고 자식 클래스에서 재정의 할 수 있는 메서드이다.

public class Unit
{
    public virtual void Move()
    {
        Console.WriteLine("두발로 걷기");
    }

    public void Attack()
    {
        Console.WriteLine("Unit 공격");
    }
}

public class Marine : Unit
{

}

public class Zergling : Unit
{
    public override void Move()
    {
        Console.WriteLine("네발로 걷기");
    }
}

// 사용 예시
// #1 참조형태와 실형태가 같을때
Marine marine = new Marine();
marine.Move();
marine.Attack();

Zergling zergling = new Zergling();
zergling.Move();
zergling.Attack();

// #2 참조형태와 실형태가 다를때
List<Unit> list = new List<Unit>();
list.Add(new Marine());
list.Add(new Zergling());

foreach (Unit unit in list)
{
    unit.Move();
}

사용 예시3 (추상 클래스와 메서드) - Abstract

  • 상속을 위한 베이스 클래스로 사용된다.
  • 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 한다.
abstract class Shape
{
    public abstract void Draw();
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

class Square : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a square");
    }
}

class Triangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a triangle");
    }
}

List<Shape> list = new List<Shape>();
list.Add(new Circle());
list.Add(new Square());
list.Add(new Triangle());

foreach (Shape shape in list )
{
    shape.Draw();
}

오버라이딩과 오버로딩

오버라이딩(Overriding)

  • 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의하는 것
  • 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 한다.
  • 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현할 수 있다.
public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape.");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle.");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle.");
    }
}

Shape shape1 = new Circle();
Shape shape2 = new Rectangle();

shape1.Draw();  // Drawing a circle.
shape2.Draw();  // Drawing a rectangle.

오버로드(overloading)

  • 동일한 메서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미
  • 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있다.
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
}

Calculator calc = new Calculator();
int result1 = calc.Add(2, 3);         // 5
int result2 = calc.Add(2, 3, 4);      // 9

개인 프로젝트 시작

프로젝트 명 : 스파르타 던전 (Text 게임) 만들기

위에서 배운 객체와 구조체, 그리고 배열을 활용해 C# - Console App으로 게임을 만들어야 한다.

구현해야 할 목록은 다음과 같다

1. 게임 시작 화면 
2. 상태보기 
3. 인벤토리
3-1. 장착 관리
4. 상점
4-1. 아이템 구매

선택요구사항
1. 아이템 정보를 클래스 / 구조체로 활용해 보기
2. 아이템 정보를 배열로 관리하기
3. 아이템 추가하기 - 나만의 새로운 아이템을 추가해보기
4. 판매하기 기능 추가 
5. 장착 개선
6. 던전입장 기능 추가
7. 휴식기능 추가
8. 레벨업 기능 추가
9. 게임 저장하기 추가

아직은 막막하지만 하나하나 구현하다보면 다 해볼만 한 것 같다.
목요일 18:00이 마감 기한이니까 늦지않게 파이팅!

profile
스터디 로그

0개의 댓글