2024/02/08

안석환·2024년 2월 13일

🧐기본 공부 내용


  1. 제네릭이란 무엇인가요
  • 데이터 타입을 추상화하여 여러 데이터 타입들이 일반화 하여 사용하게 하여 코드의 유연성과 재사용성을 높이는 기술중 하나이다


💾 코드

public class GenericExample<T>
{
    private T data;

    public GenericExample(T inputData)
    {
        this.data = inputData;
    }

    public T GetData()
    {
        return this.data;
    }
}

📖 참고

참고할 코드 내용

  1. 가비지 컬렉터에 대해 설명해주세요
  • 가비지 컬렉터는 개발자가 동적으로 할당한 메모리가 더이상 사용되지 않을때 자동으로 메모리를 정리해주는 시스템입니다
  1. 가비지 컬렉터를 회피하기 위한 전략은 어떤것이 있나요.
  • 객체의 재사용성을 늘린다(오브젝트 풀링)
  • 스택 메모리의 활용
  • 불필요한 할당 피하기(로컬 변수 -> 지역 변수의 값을 변경하여 사용)
  • IDisposable 패턴 구현 (필요한 경우 IDisposable 인터페이스를 구현하여 여러 관리되지 않는 자원을 적절히 해체해야 한다)
  1. 가비지 컬렉션이란 무엇인가요
  • 사용자가 동적으로 할당한 메모리를 자동으로 관리해주는 시스템이며 메모리의 누수를 방지해주어 편의성과 안정성을 높여줍니다.
  • 대표적인 청소 방법으로는
    - 참조 계수(참조하고 있는 계수가 0이면 청소)
    - 표시 청소(사용중인 객체를 마킹하여 마킹되지 않은 것을 청소)
    - 세대별(오래된 세대일 수록 적게 청소)


💾 코드

using System;

public class CustomResource : IDisposable
{
    // 관리되지 않는 리소스를 나타내는 필드
    private IntPtr unmanagedResource;

    // IDisposable 인터페이스의 구현
    public void Dispose()
    {
        // Dispose(bool) 메서드 호출
        Dispose(true);

        // 개체가 이미 파괴되었을 경우 파괴자를 호출하지 않도록 GC에 알림
        GC.SuppressFinalize(this);
    }

    // 소멸자 (파괴자) - 관리되지 않는 리소스 해제를 위해 사용
    ~CustomResource()
    {
        // Dispose(bool) 메서드 호출
        Dispose(false);
    }

    // Dispose(bool) 메서드는 Dispose() 메서드와 소멸자에서 호출되며, 
    // 관리되는 및 관리되지 않는 리소스의 해제를 수행합니다.
    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // 관리되는 리소스를 여기에서 해제합니다.
            // 예: managedResource.Dispose();
        }

        // 관리되지 않는 리소스를 여기에서 해제합니다.
        // 예: NativeMethods.CloseHandle(unmanagedResource);
    }

    // 추가로 사용자 정의된 메서드 및 속성들...

    // 사용자가 직접 Dispose 호출을 통해 자원을 해제할 수 있도록 하는 메서드
    public void CustomDisposeMethod()
    {
        Dispose();
    }
}

class Program
{
    static void Main()
    {
        using (CustomResource resource = new CustomResource())
        {
            // 리소스 사용
        } // using 블록을 벗어나면 Dispose가 자동으로 호출됨

        // 또는 수동으로 Dispose 호출
        CustomResource manualDispose = new CustomResource();
        manualDispose.CustomDisposeMethod();
    }
}

📖 참고

참고할 코드 내용




⛔️ 에러


  1. 오류 내용
  • 시도, 해결 방

💾 코드

코드내용




💭 느낀점


  1. 느낀점
  • 느낀 것에 대한 내용 or 피드백
profile
안석환!

0개의 댓글