TIL(2023.08.17)

최장범·2023년 8월 17일
0

TIL

목록 보기
9/50

오늘의 공부 내용

===강의 3주차 마무리 및 과제내용===
1) 상속

  • 기존의 클래스 (부모 클래스 또는 상위 클래스)를 확장 하거나 재사용하여 새로운 클래스 (자식 클래스 또는 하위 클래스)를 생성하는 것

  • 자식 클래스는 부모 클래스의 멤버들을 상속받아 사용할 수 있고, 부모 클래스의 기능을 확장 및 수정 할 수 있음

  • 장점
    -코드의 재사용성
    -계층 구조의 표현 - 코드 구조를 명확하게 표현 가능
    -유지보수성의 향상

  • 상속의 종류:
    -단일 상속 (C#에서는 단일상속만 지원)
    -다중 상속
    -인터페이스 상속

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("네발로 걷기");
    }
}
  • 추상 클래스 (Abstract)
    -직접적으로 인스턴스를 생성할 수 없음
    -상속을 위한 베이스로 사용
    -abstract키워드
    -구현부가 없는 method이기때문에 자식클래스에서 무조건 구현해야함
abstract class Shape
{
    public abstract void Draw();
}

class Circle
{

}

class Square
{

}

class Triangle
{

}
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");
    }
}
  • 오버라이딩과 오버로딩

  • Overriding(오버라이딩)
    =부모 클래스에서 이미 정의된 method를 자식 클래스에서 재정의하는 것
    =이름, 매개변수 및 타입이 동일해야함

  • Overloading(오버로딩)
    = 동일한 method이름을 가지지만 매개변수의 개수,타입,순서가 다른 여러개의 method들
    =매개변수 조합으로 호출가능

3) 3주차 과제 스네이크 게임 & 블랙잭 게임

  • 스네이크 게임
    -뱀 클래스, 음식 생성기 클래스, 포인터 클래스 등을 만들어 구현

  • 블랙잭 게임
    - 플레이어와 딜러가 자신의 패의 합이 21점에 더 가까운 쪽이 이기는 블랙잭 게임을 구현
    - Card, Deck, Hand(패), Player, Dealer, Blackjack 등의 클래스들을 사용
    - 캡슐화를 사용해봄


문제가 생겼던 부분과 해결하려 했던 노력

  1. 스네이크 게임을 다 만들고 구동 시켰을때 실제 게임이 제대로 실행이 되지 않는 오류
  • 문제를 찾기 위해 코드의 오류를 찾아보았다. 하지만 아무 오류도 나지않고 구동은 되었지만 실제 뱀이 방향키에 따라 움직이지 않음
  • 구글링과 chatGPT를 활용해 본인의 코드에서 문제가 되는 부분을 찾아보려 노력했음
  • 끝내 찾지 못해 제시된 풀이를 하나하나 대입해가며 틀린 부분을 찾아봄
  • 첫번째 문제
    - List로 뱀의 몸통을 만들고 뱀의 머리를 body.Last로 뱀의 꼬리를 body.First로 설정해두고는 실제 호출을 할때는 반대로 부른 오류
  • 두번째 문제
    - 줄맞춤의 문제
    • snake class가 다른 클래스의 내부에 존재하는 줄맞춤 실수를 함
  • 문제 해결
  1. 블랙잭 게임을 만들고 구동을 해보니 카드의 숫자에 따라 점수가 더해져야하는데 점수가 더해지는 기능이 구현되지 않음
  • 플레이어가 카드를 뽑을때 어떤 숫자이던 관계없이 랜덤한 점수가 추가됨 가끔은 점수가 빠지는 경우도 발생
  • 점수에서 문제가 발생하였기에 method GetTotalValue()와 Card class의 GetValue method를 검토함
    -if 문에서 카드의 숫자를 비교하여 패의 총점을 계산하는 메소드인데, if (card.(카드의 숫자) == 카드의숫자.Ace) 이런식의 코드를 짰어야 하는데 저곳에 카드의 모양 변수를 넣는 실수를 함
  • 문제 해결

오늘 공부한 것에 대한 생각

  1. 3주차에서 배운내용을 넘어서는 지식들을 요구하는 과제를 수행하면서 어려운 점도 많고 벽을 마주쳤다는 느낌도 들었지만 역시나 뭔가를 찾아보고 노력해보고 공부하려는 자세와 마음가짐을 가지고 임하니 100퍼센트의 답을 한번에 찾아내지는 못했어도 본인 개인에게 있어서는 생각보다 큰 성장을 하게 된거 같다.

ps. chatGPT는 잘만 이용하면 개발공부에 참 큰 도움이 된다는 생각

0개의 댓글