본문 바로가기
Study/C#

[C#] 구조체, 클래스, 상속, 제너릭

by chobbo 2024. 4. 23.

1. Snake 게임 만들기

 

SnakeGame | Notion

콘솔 기반의 간단한 뱀 게임을 구현. 기본적인 동작 방식은 아래와 같다

stitch-wallet-120.notion.site

 

GitHub - JeongEunJi1127/SnakeGame: 콘솔 기반의 간단한 뱀 게임

콘솔 기반의 간단한 뱀 게임. Contribute to JeongEunJi1127/SnakeGame development by creating an account on GitHub.

github.com

 

2. 블랙잭 게임 만들기

 

BlackJackGame | Notion

콘솔 기반의 간단한 뱀 게임을 구현.

stitch-wallet-120.notion.site

 

3. 구조체 vs 클래스

- 구조체는 값 형식, 스택에 할당,복사될 때 값이 복사.
- 클래스는 참조 형식, 힙에 할당, 참조로 전달 -> 동적 할당!!!
- 구조체는 상속 X, 클래스는 단일 상속 & 다중 상속 가능.
- 구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합

   클래스는 더 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해 사용.

 

 

4. 상속

- 좋지 않은 상속

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

    public void Move()
    {
        Console.WriteLine("Animal is moving.");
    }
}

// 자식 클래스
public class Dog : Animal
{
    // 함수 재정의. 좋지 않은 방법
    public void Move()
    {
        Console.WriteLine("Dog is moving.");
    }
}

 

 

- Virtual 클래스 사용

    - 부모 클래스에서 정의되고 자식 클래스에서 재정의할 수 있는 메서드 (재정의 안해도됨)

    - 부모 클래스의 Move 함수를 public virtual void Move()로 선언

 

 

- Abstract 클래스 사용

    - 객체화 불가능

    - 구현부가 없는 메서드, 자식 클래스에서 반드시 구현되어야 함. (강제성!!)

// 추상 클래스
abstract class Shape
{
    public abstract void Draw();
}

// 자식 클래스
class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

 

 

5. C# 제너릭

- 다양한 자료형에 대응 가능

- C#에서는 <T>로 제너릭을 선언
- 선언 시점이 아닌 사용 시점에 결정 -> <T>대신 구체적인 자료형을 넣어 사용 

    (ex) <Int>

- 두 개의 서로 다른 자료형을 사용할 때 유용

 

 

6. C# out, ref 

- 메서드에서 매개변수를 전달할 때 사용

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

    -> 값을 무조건 대입해야함 -> 해당 변수의 이전 값이 유지되지 않으므로 주의
- ref 키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용

    -> 값을 무조건 대입하지 않아도 됨.
- 메서드에서 값을 반환 X, 매개변수를 이용하여 값을 전달 O.

 

7. 개인 과제 진행

- 필수요구사항 구현 완료

 

SpartaDungeon - 개인 프로젝트 | Notion

스파르타 던전 (Text 게임) 만들기

'Study > C#' 카테고리의 다른 글

[C#] Internal Class  (0) 2024.04.29
[C#] 데이터 저장  (2) 2024.04.25
[C#] 인터페이스  (2) 2024.04.24
[C#] Random, Collection, 메서드  (0) 2024.04.22