오늘의 학습키워드
"고급문법"
✏️오늘 배운 내용
● 다중상속의 문제
- 같은 이름의 멤버를 가지고 있을때 어떤 부모 클래스의 멤버를 사용해야하는지 모호해진다.
- 클래스 간의 관계가 복잡해진다.
- 이름 충돌과 충돌 해결의 어려움이 있다.
- 코드의 복잡성을 증가시키고 유지 보수성이 저하될 수 있다.
● 인터페이스(interface) : 클래스가 구현해야 하는 멤버들을 정의하는것
💡 사용하는 이유는?
코드의 재사용성
다중 상속 제공
유연한 설계
고블린 클래스가 IMonster인터페이스를 구현할경우 모든 인터페이스 멤버를 구현안하면
아래와 같이 에러가 뜬다.
▼예제
모든 인터페이스 멤버를 구현하면 에러는 사라진다.
인터페이스(interface) | 추상클래스(abstract class) |
추상적인 동작만 정의 | 일부 동작의 구현,추상 메서드 포함 |
다중 상속 | 단일상속 |
코드의 재사용성 | 코드의 중복 방지,확장성 제공 |
모든 동작 구현으로 작업량 증가 | 유연성 제한 |
● 열거형(Enum) : 일련의 연관된 상수를 명명
💡 사용하는 이유는?
가독성
자기 문서화
스위치 문과의 호환성
▼예제
enum Dragon
{
[Description("불용")]
FireDragon,
[Description("얼음용")]
IceDragon,
[Description("어둠용")]
BlackDragon
}
[Description()]은 enum의 설명을 적을때 쓴다.
▼ Description 불러오기
public string GetDescription(Enum e)
{
FieldInfo field = e.GetType().GetField(e.ToString());
if (field != null)
{
var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));
if (attribute != null)
{
return attribute.Description;
}
}
return e.ToString();
}
위와 같은 코드로 enum의 Description을 불러올 수 있다.
● 예외 처리(try-catch)
💡 사용하는 이유는?
안정적으로 프로그램을 유지
오류 상황을 적절히 처리하고 프로그램의 실행을 계속
디버깅을 용이하게 한다.
try
{
// 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
// 예외 처리
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드, 생략가능
}
▼예외 종류
더보기
- ArgumentException 메서드에 전달 되는 null이 아닌 인수가 잘못되었다.
- ArgumentNullException 메서드에 전달 되는 인수가 null이다.
- ArgumentOutOfRangeException 인수가 유효한 값 범위를 벗어났다.
- DirectoryNotFoundException 디렉터리 경로 일부가 잘못되었다.
- DivideByZeroException 0으로 나누었다.
- DriveNotFoundException 드라이브가 없거나 사용할 수 없다.
- Exception 모든 예외를 처리한다.
- FileNotFoundException 파일이 없다.
- FormatException 문자열에서 변환할 수 있는 적절 한 형식이 아니다.
- IndexOutOfRangeException 인덱스가 배열 또는 컬렉션의 범위를 벗어났다.
- InvalidOperationException 개체의 현재 상태에서 메서드 호출을 사용할 수 없다.
- KeyNotFoundException 컬렉션의 멤버에 액세스 하는 데 지정 된 키를 찾을 수 없다.
- NotImplementedException 메서드 또는 작업이 구현 되지 않았다.
- NotSupportedException 메서드 또는 작업이 지원 되지 않는다.
- ObjectDisposedException 삭제 된 개체에 대한 작업을 수행했다.
- OverflowException 산술, 캐스팅 또는 변환 작업을 수행 하면 오버플로가 발생한다.
- OverflowException 작업 결과가 대상 데이터 형식의 범위를 벗어났다.
- PathTooLongException 경로 또는 파일 이름이 시스템에서 정의한 최대 길이를 초과한다.
- PlatformNotSupportedException 현재 플랫폼에서 작업이 지원 되지 않는다.
- RankException 차원 수가 잘못되었다.
- TimeoutException 작업에 할당 된 시간 간격이 만료 되었다.
- UriFormatException 잘못 된 URI (Uniform Resource Identifier)가 사용 되었다.
● 델리게이트(Delegate)
💡 델리게이트란?
메서드를 참조하는 타입
메서드를 매개변수로 전달하거나 변수에 할당가능
delegate void OnDamagedEvent();
//메서드 등록
OnDamagedEvent damageEvent = PlayDamageEffect;
void PlayDamageEffect()
{
Console.WriteLine("피 흘리는 효과 재생");
}
● Func과 Action
💡 Func,Action란?
델리게이트를 대체하는 미리 정의된 제너릭 형식
- Func: 값을 반환하는 델리게이트 : 마지막 제너릭 형식 매개변수를 반환
- Action : 값을 반환하지 않는 델리게이트
● 람다(Lamda)
💡 람다란?
익명 메서드를 만드는 방법
delegate void OnDamagedEvent();
OnDamagedEvent onDamaged = () =>
{
Console.WriteLine("공격받았다!");
};
● Linq
💡 LINQ란?
.NET 프레임워크에서 제공되는 쿼리 언어 확장
필터링,정렬,그룹화,조인등 다양한 작업 수행
- Where : 조건식을 지정하여 데이터를 필터링
- All : 모든 요소가 임의의 조건을 모두 만족하는지 평가
- GroupBy : 데이터를 그룹화
- OrderBy : 오름차순으로 정렬
- OrderByDescending : 내림차순으로 값을 정렬
- Select :조회할 데이터를 지정
● Nullable
💡Nullable란?
null 값을 가질 수 있는 값형에 대한 특별한 형식
값형 변수에 null 값을 지정할 수 있는 방법을 제공해서 null인지 아닌지 확일할때 쓴다.
// Nullable 형식 변수 선언
int? number = null;
● 문자열빌더(StringBulider)
💡StringBulider란?
문자열에 대한 추가,삽입,치환,삭제 작업을 수행가능
내부버퍼를 사용하여 문자열을 조작
- Append: 문자열을 뒤에 추가
- Insert: 문자열을 지정한 위치에 삽입
- Remove: 지정한 위치에서 문자열을 제거
- Replace: 문자열의 일부를 다른 문자열로 대체
- Clear: StringBuilder 초기화.
💭오늘의 회고
오늘 배운 내용으로 더 간결하고 유연하게 코드를 작성 할 수 있을것같다.
과제에 적용하면서 복습하고 더 나은 개발자로 성장하도록 노력할것이다.
'TIL' 카테고리의 다른 글
🔥내일배움캠프 10일차 TIL (0) | 2025.02.05 |
---|---|
🔥내일배움캠프 9일차 TIL (0) | 2025.02.04 |
🔥내일배움캠프 7일차 TIL (1) | 2025.01.31 |
🔥내일배움캠프 6일차 TIL (0) | 2025.01.27 |
🔥내일배움캠프 5일차 TIL (0) | 2025.01.24 |