본문 바로가기

전체 글208

[ASP.NET Core] 의존성 주입(Dependency Injection, DI) 개념 & 서비스 수명주기(Transient, Scoped, Singleton) 완벽 가이드 안녕하세요! 지난시간에는 C# 백엔드 개발의 시작인 ASP.NET Core 아키텍처 구조, Program.cs 파이프라인 및 Controller 기반 RESTful API에 대해 알아보았습니다. 백엔드 시스템을 개발할 때 컨트롤러 내부에서 데이터베이스 처리 클래스나 외부 통신 클래스를 new 키워드로 직접 인스턴스화하면 객체 간의 결합도가 지나치게 높아져 단위 테스트(Unit Test)가 불가능해지고 유지보수가 매우 어려워집니다. ASP.NET Core는 프레임워크 자체에 강력한 **의존성 주입(Dependency Injection, DI) 컨테이너**를 기본 내장하고 있습니다. 이번 시간에는 의존성 주입(DI)의 개념과 이점, IoC 컨테이너의 원리, 그리고 3가지 필수 서비스 수명주기(Transien.. 2026. 8. 26.
[ASP.NET Core] Web API 개발 입문 1강: .NET 백엔드 구조, Program.cs, RESTful API & Controller 기초 완벽 가이드 안녕하세요! 그동안 C# 기초 문법부터 객체지향, LINQ, 비동기 프로그래밍(async/await) 및 스트림 입출력까지 차근차근 정복해 보았습니다. 오늘부터는 C#을 웹 서버 백엔드에 적용하여 고성능 엔터프라이즈 시스템과 RESTful API 서비스를 구축하는 ASP.NET Core Web API 연재 시리즈를 새롭게 시작합니다! 첫 번째 시간에는 .NET 백엔드 아키텍처 구조, 엔트리 포인트인 Program.cs 파이프라인, RESTful API 개념, 그리고 API 컨트롤러(Controller) 기초 및 HTTP 메서드(GET, POST, PUT, DELETE)를 완벽히 정리해 보겠습니다.1. ASP.NET Core 아키텍처 및 RESTful API 개념ASP.NET Core는 마이크로소프트에서 .. 2026. 8. 26.
[C#] 파일 I/O 및 스트림(Stream) 완벽 가이드: File, Directory, StreamReader/StreamWriter & using 문 안녕하세요! 지난시간에는 런타임다운을 예방하고 안정적인 프로그램을 만드는 예외 처리(try-catch-finally), when 조건 필터 및 사용자 정의 예외에 대해 알아보았습니다. 프로그램을 종료하더라도 사용자 설정 값이나 게임 저장 데이터, 텍스트 로그 파일 등을 지속적으로 유지하려면 디스크 파일 시스템에 데이터를 기록해야 합니다. C#에서는 정적 도구 클래스인 File / Directory와, 대용량 데이터를 메모리 효율적으로 읽고 쓸 수 있는 바이트/문자 스트림인 StreamReader / StreamWriter를 제공합니다. 이번 시간에는 C# 파일 I/O 시스템, 스트림의 개념, 그리고 자원 누수를 막는 using 문의 활용을 완벽히 정리해 보겠습니다.1. File/Directory vs S.. 2026. 8. 23.
[C#] 예외 처리(Exception Handling) 완벽 가이드: try-catch-finally, Exception 필터(when), throw & 사용자 정의 예외 안녕하세요! 지난시간에는 앱과 서버의 응답성을 끌어올리는 비동기 프로그래밍(async, await, Task) 및 데드락 방지 법칙에 대해 알아보았습니다. 코드를 아무리 정교하게 작성하더라도 네트워크 끊김, 파일 미존재, 0으로 나누기 연산 등 예측할 수 없는 런타임 오류는 언제든 발생할 수 있습니다. 예외 처리가 되어있지 않은 프로그램은 그 즉시 팅김(비정상 종료) 현상이 발생합니다. C#에서는 이러한 위험을 제어하고 복구할 수 있는 강력한 예외 처리(Exception Handling) 구문과 **사용자 정의 예외(Custom Exception)**를 제공합니다. 이번 시간에는 try-catch-finally의 기본 구조, when 예외 필터, throw 키워드, 그리고 사용자 정의 예외 작성법을 완벽.. 2026. 8. 23.
[C#] 비동기 프로그래밍 완벽 가이드: async, await, Task, ConfigureAwait 및 데드락(Deadlock) 예방 안녕하세요! 지난시간에는 데이터 가공의 핵심인 LINQ(Language Integrated Query)의 쿼리/메서드 구문 및 지연 실행에 대해 알아보았습니다. 대용량 파일을 읽거나 네트워크 통신, DB 조회처럼 대기 시간이 긴 작업을 수행할 때 스레드가 멈춰버리면 메인 화면이 먹통이 되는 프리징(Freezing) 현상이 발생합니다. C# 5.0부터 도입된 async / await 키워드와 Task 기반 비동기 패턴(TAP)은 복잡한 멀티스레드 동기화 로직을 동기식 코드처럼 직관적이고 깔끔하게 작성할 수 있게 해줍니다. 이번 시간에는 async/await 기본 메커니즘, Task의 활용, 비동기 예외 처리, 그리고 흔히 저지르는 교착 상태(Deadlock) 방지 법칙을 완벽히 정리해 보겠습니다.1. 비동.. 2026. 8. 22.
[C#] LINQ (Language Integrated Query) 완벽 가이드: 쿼리 구문 vs 메서드 구문, from/where/select/OrderBy 및 지연 실행 안녕하세요! 지난시간에는 C# 이벤트 처리와 콜백의 핵심인 델리게이트(Delegate), Action/Func, event 키워드 및 람다식(Lambda Expression)에 대해 알아보았습니다. 배열, 리스트, 디렉터리 등의 컬렉션 데이터를 다룰 때 조건에 맞는 요소를 찾거나 정렬하기 위해 매번 복잡한 foreach 반복문과 if 제어문을 여러 중첩으로 작성하는 것은 가독성을 해치고 실수를 유발합니다. C#에서는 데이터베이스의 SQL 쿼리문처럼 컬렉션을 매우 깔끔하게 다룰 수 있는 LINQ (Language Integrated Query, 언어 통합 쿼리) 기능을 제공합니다. 이번 시간에는 LINQ의 개념, 쿼리 구문 vs 메서드 구문(람다), 주요 연산자(from, where, select, Ord.. 2026. 8. 22.
[C#] 델리게이트(Delegate), 이벤트(Event), Action/Func 및 람다식(Lambda Expression) 완벽 가이드 안녕하세요! 지난시간에는 컬렉션의 박싱 오버헤드를 없애주는 제네릭(Generic), List, Dictionary 및 where 제약 조건에 대해 알아보았습니다. C#에서 메서드 자체를 변수처럼 넘겨서 나중에 대신 실행하게 만드는 **콜백(Callback)** 기법과 유니티(Unity) 게임 엔진 및 GUI 앱의 **클릭/알림 이벤트**를 처리할 때 필수적으로 쓰이는 문법이 있습니다. 바로 델리게이트(Delegate)와 이벤트(Event)입니다. 여기에 C# 표준 제네릭 델리게이트인 **Action / Func** 및 간결한 **람다식(Lambda Expression)**이 결합되어 C#의 생산성을 극대화합니다. 이번 시간에는 델리게이트의 개념, 멀티캐스트, 이벤트와 델리게이트의 차이점, 그리고 람다식을.. 2026. 8. 22.
[C#] 제네릭(Generic) 개념, List<T>, Dictionary<TKey, TValue> 및 제약 조건(where) 완벽 가이드 안녕하세요! 지난시간에는 C# 객체지향 설계의 핵심인 다형성(Polymorphism), 추상 클래스(abstract) vs 인터페이스(interface) 및 다중 구현에 대해 알아보았습니다. C# 초기 버전의 컬렉션인 ArrayList나 Hashtable은 모든 데이터를 object 타입으로 받아 저장했습니다. 이로 인해 값 타입을 넣고 꺼낼 때마다 박싱/언박싱(Boxing/Unboxing)이 무수히 일어나 메모리 할당 및 가비지 컬렉터(GC) 부하를 일으키고 타입 안정성이 떨어지는 문제가 있었습니다. C# 2.0부터 도입된 제네릭(Generic)은 클래스나 메서드를 정의할 때 타입을 파라미터화하여 **박싱 없이 최상의 성능과 타입 안정성을 보장**합니다. 이번 시간에는 제네릭의 원리, 주요 제네릭 컬렉.. 2026. 8. 22.
[C#] 다형성(Polymorphism), 추상 클래스(abstract) vs 인터페이스(interface) 및 다중 구현 완벽 가이드 안녕하세요! 지난시간에는 코드의 재사용성을 높여주는 상속(Inheritance), base 키워드 및 메서드 오버라이딩(virtual, override)에 대해 알아보았습니다. 상속을 기반으로 구현되는 객체지향 프로그래밍(OOP)의 꽃은 단연 다형성(Polymorphism)입니다. 다형성이란 "하나의 부모 참조 타입으로 여러 자식 인스턴스를 통일하여 가리키고, 각 객체별 고유한 동작을 수행하도록 하는 성질"을 뜻합니다. C#에서는 이러한 다형성과 설계 규약을 강제하기 위해 추상 클래스(abstract)와 인터페이스(interface)를 제공합니다. 이번 시간에는 다형성의 개념, 추상 클래스 vs 인터페이스 차이점, 그리고 인터페이스 다중 구현(Multiple Implementation)을 완벽히 정리해 .. 2026. 8. 22.
[C#] 상속(Inheritance) 개념, base 키워드, 메서드 오버라이딩(virtual, override) 및 new 메서드 은닉 완벽 가이드 안녕하세요! 지난시간에는 C# 객체지향 캡슐화와 생산성의 핵심인 프로퍼티(Property, get/set), 자동 구현 프로퍼티 및 init 접근자에 대해 알아보았습니다. 객체지향 프로그래밍(OOP)에서 이미 잘 작성된 클래스의 데이터 필드와 메서드를 물려받아 새로운 기능을 추가하거나 기존 동작을 커스텀하게 재정의하는 기술을 상속(Inheritance)이라고 합니다. 이번 시간에는 C# 상속의 기본 문법, 부모 클래스를 가리키는 base 키워드, 다형성의 출발점인 메서드 오버라이딩(virtual, override), 그리고 new 키워드를 이용한 메서드 은닉(Method Hiding)을 완벽히 정리해 보겠습니다.1. C# 상속(Inheritance)의 개념과 기본 문법상속은 기존의 **부모 클래스(Bas.. 2026. 8. 22.
[C#] 프로퍼티(Property) 완벽 가이드: get/set, 자동 구현 프로퍼티(Auto-Property), init 접근자 & 객체 캡슐화 안녕하세요! 지난시간에는 C# 객체지향 프로그래밍(OOP)의 근간이 되는 클래스(Class) 개념, 객체 생성, 생성자(Constructor) 및 접근 제한자와 캡슐화에 대해 알아보았습니다. 자바(Java)나 C++에서는 필드 데이터를 안전하게 은닉하기 위해 getName(), setName() 같은 Getter/Setter 메서드를 수십 개씩 일일이 작성해야 했습니다. 하지만 C#에서는 **변수처럼 직관적으로 다루면서도 내부적으로는 메서드로 동작**하는 혁신적인 기능인 프로퍼티(Property)를 제공합니다. 이번 시간에는 프로퍼티의 기본 문법(get, set), 자동 구현 프로퍼티(Auto-Implemented Property), C# 9.0+ 불변 객체를 위한 init 접근자, 그리고 가비지 컬렉터.. 2026. 8. 22.
[C#] 클래스(Class) 개념, 객체(Object) 생성, 생성자(Constructor), 접근 제한자 및 캡슐화 완벽 가이드 안녕하세요! 지난시간에는 C#의 대표적인 두 사용자 정의 자료형인 구조체(struct) vs 클래스(class)의 값 타입과 참조 타입 차이 및 메모리 구조에 대해 알아보았습니다. C#은 강력한 객체지향 프로그래밍(OOP) 언어로, 현실 세계의 대상(객체)을 코드 속 상태(필드/변수)와 행위(메서드/함수)로 묶어 디자인합니다. 이 객체를 만들어내기 위한 틀이자 청사진이 바로 클래스(Class)입니다. 이번 시간에는 클래스의 기본 개념, new 키워드를 통한 객체 생성, 객체 초기화를 담당하는 생성자(Constructor), 접근 제한자(public, private, protected, internal), 그리고 데이터 은닉을 위한 캡슐화(Encapsulation)를 완벽히 정리해 보겠습니다.1. 클래스(.. 2026. 8. 21.