전체 글
-
20250331_(7) Pattern MatchingStudy/C# 2025. 3. 31. 16:36
패턴 매칭(Pattern Matching)은 객체나 값을 조건에 따라 검사하고, 그 구조나 속성을 추출해 사용하는 기능이다.C#에서는 주로 is, switch, switch expression 등과 함께 사용되며,타입 검사, 조건 분기, 속성 분석 등을 보다 간결하고 안전하게 수행할 수 있도록 지원한다.1. 패턴 매칭의 도입 목적기존에는 is 연산자와 명시적 형변환(casting), 중첩된 if-else, switch문 등을 조합해 타입 확인과 값 추출을 수행했지만,패턴 매칭을 통해 이를 더 직관적이고 선언적인 방식으로 표현할 수 있게 되었다.2. 주요 패턴 종류 및 사용 예1) Type Pattern (타입 패턴)if (obj is string s){ Console.WriteLine(s.Lengt..
-
20250331_(6) Garbage CollectionStudy/C# 2025. 3. 31. 16:29
가비지 컬렉션(Garbage Collection, GC)은 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제하는 기능이다.C#을 비롯한 .NET 환경에서는 메모리 관리를 프로그래머가 직접 하지 않아도 되며,CLR(Common Language Runtime)이 가비지 컬렉션을 통해 힙 영역의 객체를 자동으로 정리한다. 1. C# 메모리 구조와 GC의 대상C# 프로그램이 실행되면 메모리는 다음과 같이 나뉜다.메모리 영역 설명 GC 대상 여부스택(Stack)지역 변수, 매개변수 저장✕힙(Heap)new로 생성된 참조형 객체 저장○정적 영역static 변수 저장✕코드 영역프로그램 실행 코드 저장✕가비지 컬렉션은 힙 영역에 저장된 참조형 객체 중 더 이상 참조되지 않는 객체만을 대상으로 한다.2. 가비지 컬..
-
20250331_(5) LINQ (Language Integrated Query)Study/C# 2025. 3. 31. 16:21
LINQ는 Language Integrated Query의 약자로, C# 언어에 통합된 데이터 질의(Query) 기능이다.배열, 리스트, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 대해 일관된 문법으로 데이터를 필터링, 정렬, 변환, 집계할 수 있다.전통적인 반복문과 조건문을 사용하는 방식보다 간결하고 가독성 높은 코드를 작성할 수 있다.1. LINQ의 문법 형태LINQ는 두 가지 문법 형태를 제공한다.쿼리 문법(Query Syntax): SQL과 유사한 문법 구조메서드 문법(Method Syntax): 람다 표현식을 사용하는 체이닝 방식// 쿼리 문법var evens = from n in numbers where n % 2 == 0 select n;/..
-
20250331_(4) GenericsStudy/C# 2025. 3. 31. 16:14
제네릭(Generic)은 클래스, 구조체, 메서드 등에서 사용할 데이터 형식을 외부에서 지정할 수 있도록 일반화하는 기능이다.즉, 코드 작성 시 구체적인 타입을 정하지 않고, 사용할 때 타입을 지정함으로써 유연성과 재사용성을 높일 수 있다.C#에서 제네릭은 List, Dictionary, Nullable 등에서 광범위하게 사용된다. 1. 제네릭을 사용하는 이유형식 안전성(Type Safety): 잘못된 타입 사용을 컴파일 시점에 방지할 수 있다.코드 재사용성(Reusability): 하나의 코드로 여러 타입을 처리할 수 있다.성능 향상: 박싱(Boxing)과 언박싱(Unboxing)을 줄여 성능 저하를 방지할 수 있다.2. 제네릭 클래스public class Box{ public T Value { ..
-
20250331_(3) Generalized ProgrammingStudy/C# 2025. 3. 31. 15:53
일반화 프로그래밍은 자료형(type)에 독립적인 알고리즘이나 자료구조를 작성하는 프로그래밍 방식이다.즉, 특정 자료형에만 동작하는 코드가 아니라, 다양한 타입에서도 재사용 가능한 범용 코드를 작성하는 것을 목표로 한다.예를 들어, 리스트를 정렬하는 함수를 만들 때,int 리스트, string 리스트, float 리스트 등 자료형마다 따로 함수를 만드는 게 아니라,하나의 일반화된 함수로 모든 타입을 처리할 수 있게 만드는 방식이다.1. 제네릭(Generic)일반화 프로그래밍은 언어 차원에서는 보통 제네릭(Generic) 으로 구현된다.C#에서는 List, Dictionary, IEnumerable 등이 모두 일반화 프로그래밍의 대표적인 예다.public class Box{ public T Value ..
-
20250331_(2) Abstract ProgrammingStudy/C# 2025. 3. 31. 15:49
추상화 프로그래밍(Abstract Programming) 이란구체적인 구현(How)을 숨기고, 필요한 기능(What)만 외부에 공개하는 방식으로 프로그래밍하는 것을 의미한다.즉, "무엇을 할 수 있는지"는 정의하되, "어떻게 동작하는지는 감춘다"→ 사용자(다른 코드) 입장에서는 내부 구조를 몰라도 해당 기능을 사용할 수 있게 된다.1. 추상화의 목적객체지향 프로그래밍에서 추상화를 하는 이유는 다음과 같다.복잡성 은닉불필요한 세부 구현을 숨기고 필요한 부분만 보여준다유지보수성 향상구현을 바꿔도 외부 사용 코드는 영향을 받지 않는다확장성 확보여러 구현체를 쉽게 교체하거나 추가할 수 있다계약 기반 개발"이런 기능을 제공해야 한다"는 인터페이스 또는 추상 클래스의 계약 기반 구조 가능 2. C#에서 추상화를 구..
-
20250331_(1) Object-Oriented Programming, OOPStudy/C# 2025. 3. 31. 15:42
객체지향 프로그래밍(OOP) 은 프로그램을 데이터(속성) 와 그 데이터를 다루는 행위(메서드) 를 하나의 단위(객체, Object) 로 묶어 구성하는 프로그래밍 패러다임이다.절차형 프로그래밍이 “순차적 작업 흐름”에 초점을 맞췄다면,객체지향 프로그래밍은 “객체 간의 관계와 메시지 교환”을 중심으로 프로그램을 구성한다.1. 객체(Object)와 클래스(Class)객체(Object): 현실 세계의 사물이나 개념을 프로그래밍 세계로 추상화한 실체. 속성과 행위를 가짐.예: 고양이 → 이름, 나이, 색상(속성), 울다(), 점프하다()(행위)클래스(Class): 객체를 생성하기 위한 청사진(설계도).클래스에서 new 키워드로 객체(인스턴스)를 생성함.class Cat{ public string Name; ..
-
나의 발더스 게이트3플레이 여정PROJECTS/Programming Journal 2025. 3. 31. 12:04
나는 원래 게임을 즐기는 편이 아니었다. 가끔 친구들과 롤토체스나 칼바람을 하는 정도가 전부였고, 그것마저도 OP.GG같은 족보 없이는 플레이가 불가능한 수준이었다. 물론 어렸을 때 포켓몬스터 시리즈를 좋아하기는 했지만, 그것이 내 인생이나 정서에 큰 영향을 준 적은 없었다.그래서인지 게임보다는 소설이나 영화, 웹툰 같은 콘텐츠를 더 자주 접했고, 이를 즐기기 위한 나름의 명확한 기준을 세우게 되었다.스토리에 개연성이 있고, 등장한 모든 복선과 떡밥 회수가 철저해야 한다.비주얼과 스토리의 디테일이 살아있어, 세밀하게 관찰할 때만 발견되는 숨겨진 요소를 찾아내는 즐거움이 있어야 한다.감정이입을 방해하는 요소가 없고 내 감성과 잘 맞아야 한다.콘텐츠를 즐기는 방식이 독특하고 참신해야 한다.세계관이 논리적이고..