2024/01/03 TIL
'오늘의 일에서 나는 어떤 것을 배웠는지' - 학습
인터페이스 / 열거형
인터페이스 : 클래스에 적용하는 일종의 제약조건 / 추가 파츠.
인터페이스를 상속한 클래스는 반드시 인터페이스의 멤버를 구현해야한다.
인터페이스 안에는 주로 빈 함수를 동작 내용없이 이름과 자료형만 선언만 해둔다.
인터페이스를 참조해서 공통된 부분이 있는 클래스 인스턴스들을 통합해 조작할 수 있다.
일종의 추가 장착 파츠
선언 방법 :
Interface (인터페이스 이름)
{
(인터페이스 내용)
}
열거형 : 자료를 묶어 나열한 형태의 데이터 타입.
선언 방법 :
enum (열거형 이름)
{
값1,
값2,
값3...
}
정수 / 문자열만 가능(실수는 불가능)
따로 초기화 하지 않을 시 첫번째 값에서 +1씩 증가함.
예외처리
예외는 프로그램 실행 중에 발생하는 예기치 않은 상황을 의미함
- `try-catch` 블록을 사용하여 예외 처리를 수행.
- `try` 블록 내에서 예외가 발생할 수 있는 코드를 작성하고, `catch` 블록에서 예외를 처리.
try (시도해봐)
{
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 ex)
{
// ExceptionType1에 해당하는 예외 처리
}
catch (ExceptionType2 ex)
{
// ExceptionType2에 해당하는 예외 처리
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드 (케이스의 디폴트값과 유사함 / 하지만 중간에 예외가 걸려도 실행된다.)
}
사용자 정의 예외 처리
클래스 : Exception을 상속받아 사용
throw로 예외를 발동시킬 수 있음.
값형과 참조형
값형 = 값을 갖고 있는 타입
참조형 = 스크린으로 참조하는 원본 대상을 비춰주는 타입
object = 모든 자료형을 포괄하는 상위 자료형
박싱과 언박싱
object obj = num1;
obj는 값인 num1을 박싱한 객체를 참조하는 상태.
int num2 = (int)obj;
num2는 obj가 참조한 객체를 언박싱해 10.
델리게이트 :메서드 포인터.
그러나 다중으로 연결할 수 있다.
한번에 여러 개의 함수를 연결하고 호출 가능!
함수명?.(매개변수)
에서 ?는 함수 결과가 null일 시 실행하지 않음.
null이 아닐 경우에만 실행함을 뜻하는 조건부 연산자.
이벤트와 델리게이트
델리게이트(Delegate)
델리게이트는 메서드의 참조를 저장하고 호출할 수 있는 타입.
델리게이트를 사용하여 메서드를 다른 코드에 전달하고 호출할 수 있다.
일반적인 델리게이트는 클래스 내부나 외부에서 모두 호출 가능하다.
이벤트(Event)
이벤트는 특정 상황이나 동작이 발생했을 때 다른 코드에 알리기 위한 메커니즘.
이벤트는 특별한 형태의 델리게이트로, 델리게이트와 함께 사용된다.
이벤트는 클래스 내부에서만 발생시키고, 외부에서는 직접 호출할 수 없다.
다른 클래스에서 해당 이벤트에 대응하는 메서드(이벤트 핸들러)를 등록하고, 이벤트가 발생하면 등록된 모든 이벤트 핸들러 메서드가 호출된다.
이벤트에 메서드를 등록할 때는 += 만 사용 가능하다. 할당연산자 =는 사용 불가능.
람다
-익명 메서드.
-메서드의 이름 및 메서드 선언을 생략하고 이름없는 함수(함수의 형식과 알맹이만 갖춘 것)을 정의할 수 있다.
형식
(parameter_list) => expression
-간단한 메서드, 몇번 안쓸 메서드를 사용할 때 쓰면 일일이 메서드를 선언하는 번거로움을 줄일 수 있음
-델리게이트와 같이 쓰면 활용도 up
-`Func`과 `Action`
델리게이트를 대체하는 미리 정의된 제네릭 형식.
- `Func`: 값을 반환하는 델리게이트. 마지막 자료형식은 반환 형태를 나타냄. 예를 들어, `Func<int, string>`는 `int`를 입력으로 받아 `string`을 반환하는 메서드를 나타냄.
- `Action`은 값을 반환하지 않는 델리게이트. `Action`은 매개변수를 받아들이지만, 반환 타입이 없다.
예를 들어, `Action<int, string>`은 `int`와 `string`을 입력으로 받고, 아무런 값을 반환하지 않는 메서드를 나타냄.
-둘은 미리 정의되어 있기 때문에 일일이 델리게이트를 선언할 필요 없이 바로바로 등록해 쓸 수 있음.
LINQ
간단하고 편리한 작업 도구
예시
var evenNumbers = from num in numbers // numbers를 num이라고 부르겠다.
where num % 2 == 0 // num 중에서 짝수를 선별할거고, true인 값만 골라낼거야.
select num; // 그리고 where에서 선별한 값을 num에 저장할거야.
Nullable 형 '?'
Nullable<자료형>
값형이 null을 값으로 가질 수 있도록 허용한다.
.HasValue 로 값이 null인지 아닌지 확인할 수 있다.
'??'
그 값이 null이면 대신 ?? 뒤에오는 값을 반환한다.
예시) nullableInt ?? 0;
StringBuilder는
Append(), Insert(), Replace(), Remove() 등 다양한 메서드를 제공하여 문자열에 대한 추가, 삽입, 치환, 삭제 작업을 수행할 수 있다.
-메모리 관리에 효율적
- Append: 문자열을 뒤에 추가한다.
- Insert: 문자열을 지정한 위치에 삽입한다.
- Remove: 지정한 위치에서 문자열을 제거한다.
- Replace: 문자열의 일부를 다른 문자열로 대체한다.
- Clear: StringBuilder의 내용을 모두 지운다.
StringBuilder sb = new StringBuilder();
// 문자열 추가
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");
// 문자열 삽입
sb.Insert(5, ", ");
// 문자열 치환
sb.Replace("World", "C#");
// 문자열 삭제
sb.Remove(5, 2);
// 완성된 문자열 출력
string result = sb.ToString();
Console.WriteLine(result);
'오늘의 나는 무엇을 잘했는지' - 성취
인터페이스, 열거형, 예외처리, 값과 참조, 람다, LINQ 등의 개념에 대해 학습하고 정리했다.
과제 - Text 게임 만들기의 기본 틀을 일부 설계했다.
'오늘의 나는 어떤 문제를 겪었는지, 앞으로 어떻게 해결할 것인지' - 개선
아직 전부 생소한 개념들이기 때문에 실전에서 적용하려고 하면 생각이 안나거나 다시 찾아봐야 할 것 같다.
그러므로 복습과 실전 적용을 꾸준히 반복해서 익숙해지려고 하는 노력이 필요하겠다.