캡슐화: 관련된 데이터와 기능을 하나의 단위로 묶는 것 -> 정보 은닉, 외부에서 직접적인 접근 제한
상속: 기존의 클래스를 확장하여 새로운 클래스 만드는 메커니즘. 코드의 구조화와 유지보수 용이
다형성: 하나의 메서드 이름이 다양한 객체에서 다르게 동작할 수 있도록 하는 것
추상화: 복잡한 시스템이나 개념을 단순화하여 기능에 집중
구조체: 값 형식이며, 스택에 할당되고 복사될 때 값이 복사된다.
클래스: 참조 형식이며, 힙에 할당되고 참조로 전달되므로 성능 측면에서 차이가 있다. 더 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해 사용
프로퍼티: 클래스 멤버, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자 메서드 조합
public string Name
{
get { return name; }
set {name = value; }
}
public string Name { get; set; }
C#은 다중상속을 지원하지 않는다.
오버로딩: 동일한 메서드지만 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것.
제너릭: 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능
out: 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
ref: 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용
Last(): 리스트의 마지막 요소 반환
Console.ReadKey(): 사용자로부터 키보드 입력을 받아온다.
실행하자마자 바로 break
public Snake(Point point, int length, Direction direction)
{
snake = new List<Point>();
this.direction = direction;
for(int i = 0; i < length; i++)
{
Point p = new Point(point.x-i , point.y, point.sym);
snake.Add(p);
point.x++;
}
}
메모리 저장 원리
자료형 값의 범위를 넘어가면 0으로 표시된다.
list.Contains(값): 특정 값이 리스트 안에 있는 지 찾기
이미 인벤토리에 가지고 있는 아이템과 상점에 있는 아이템이 같은 아이템일 때 구별을 못한다.
-> Contains 대신 이름으로 비교하는 식으로 수정했다.