TIL

🔥내일배움캠프 8일차 TIL

leejiyoung0511 2025. 2. 3. 20:42

오늘의 학습키워드
"고급문법"

✏️오늘 배운 내용

● 다중상속의 문제

  • 같은 이름의 멤버를 가지고 있을때 어떤 부모 클래스의 멤버를 사용해야하는지 모호해진다.
  • 클래스 간의 관계가 복잡해진다.
  • 이름 충돌과 충돌 해결의 어려움이 있다.
  • 코드의 복잡성을 증가시키고 유지 보수성이 저하될 수 있다.

● 인터페이스(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