스탠다드 특강 1 - C# 복습

김정환·2024년 10월 14일
0

C# 복습

클래스

  • 왜 쓰는지?
    • 데이터와 메서드를 묶어서 관리하기 위해서 -> 캡슐화, 모듈화
    • 서로 다른 데이터들을 묶어서 하나로 관리하면 편리함.
    • 데이터랑 메소드를 묶은 틀을 클래스라고 함.
      이렇게 묶인 상태로 생성된 것을 객체, 오브젝트, 인스턴스라고 함.

상속

  • 왜 쓰는지?
    • 중복적인 코드를 줄이고, 유연하게 대응하게 만들기 위해서 (공통점 만들기)
    • 거의 비슷한데 조금 다른 클래스가 존재할 수 있음.
    • 이들의 공통된 부분을 모아 하나의 클래스로 만들고 이 클래스를 두 클래스에 상속시키는 것.
    • 이럴 때 공통된 부분이 수정되어야 하면 2개를 관리하지 않고 부모 클래스를 수정하면 손쉽게 관리 가능
    • 상속은 부모 클래스의 구현을 따르되,
      추가적인 필드나 메소드를 정의하거나 부모의 클래스의 일부를 재정의할 수 있음.

virtual, abstract, override

  • 왜 쓰는지?
    • 유연성 있게 만들기 위해서
      • virtual : 임시, 최초 버전 (강제성 - 없음, 단 경고만 띄움)
      • abstract : 약속의 성격, 미완성, 인터페이스 성격 (강제성 - 있음, 구현은 하위 클래스에서 반드시 필요)
      • override : 최종 버전
    • 부모에서 한 정의를 자식에서 변경해서 써야할 경우가 있음.(재정의)
      게임에서 캐릭터가 직업별로 다른 방식으로 공격하는 경우 등등.

추상 클래스 abstract

  • abstract 키워드를 붙여 메소드의 구현은 미완결로 의미함.
  • abstract 키워드는 클래스는 미완결이므로 인스턴스화되면 안되는 것을 알려주는 것
  • 추상 클래스는 추상 메서드 없이도 만들 수 있음.

프로퍼티 property

  • 왜 쓰는지?
    • 필드를 더 편리하게 쓰기 위해서
    • 필드를 열고는 싶지만 직접 노출하고 싶진 않을때
    • 필드를 변경했을 때 특정한 방식으로 처리가 일어나게 하고 싶을 때
    • 복잡한 접근제한자 설정을 하고 싶을 때
    • getter, setter를 개별 설정해서 원하는 방식으로 작성 가능

열거형 enum

  • 왜 쓰는지?
    • 숫자에 의미를 부여하고 싶을 때
    • 코드의 가독성이 높아짐.
    • 매직 넘버(특정 숫자에 의해 코드가 결정)를 줄일 수 있음.
      • 매직 넘버 : 리터럴 숫자를 코드 내에 바로 써서 쓰는 것
    • 또한 숫자를 밀려서 수정하는 것은 매우 안좋은 습관.
      • 그러므로 숫자 간격은 널널하게 설정하는 것도 중요.
    • 기본 4 byte int형

인터페이스 interface

  • 왜 쓰는지?
    • 공통점이 있는 대상을 표현하기 위해서

    • C#에서 클래스는 단일 상속만 가능 - 다이아몬드 문제 방지용

    • 다중 상속이 필요한 경우, 인터페이스 상속을 권장함.

      • 인터페이스 = 약속
    • 추상클래스에서 더 나아가 모든 메소드가 추상 메소드라고 생각하면 됨.

      • 추상클래스는 구현을 포함할 수도 있음.
      • 인터페이스에는 구현을 포함하지 않는 것을 기본으로 함.
    • 인터페이스 상속 시, 특정 메소드를 포함한다라는 것을 알게 됨

      • 사용 시, 인터페이스를 상속 받았는지 유무로 구현된 메서드를 사용하기도 함.
      try
      {
        IInteractable cheat = new Chest();
        chest.Interactable();
      }
      catch
      {
      	//~~~
      }
      
      
      //

추상 클래스 vs 인터페이스

  • 추상클래스
    • 필드 포함, 구현 가능, 다중 상속에 사용 x
  • 인터페이스
    • 필드 선언 불가능, 프로퍼티는 가능, 다중 상속에 사용

델리게이트 delegate

  • 왜 쓰는지?
    • 메소드를 변수처럼 쓰고 싶을 때, 메서드의 변수화
    • 이벤트 기반으로 설계하고 싶을 때 (a.k.a 옵저버 패턴)
    • 어떤 메서드가 실행될 지 동적으로 결정시킬 수 있도록 할 수 있다.
    • 델리게이트를 편하게 사용할 수 있게 만든 것이 Action, Func
      • Func : 리턴이 있는 델리게이트
        • Func<매개변수, ..., 리턴 타입>
      • Acion : 리턴이 없는 델리게이트
        • Acion<매개변수, ...>

무명 함수 : 람다식

  • 일회성으로 사용할 기능의 경우, 메서드로 만들 이유가 없음.
  • (매개변수) => {구현 내용} : 무명 함수로 만들어서 필요한 경우에만 사용.

event 키워드

  • 왜 쓰는지?
    • 일반적으로 delegate를 선언해서 쓴다면 이벤트 구독하는 것도 자유, 발생하는 것도 자유롭게 사용할 수 있음. 즉, 누구나 이벤트를 발생시켜서 호출할 수 있다는 단점이 생김.
      * event 키워드를 쓰면 선언된 스크립트, 클래스만 이벤트를 발생시킬 수 있음.

옵저버 패턴

이벤트 기반으로 설계할 때 많이 활용되는 패턴이 옵저버 패턴.

연습

프로그래머스 Lv.1~2 단계 풀어보기.
꾸준하게 풀어본다면 확실히 도움이 됨.
Lv. 3까지 풀 수 있다면 어지간한 기업의 코딩테스트는 수월하게 통과할 수 있을 것임.

profile
사파 개발자

0개의 댓글