C# 강의 3 ~ 4주차
접근 제한자란 클래스, 필드, 메서드 등의 접근 가능한 번위를 지정하는 키워드를 말한다. 접근 제한자는 클래스의 캡슐화를 제어한다.
사용하기 간편하게 자동 프로퍼티도 있다.
예시)
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
예시)
public class Unit
{
public virtual void Move()//가상 메서드
{//내가 부모클래스이긴한데 virtual로 해놨으니
//실형태가 다를 수 있어 자식 클래스가서 확인해라
Console.WriteLine("두발로 걷기");
}
public void Attack()
{
Console.WriteLine("Unit 공격");
}
}
이렇게 하면 자식 클래스에서 public void Move() { Console.Writeline("네발로 걷기")라고 재정의 했을 때 출력을 하면 자식 클래스의 Move()가 출력된다.
클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능이다. 제너릭을 사용하면 코드의 재사용성을 높일 수 있다. C#에서는 키워드를 사용해 제너릭을 선언한다. 하지만 제너릭 클래스나 메서드를 사용할 때는 대신 구체적인 자료형을 넣어준다. 쉽게 말해 자료형을 미리 정하지 않고 나중에 사용할 때 지정할 수 있다는 뜻이다.
예시)
class Box<T>
{
public T Value;
}
이렇게 해두면
Box<int> intBox = new Box<int>(); // int 저장용
Box<string> strBox = new Box<string>(); // string 저장용
✅강의를 들으며 실습을 하다가 생긴 궁금증... 왜 Pop()앞에는 T를 붙이고 push()는 void로 써도 되는가? 그 답은 반환값의 자료형 때문이다. Push는 값을 넣기만 하니까 반환할 값이 없다. 하지만 Pop()은 값을 꺼내 돌려줘야 하므로 어떤 자료형인지 알려줘야 한다.
이 둘을 사용하면 메서드에서 값을 반환하는 것이 아니라 매개변수를 이용하여 값을 전달할 수 있다.
또 중요한 것은 ref는 함수 호출 전 초기화가 필요하고 (ref int x = 1;) out은 필요없다는 것이다 (out int x;)
솔직히 오늘 3 ~ 4주차 강의는 쉽지 않았다. 분명 옛날에 배운것도 포함되어 있는데 왜이렇게 이해가 잘 안되는지 모르겠다. 정리는 해보았지만 나중에 예제를 더 여러가지 찾아보며 구조에 익숙해지도록 해야겠다.
내일은 5주차 강의를 듣고 과제를 조금이지만 시작해보려 한다. 필수 항목이라도 잘 구현이 됐으면 좋겠다.