일주일 간 하루에 3시간씩만 자면서 머리를 쥐어뜯고 정신을 혼미하게 만들었던 개인 프로젝트를 오늘 제출했어요. 간만에 조금 쉴 생각에 기분이 좋네요.
상속은 기존의 클래스를 확장하거나 재사용하여 새로운 클래스를 생성하는 것 이에요.
자식 클래스는 부모 클래의 멤버 (필드, 메서드, 프로퍼티 등) 를 상속받아 사용할 수 있어요.
상속은 하나의 자식클래스가 하나의 부모 클래스만 상속받는 단일상속, 하나의 자식 클래스가 여러개의 부모 클래스를 동시에 상속받는 다중 상속, 클래스가 인터페이스를 상속받는 인터페이스 상속이 있는데 C# 에서는 다중 상속을 지원하지 않아요.
사용예시
public class A
{
public void Method1()
{
// 메서드 내용
}
}
public class B : A
{ }
public class Example
{
public static void Main()
{
B b = new ();
b.Method1();
}
}
부모 클래스 A를 상속받은 자식 클래스 B의 객체를 생성해 A클래스의 메서드를 사용하는 모습입니다.
다형성은 같은 타입이지만 다양한 동작을 수행할 수 있는 능력을 말합니다.
가상메서드는 기본적으로 부모 클래스에서
vitual키워드를 사용하여 선언되고 자식클래스에서 재정의할 수 있는 메서드입니다.
이를 통해 자식클래스에서 부모 클래스의 메서드를 변경하거나 확장할 수 있어요.
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();
}
실행 결과
===========
두발로 걷기
Unit 공격
네발로 걷기
Unit 공격
두발로 걷기
네발로 걷기
===========
Unit 클래스에서 virtual 키워드로 선언한 Move() 함수를 zergling 클래스에서 오버라이드로 재정의 하는 모습입니다.
상점페이지에서 아이템을 판매하면 아이템 리스트에서 판매된 아이템의 정보를 수정해주는 로직을 구현하려고 해요.
판매할 아이템을 선택받고 선택받은 아이템의 이름 값과 같은 값을 가진 리스트 인덱스를 가져와 그 인덱스의 값을 수정해주려는 데 일반적인 검색 방법인 FindIndex() 함수로는 작동이 되지 않더라고요.
데이터 형식이 객체로 구성된 리스트에서 특정 값이 존재하는지 체크해야하는 경우에는 람다식을 사용한다고 합니다.
람다 함수는 메서드의 이름없이 메서드를 만드는 익명함수를 지칭하는 용어라고 하는데 람다에 대해서는 나중에 다시 TIL로 작성할 예정이에요.
int index = DataManager.Instance.list.FindIndex(item => item.itemname.Equals($"{temp.itemname}"));
이런 식으로 코드를 작성했습니다.
람다에 대해서 아직 공부를 하지 않아 제대로 이해를 하지는 못했지만 조만간 공부해서 이해할 수 있도록 하겠습니다.