get
, set
get만 하면 읽기전용 변수가 됨
반대로 set만 선언하면 저장전용 변수가 됨
무결성을 유지하여 정보를 은닉하기 위해서
[접근 제한자] [데이터 타입] 프로퍼티명
{
get
{
// 필드를 반환하거나 다른 로직 수행
}
set
{
// 필드에 값을 설정하거나 다른 로직 수행
}
}
class Human
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Person
{
public string Name { get; set; }
}
오버라이딩
오버로딩
virtual
우리가 자주 쓰는 Console.WriteLine();
도 여러개의 오버로딩이 되어 있습니다.
접근자와 반환타입 사이에 선언
예시
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 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");
}
}
<T>
형태의 키워드를 이용하여 제너릭을 선언합니다.<T>
대신 구체적인 자료형을 넣어줍니다.- 제너릭은 클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능입니다.
- 제너릭을 사용하면 코드의 재사용성을 높일 수 있습니다.
- C#에서는 **`<T>`** 형태의 키워드를 이용하여 제너릭을 선언합니다.
- 제너릭 클래스나 메서드에서 사용할 자료형은 선언 시점이 아닌 사용 시점에 결정됩니다.
- 제너릭 클래스나 메서드를 사용할 때는 **`<T>`** 대신 구체적인 자료형을 넣어줍니다.
out
& ref
// out 키워드 사용 예시
void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b;
remainder = a % b;
}
int quotient, remainder;
Divide(7, 3, out quotient, out remainder);
Console.WriteLine($"{quotient}, {remainder}"); // 출력 결과: 2, 1
// ref 키워드 사용 예시
void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
int x = 1, y = 2;
Swap(ref x, ref y);
Console.WriteLine($"{x}, {y}"); // 출력 결과: 2, 1
ref
매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경할 수 있습니다. 이는 예기치 않은 동작을 초래할 수 있으므로 주의가 필요합니다.ref
매개변수는 값에 대한 복사 없이 메서드 내에서 직접 접근할 수 있기 때문에 성능상 이점이 있습니다. 그러나 너무 많은 매개변수를 ref
로 전달하면 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있습니다. 적절한 상황에서 ref
를 사용하는 것이 좋습니다.out
매개변수는 메서드 내에서 반드시 값을 할당해야 합니다. 따라서 out
매개변수를 전달할 때 해당 변수의 이전 값이 유지되지 않으므로 주의해야 합니다.ConsoleKeyInfo 객체이름;
이렇게 선언한 객체에 입력한 키를 넣을 수 있다
예시
ConsoleKeyInfo 객체이름;
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.LeftArrow:
{
headDirection = 3;
break;
}
case ConsoleKey.RightArrow:
{
headDirection = 4;
break;
}
case ConsoleKey.UpArrow:
{
headDirection = 1;
break;
}
case ConsoleKey.DownArrow:
{
headDirection = 2;
break;
}
}
콘솔 입력을 감지
예시
while (Console.KeyAvailable == false)
{
내용
}
콘솔에 입력이 없으면 해당 내용을 실행
Queue보다 안전한 Queue
객체명.TryDequeue(out 변수); // 반환 bool
객체명.TryPeek(out result);
객체명.Enqueue(값);
ConcurrentQueue를 이용해 스네이크 게임 구현하기
금일 완성 못한 3주차 숙제 - 스네이크 게임 및 블랙잭 만들기