본문 바로가기

Language27

C# DI 컨테이너 services와 provider 완전 정리 C# 프로젝트에서 DI(Dependency Injection)를 구성할 때 가장 핵심이 되는 두 가지 요소가 있습니다.바로 services와 provider입니다.이 글에서는 services와 provider가 각각 어떤 역할을 하는지, 그리고 실제 사용 방법을 체계적으로 정리합니다.1. services란 무엇인가?1.1 IServiceCollection 타입var services = new ServiceCollection();services는 IServiceCollection 타입입니다.어떤 인터페이스에 어떤 구현체를 연결할지를 등록하는 DI 컨테이너 구성용 객체입니다.단순한 객체 리스트가 아니라, 의존성 주입 규칙을 등록하는 역할을 합니다.2. services를 사용하는 이유DI를 제대로 활용하려면,.. 2025. 4. 28.
C# DI(Dependency Injection)와 DI 컨테이너 정리 클래스 간의 의존성을 효과적으로 관리하기 위해, C#에서는 의존성 주입(Dependency Injection) 패턴과 DI 컨테이너를 널리 사용합니다.이 글에서는 DI의 개념부터 DI 컨테이너의 사용법까지 체계적으로 정리해봅니다.1. DI(Dependency Injection)란 무엇인가?1.1 DI를 쉽게 설명하면"내가 직접 필요한 객체를 만들지 않고, 외부에서 만들어서 주입해주는 것"을 의미합니다.1.2 일반 방식 (직접 생성)public class MyController{ private readonly Logger _logger; public MyController() { _logger = new Logger(); // 직접 생성 } public void Do.. 2025. 4. 27.
C#에서 로깅 서비스를 모듈화하는 방법 클래스 기반 프로그램 구조에서는 로깅(logging) 기능을 별도의 서비스로 분리하는 것이유지보수, 테스트, 확장성 모두에 큰 장점을 가져옵니다.이 글에서는 C#에서 로깅을 모듈화하는 방법을 순서대로 소개합니다.1. ILogger 인터페이스 정의가장 먼저, 로깅 기능의 일관성을 위해 인터페이스를 정의합니다.public interface ILogger{ void Log(string message);}ILogger는 "로그를 남긴다"는 하나의 역할만 담당합니다.이 인터페이스를 기반으로 다양한 로거 클래스를 만들어 사용할 수 있습니다.2. 로거 구현체 만들기인터페이스를 구현한 실제 클래스를 만들어야 합니다.2.1 UI에 출력하는 로거Windows Forms의 ListBox에 로그를 출력하는 예시입니다.멀.. 2025. 4. 27.
[python] setup.py python setup.py는 Python 패키지를 설치하거나 배포하기 위한 스크립트를 실행하는 데 사용됩니다. 보통 이 스크립트는 패키지의 메타데이터 및 설치 및 배포에 관련된 설정을 정의합니다. 이 스크립트는 일반적으로 패키지를 빌드하고 설치하며, 다른 사용자들이 패키지를 배포하고 설치할 수 있게 합니다. 여기에 간단한 setup.py 파일의 예제를 제시하겠습니다. 이 예제는 가상의 패키지를 만들고, 패키지의 이름, 버전, 저자 등과 같은 메타데이터를 설정하는 방법을 보여줍니다. from setuptools import setup setup( name='mypackage', version='1.0.0', author='Your Name', author_email='your.email@example.c.. 2023. 11. 21.
[conda] 가상환경 모듈 정보 파일 가상 환경의 명세 파일은 환경에 설치된 패키지와 모듈의 목록을 포함하고 있으므로, 이를 다른 환경에 적용하여 동일한 환경을 재현할 수 있습니다. environment.yml 생성 가상 환경의 명세 파일을 내보내려면 다음 명령어를 사용합니다. conda list --export > environment.yml 위 명령어를 실행하면 environment.yml이라는 파일이 생성됩니다. 이 파일에는 현재 활성화된 가상 환경에 설치된 패키지 및 모듈 정보가 저장됩니다. environment.yml 적용 이제 environment.yml 파일을 다른 환경으로 가져와서 동일한 환경을 구성하려면 다음 명령어를 사용합니다. conda create --name --file 위 명령어를 실행하면 environment.ym.. 2023. 9. 8.
D드라이브 Conda환경 생성 conda config --append "conda config --append" 명령어는 Conda 패키지 관리자를 사용하여 Conda 환경 및 구성 파일에 새로운 설정을 추가하는 데 사용되는 명령어입니다. 이 명령어를 사용하면 기존의 설정을 유지하면서 새로운 설정을 추가할 수 있습니다. 여기에 명령어의 각 부분에 대한 설명이 있습니다: "conda config": Conda 패키지 관리자의 구성(config)을 조작하려는 명령어입니다. "--append": 이 플래그는 기존 설정을 변경하지 않고 새로운 설정을 추가하도록 Conda에 지시하는 부분입니다. 다시 말해, 새 설정을 추가하면서 기존 설정을 변경하지 않습니다. 예를 들어, Conda 환경을 만들거나 관리하는 동안 어떤 설정을 추가하려고 할 때.. 2023. 9. 3.
defaultdict lambda 응용 defaultdict는 Python의 collections 모듈에서 제공하는 클래스로, 기본값을 갖는 딕셔너리를 생성하는 데 사용됩니다. defaultdict는 일반적인 딕셔너리와 유사하지만, 존재하지 않는 키에 접근할 때마다 미리 설정된 기본값을 반환합니다. 이때 기본값은 사용자가 지정한 함수를 통해 생성됩니다. 여기서는 defaultdict를 사용하여 lambda 함수를 기본값 생성 함수로 활용하는 예제를 살펴보겠습니다. 예를 들어, 각 키마다 빈 리스트를 값으로 갖는 딕셔너리를 생성하고자 할 때, defaultdict와 lambda 함수를 활용할 수 있습니다. 다음은 이에 대한 예제입니다: from collections import defaultdict # 빈 리스트를 기본값으로 갖는 default.. 2023. 8. 23.
리스트 컴프리헨션 파이썬 리스트 컴프리헨션의 다양한 사용법에 대해 설명해 드리겠습니다. 일반 컴프리헨션 리스트 컴프리헨션은 간단하게 리스트를 생성하는 방법 중 하나로, 반복문을 사용하여 리스트의 각 항목을 정의하는 방식입니다. 예를 들어, 1부터 10까지의 제곱 값을 갖는 리스트를 생성하려면 다음과 같이 작성할 수 있습니다, squares = [x**2 for x in range(1, 11)] 이중 컴프리헨션 리스트 컴프리헨션은 중첩하여 사용할 수도 있습니다. 이를 통해 2차원 리스트를 생성하거나 변환할 수 있습니다. 예를 들어, 2차원 리스트의 각 항목을 전치한 리스트를 생성하려면 다음과 같이 작성할 수 있습니다, matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] transposed = [[r.. 2023. 8. 10.
strftime(), strptime() 파이썬에서도 datetime 형식의 문자열을 생성하거나 파싱하기 위해 형식 문자열을 사용합니다. 파이썬에서는 datetime 모듈을 사용하여 날짜와 시간을 다룰 수 있으며, strftime() 메서드를 사용하여 datetime 객체를 문자열로 변환하고, strptime() 함수를 사용하여 문자열을 datetime 객체로 변환할 수 있습니다. datetime 객체를 문자열로 변환하기 (strftime()) datetime.strftime(format) 메서드는 datetime 객체를 주어진 형식 문자열에 맞춰 문자열로 변환합니다. 예를 들어, datetime 객체를 "YYYY-MM-DD HH:mm:ss" 형식의 문자열로 변환하려면 다음과 같이 사용할 수 있습니다. from datetime import da.. 2023. 7. 31.