내일배움캠프 7일차

박나연·2025년 4월 15일

내배캠

목록 보기
7/69

C# 강의 3 ~ 4주차

오늘의 키워드 : 조금 어렵고 중요한 오늘 개념

구초제 vs 클래스

  • 구조체와 클래스는 모두 사용자 정의 형식을 만드는 데 사용될 수 있다.
  • 구조체는 상속을 받을 수 없고 클래스는 단일 상속 및 다중 상속이 가능하다.
  • 구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합하며 클래스는 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해 사용된다.

접근 제한자

  접근 제한자란 클래스, 필드, 메서드 등의 접근 가능한 번위를 지정하는 키워드를 말한다. 접근 제한자는 클래스의 캡슐화를 제어한다.

  • public : 외부에서 자유롭게 접근 가능
  • private : 같은 클래스 내부에서만 접근 가능
  • protected : 같은 클래스 내부와 상속받은 클래스에서만 접근 가능

생성자

  • 생성자 : 객체가 생성될 때 호출되는 특별한 메서드. 객체를 생성할 때 new 키워드와 함께 호출된다. 생성자는 여러 개 정의할 수 있으며 매개변수의 개수와 타입에 따라 다른 생성자를 호출할 수 있다(오버로딩).

프로퍼티 구문

  • get 접근자 : 프로퍼티의 값 반환
  • set 접근자 : 프로퍼티의 값 설정
  • 프로퍼티를 사용하여 필드 접근을 제어하면 코드의 안정성과 가독성을 높일 수 있다.

사용하기 간편하게 자동 프로퍼티도 있다.
예시)

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

가상 메서드

  • 부모 클래스에서 정의되고 자식 클래스에서 재정의 할 수 있는 메서드
  • virtual 키워드를 사용하여 선언되며 자식클래스에서 필요에 따라 재정의 될 수 있다.

예시)

    public class Unit
    {
        public  virtual void Move()//가상 메서드 
        {//내가 부모클래스이긴한데 virtual로 해놨으니 
        //실형태가 다를 수 있어 자식 클래스가서 확인해라
            Console.WriteLine("두발로 걷기");
        }

        public void Attack()
        {
            Console.WriteLine("Unit 공격");
        }
    }

이렇게 하면 자식 클래스에서 public void Move() { Console.Writeline("네발로 걷기")라고 재정의 했을 때 출력을 하면 자식 클래스의 Move()가 출력된다.

추상 클래스

  • 직접적으로 인스턴스를 생성할 수 없고 주로 상속을 위한 베이스 클래스로 사용된다.
  • 추상 클래스는 abstract를 사용하여 선언되며, 추상 메서드를 포함할 수 있다.
  • 추상 메서드는 자식 클래스에서 반드시 구현되어야 한다.

오버라이딩, 오버로딩

  • 오버라이딩
    - 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의 하는 것을 말한다.
  • 오버로딩
    - 동일한 메서드 이름을 갖고 있지만 매개변수의 개수, 타입 등이 다른 여러 개의 메서드를 정의하는 것을 말한다.

제너릭

  클래스나 메서드를 일반화시켜 다양한 자료형에 대응할 수 있는 기능이다. 제너릭을 사용하면 코드의 재사용성을 높일 수 있다. 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()은 값을 꺼내 돌려줘야 하므로 어떤 자료형인지 알려줘야 한다.

out & ref

  • out : 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
  • ref : 메서드에서 매개변수를 수정해 원래 값에 영향을 주는 경우에 사용

이 둘을 사용하면 메서드에서 값을 반환하는 것이 아니라 매개변수를 이용하여 값을 전달할 수 있다.
또 중요한 것은 ref는 함수 호출 전 초기화가 필요하고 (ref int x = 1;) out은 필요없다는 것이다 (out int x;)

인터페이스 vs 추상클래스

  • 인터페이스
    구현을 갖지 않는다
    다중 상속이 가능하다
    클래스 간의 결합도를 낮춘다.
    인터페이스를 구현하는 클래스가 모든 동작을 구현해야 한다는 의무를 가지기 때문에 작업량이 증가할 수 있다는 단점이 있다.
  • 추상클래스
    일부 동작의 구현을 가진다.
    단일 상속만 가능하다.
    상속을 통해 밀접하게 결합된 클래스를 형성하므로 유연성이 제한될 수 있다는 단점이 잇다.

마무리하며

  솔직히 오늘 3 ~ 4주차 강의는 쉽지 않았다. 분명 옛날에 배운것도 포함되어 있는데 왜이렇게 이해가 잘 안되는지 모르겠다. 정리는 해보았지만 나중에 예제를 더 여러가지 찾아보며 구조에 익숙해지도록 해야겠다.

내일 할 일

  내일은 5주차 강의를 듣고 과제를 조금이지만 시작해보려 한다. 필수 항목이라도 잘 구현이 됐으면 좋겠다.

0개의 댓글