오늘 배운 것 중 기억해둘 것
class << 얘는 형식을 정해주는것
class Person // 사람이라는게 있다고 친다
{
public string Name; // 사람에게 이름을 부여해주는 것
public int Age; // 사람의 나이를 정해주는 것
public string Hobby; // 사람의 취미를 정해주는 것
public void PrintInfo()
{
Console.WriteLine("Name: " + Name);
Console.WriteLine("Age: " + Age);
Console.WriteLine("Hobby: " + Hobby);
}
}
static void Main()
{ // 객체화를 통해 주어진 형식에 맞게 새로운 사람을 만들어낸다
Person Celine = new Person();
Celine.Name = "Selin";
Celine.Age = 24;
Celine.Hobby = "Explosive";
Celine.PrintInfo();
}
ㄴ 이런식으로 쓸 수 있다
클래스에 생성자를 작성하지 않아도 디폴트 생성자가 자동으로 생성된다.
만약 사용자가 직접 정의한 생성자가 있는 경우 디폴트 생성자는 생성되지 않는다.
단! 생성자를 생성했다 할찌라도 객체화가 되어있지 않으면 실체화가 되지 않는다.
(클래스는 말그대로 붕어빵을 찍어내는 붕어빵틀이기 때문)
소멸자는 사용되지 않는 객체를 가비지 컬렉터가 메모리 해제를 할때 자동으로 호출되며, 명시적으로 소멸자를 호출하는 것은 권장되지 않는다.
프로퍼티 = 중간다리 역할 (접근제한자를 private로 설정해도 프로퍼티를 활용하면 외부에서도 접근이 가능해진다.)
private set을 해주면 프로퍼티임에도 접근 제한을 둬서 설정은 내부에서만 가능하게끔 해줄 수 있고,
if 문을 넣어주면 프로퍼티 내부에서 유효성 검사 후 유효할때만 value값으로 설정해줄 수 있다.
상속
부모 클래스의 항목을 자식 클래스에서도 사용 가능하게 해주는 것
public class Animal // 부모 클래스
public class Dog : Animal // 자식 클래스는 새로운 클래스 뒤에 부모클래스의 이름을 붙여주면 된다.
자식 클래스에서 부모 클래스의 메서드와 중복된 메서드를 작성하여 사용하게 될 경우, 자식 클래스에서 재구현이 되지만, 부모 클래스의 메서드는 가려지게 되는데 이는 다형성을 유지하는 방법이 아니기에 좋은 방법은 아님.
상속을 하면서도 다형성을 유지하려면 virtual 키워드를 사용한 가상 메서드를 사용하는 방법 등을 활용하면 된다. (필요에 따라서는 재정의도 할 수 있음)
virtual이라고 선언을 해두면 자식 클래스에서 재구현할 수 있다고 선언하는 것.
제너릭
클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있게 하는 기능 // 코드를 하나만 짜놓고 다양한 자료형을 사용할 수 있게 해준다는 것
사용 시점에 자료형이 결정됨
out, ref // 보통 반환값으로 받는 애들을 매개변수로 직접 받아올 수 있는 애. 사용할때 주의 요망
interface - 클래스가 구현해야하는 멤버들을 정의하는 것
쉽게 말해 클래스에게 이것을 해야한다고 제약을 거는 것이다.
Enum - 일련의 연관된 상수들을 명명할 수 있음. 형변환을 해주고 그것을 써야 사용이 가능
try-catch 블록을 활용하여 예외 처리를 수행할 수 있는데 finally 블록은 예외 발생 여부없이 무조건적으로 실행되는 블록이다. (finally는 필요하지 않다면 생략 가능)
---
오늘의 회고
오늘 특히 기억에 남았던건 드디어 내가 클래스와 객체에 대해서 이해했다는 것이다.
오전 중 내가 클래스와 객체에 대해 이해했다는 것을 깨닫게 되자 깨달음의 박수가 절로 나왔다.
그리고 4주차 강의를 마주하자 또 다시 벽과 마주했다ㅋㅋㅋ
일단 급한 불을 꺼야한다는 생각에 강의는 잠깐 멈추고 개인과제를 진행해보았다.
클래스와 객체화를 적용해보자 시작부터 완전히 틀어졌음을 깨닫게 되었다.
스파르타 마을 시작씬, 인벤토리, 상점 등의 뼈대만 남기고 다 갈아 엎은 뒤 다시 시작하기로 했다.
먼저 아이템과 스탯을 클래스화 하는거부터 시작이다....
아이템과 스탯을 각각 PlayerStat, ItemData로 클래스화 한뒤, 이것들을 다른 메서드에 써먹을 수 있도록 각각
private static PlayerStat playerStat;
private static ItemData itemData;
로 필드화하였다.
또한 각 클래스 내부에 필요로 하는 변수들을 지정해주고, 클래스 내부에서 생성자를 만들어 매개변수를 지정해주어 아이템리스트나 스탯 등에 대응할 수 있도록 해줬다.
또한 단순히 인벤토리엔 이게 있다. 상태창에는 이게 있다. 가 아니라 초기 능력치와 초기 아이템 설정을 해주고 그것을 main에 넣은 다음 기존에 스파르타마을씬이었던 main과 스파르타마을씬을 분리했다.
그 뒤 playerStat = new PlayerStat() 하여 초기 능력치를 설정하고 상태창에 적용하였다.
이렇게 해서 상태보기 설정을 완료했다.
내일 6시까지 열심히 달려서 최소한 필수기능 구현만이라도 해놓자.. 가보자..