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 : 리턴이 있는 델리게이트
- Acion : 리턴이 없는 델리게이트
무명 함수 : 람다식
- 일회성으로 사용할 기능의 경우, 메서드로 만들 이유가 없음.
- (매개변수) => {구현 내용} : 무명 함수로 만들어서 필요한 경우에만 사용.
event 키워드
- 왜 쓰는지?
- 일반적으로 delegate를 선언해서 쓴다면 이벤트 구독하는 것도 자유, 발생하는 것도 자유롭게 사용할 수 있음. 즉, 누구나 이벤트를 발생시켜서 호출할 수 있다는 단점이 생김.
* event 키워드를 쓰면 선언된 스크립트, 클래스만 이벤트를 발생시킬 수 있음.
옵저버 패턴
이벤트 기반으로 설계할 때 많이 활용되는 패턴이 옵저버 패턴.
연습
프로그래머스 Lv.1~2 단계 풀어보기.
꾸준하게 풀어본다면 확실히 도움이 됨.
Lv. 3까지 풀 수 있다면 어지간한 기업의 코딩테스트는 수월하게 통과할 수 있을 것임.