🐧 들어가기 앞서


🐧 오늘 배운 것

  1. 클래스와 객체

  2. 상속과 다형성

  3. 고급 문법 및 기능


🐧 기억할 것

1. 클래스와 객체

클래스

객체를 생성하기 위한 템플릿 또는 설계도 역할.

속성과 동작을 가지며, 속성은 필드, 동작은 메서드로 표현.

객체를 생성하기 위해서는 클래스를 사용하여 인스턴스를 만들어야 한다.

객체

클래스의 인스턴스다. 클래스의 실체화된 형태.

독립적인 상태를 가지며, 객체마다 고유한 데이터를 가진다.

프로퍼티

get과 set 접근자를 사용하여 값을 읽고, 설정하는 동작을 정의

get -> 프로퍼티의 값을 반환

set -> 프로퍼티의 값을 설정

[접근 제한자] [데이터 타입] 프로퍼티명
{
    get
    {
        // 필드를 반환하거나 다른 로직 수행
    }
    set
    {
        // 필드에 값을 설정하거나 다른 로직 수행
    }
}
  • 자동 프로퍼티
    프로퍼티를 간단하게 정의하고 사용할 수 있는 기능
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Person person = new Person();
person.Name = "John";     // 값을 설정
person.Age = 25;          // 값을 설정

Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");  // 값을 읽어 출력

2. 상속과 다형성

상속

부모 클래스를 확장하거나 재사용하여 새로운 자식 클래스를 생성하는 것.

자식 클래스는 부모 클래스의 멤버를 상속받아 사용할 수 있다.

// 부모 클래스
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();

다형성

  • 가상 메서드
    부모 클래스에서 정의되고 자식 클래스에서 재정의할 수 있는 메서드
// 사용 예시
// #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();
}

추상 클래스

직접적으로 인스턴스를 생성할 수 없는 클래스

상속을 위한 베이스 클래스로 사용

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();
}

3. 고급 문법 및 기능

제너릭

클래스나 메스드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능

제너릭을 사용하면 코드의 재사용성을 높일 수 있다.

제너릭은 메서드의 자료형이나 클래스를 삽입할 수 있음.

// 제너릭 클래스 선언 예시
class Stack<T>
{
    private T[] elements;
    private int top;

    public Stack()
    {
        elements = new T[100];
        top = 0;
    }

    public void Push(T item)
    {
        elements[top++] = item;
    }

    public T Pop()
    {
        return elements[--top];
    }
}

// 제너릭 클래스 사용 예시
Stack<int> intStack = new Stack<int>();
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
Console.WriteLine(intStack.Pop()); // 출력 결과: 3
class Pair<T1, T2>
{
    public T1 First { get; set; }
    public T2 Second { get; set; }

    public Pair(T1 first, T2 second)
    {
        First = first;
        Second = second;
    }

    public void Display()
    {
        Console.WriteLine($"First: {First}, Second: {Second}");
    }
}

out, ref

메서드에서 매개변수를 전달할 때 사용한다.

  • out
    메서드에서 반환 값을 매개변수로 전달하는 경우에 사용

  • ref
    메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용

// out 키워드 사용 예시
void Divide(int a, int b, out int quotient, out int remainder)
{
    quotient = a / b;
    remainder = a % b;
}

int quotient, remainder;
Divide(7, 3, out quotient, out remainder);
Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1

// ref 키워드 사용 예시
void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
}

int x = 1, y = 2;
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); // 출력 결과: 2, 1

추가!

  • 가상메서드 추상메서드 차이점, 사용하는 용도 확인하기

  • 가변의 데이터를 관리할 때 -> List 사용하자!

  • 동적 크기 조절 가능

  • 쉬운 추가 및 삭제 가능

  • 인덱스로 접근 가능

  • 내부 반복 가능.(foreach)


🐧 수강후기

코드의 틀을 받아 기능을 추가하는 방식으로 제작했는데,

뱀이 움직이고 음식이 생성되는 로직밖에 구현하지 못했다.

새로 내가 제작을 직접 하는게 나을 듯 하다.

진도는 나가야 하는데, 스스로 해결은 잘 안되는 상황이 답답하고 우울하다.

다른 인원의 TIL을 보면 막힘없이 잘 해결했다.

간단한 게임의 로직을 기본을 못잡는데,

어려운 게임 제작이 가능할까?

생각이 많다.

0개의 댓글