getter나 setter가 설정된 함수
private로 설정한 변수 사용하기 → getter/setter 사용
굳이 밖에서 변경이 필요없는 경우 setter를 빼도 됨.
get {} 안에는 return이 있어야 되고, set {}은 return이 없는 void 형식이어야 한다.
get, set 내부에 특정 로직(조건문 등)을 작성할 수 있다.
무분별한 public 사용보다 getter/setter를 잘 사용하자.
다이아몬드 문제, 설계의 복잡성 증가, 이름 충돌과 충돌 해결의 어려움, 설계의 일관성과 단순성 유지
코드의 재사용성, 다중 상속 제공, 유연한 설계
클래스가 구현해야 하는 멤버들을 정의하는 것
클래스의 일종이 아니며, 클래스에 대한 제약 조건을 명시하는 것
클래스가 인터페이스를 구현할 경우, 모든 인터페이스 멤버를 구현해야 한다.
인터페이스는 다중 상속을 지원한다.
객체 이동 예시
static void Main(string[] args)
{
//IMovable 참조를 한다
IMovable movableObject1 = new Player();
IMovable movableObject2 = new Enemy();
movableObject1.Move(1, 2);
movableObject2.Move(1, 9);
//좌표만 입력하는 것으로 동작 시킬 수 있다.
//Player와 Enemy는 둘이 서로 다른 클래스이고, 서로 다른 구현을 하고 있지만
//Interface라는 것으로 기능을 통합할 수 있다.
}
//인터페이스 구현해보기
public interface IMovable
{
void Move(int x, int y);
}
public class Player : IMovable
{
public void Move(int x, int y)
{
//이동 구현
}
}
public class Enemy : IMovable
{
public void Move(int x, int y)
{
//이동 구현
}
}
Player와 Enemy 클래스 생성
두 클래스 모두 이동을 해야 되기 때문에 이동에 대한 제약을 걸어줄 것임. → 두 클래스에 인터페이스를 달아주기
클래스 안에 각자 이동 구현하기
각자 이동에 대한 처리가 다를 수 있기에(Player는 우리 입력으로 이동하고, 적은 자동 길 찾기로 이동을 하는 등)
아이템 사용 예시
static void Main(string[] args)
{
Player player = new Player();
Item item = new Item() { Name = "Health Potion" }; //초기화를 위해서 값을 미리 세팅해줌
player.UseItem(item);
}
public interface IUsable
{
void Use();
}
public class Item : IUsable
{
public string Name { get; set; } //자동 프로퍼티, 필드의 역할도 같이 한다.
public void Use() //인터페이스 상속받았기 때문에 구현해주기
{
Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
}
}
//아이템을 사용할 플레이어 생성
public class Player
{
public void UseItem(IUsable item) //상속받은 인터페이스로 참조하여 사용
{
item.Use();
}
}
사용해야 하는 아이템들의 종료는 많다.
그 애들을 전부 다 하나의 클래스로 구현하는 것이 아니라, 다양한 클래스로 구현하게 될 텐데
거기서 IUsable만 상속받아서 구현을 해주면 Player의 UseItem(...)이라고 하는 메소드를 그냥 사용할 수 있다.
이 하나의 차이가 굉장한, 코드에서 효율성을 따지게 된다.
Item이라고 하는 부분에 인터페이스를 상속받은 부분만 빼가서 걔가 가지고 있는 기능으로써 실행을 한다.
한 아이템이 있는데 주워지기도 해야 하고, 버려지기도 해야한다. → IItemPickable, IDroppable 둘 다 상속받게 만들어주면 된다. = 이 아이템에는 주워지기도 하고, 버려지기도 할 수 있는 기능이 강제되어 있다.
주워만지고 버릴 수 없는 아이템이다. → IItemPickable만 상속

원 계획의 1.5배~2배 정도 여유있는, 지킬 수 있는 계획 세우기
GET (지식을 얻고)
시도 : 만들어 보고 따라해 보고 / 원동력은 성취감 그것은 나의 에너지
소통 : (다른 개발자와의 소통) 같은 기능 다른 구현?_?
발굴 : 땅을 파듯 발굴하기!! 게임으로 치면 stage1-2-3...Boss 방으로 가는 것처럼...
SOLVE (GET에서 얻은 지식 의문점 해소)
1. 오류 메세지 읽어보기
2. 디버깅 사용
3. 에러 로그에서 뭐라 하는 건지 모르겠다. → 구글은 모든 것을 알고 있다.
4. AI야 내게 힘을 줘, 질문을 할 땐 최대한 상세하게 (구현의 용도X 이해의 용도O)
쉽게 얻은 지식은 쉽게 잊혀진다
안 좋은 점: 버그나 수정할 부분이 생기면 어려워진다.
오랫동안 붙잡고 있는 것 또한 낭비, 그럴 땐 튜터님께 ㄱㄱ
SET (지식 흡수)
머릿속에 배운 내용을 세팅한다는 의미
머릿속에 서랍을 만들어서 정리하는 것과 같다. 나중에 분명 큰 도움이 될 것입니다!
???: TIL 작성하셨나요?

계속해서 코딩하기
죽이 되든 밥이 되든 계속 하게 되면 머리가 아닌 몸이 익히게 될 것... 코딩 근육!
다른 분들과 코드리뷰, 코딩 테스트 아주👍
지금 제일 중요한 건 "나의 성장" 튜터님을 만날 수 있는 시간을 낭비하지 말자

문제를 마주치는 것을 두려워하지 말고 기회라고 생각한다면 마음이 좀 더 편할 것이라고 생각합니다.
🤔 다른 사람이 작성한 코드를 볼 때?
👉 같은 기능을 구현한다고 하면 가독성, 성능 중점적으로 보면 도움이 될 듯
🤔 공부한 내용이 이해가 되지 않을 때, 외워서라도...
👉 지금은 우선 순위를 두고 좀 더 중요하다고 생각되는 것을 외우고, 나머지는 나중에 사용할 때 검색해서 사용할 수 있을 만큼만 알아두자.
😇 튜터님
저는 1,3,7,21 학습법을 씁니다.
첫날 공부한 내용을, 3일, 7일, 21일 뒤에 해당 키워드를 읽어보고 무슨 내용인지 떠올립니다!
예를 들어서 함수를 공부했다고 하면, 3일 뒤에 함수가 뭐였더라? 하고 생각하고 다시 한번 리마인드 시켜줍니다.