C# 21

C# ObserverPattern (옵저버 패턴)

옵저버 패턴옵저버 패턴은 한 객체(Subject / Observable) 의 상태 변화가 있을 때 그 변화를 여러 객체(Observers) 에게 자동으로 통지해 주기 위한 디자인 패턴입니다.주요 목적은 발행자(Subject) 와 구독자(Observer) 를 분리하여 결합도를 낮추는 것입니다.발행자는 누가 구독했는지 몰라도 되고, 구독자는 발행자에게 직접 명령하지 않아도 됩니다. 핵심 요소Subject 발행자 : Observer 등록/해제/알림 기능을 제공하고 상태를 관리합니다.Observer 구독자 : Subject의 변경을 받아 처리하는 쪽입니다.장점느슨한 결합Subject와 Observer가 서로를 구체적으로 몰라도 통신 가능합니다. → 재사용성, 유지보수성이 뛰어납니다.확장성새로운 Observer ..

C#/문법 2025.10.07

C# 스레드 임의로 종료하기 / 스레드의 상태들

스레드 임의로 종료하기 Thread.Abort 메서드를 사용해서 강제로 종료할 수 있습니다.Thread Abort는 .NET 프레임워크에서만 지원됩니다. 사용자는 작업 관리자 등을 이용하여 프로세스를 임의로 죽일 수 있습니다.아쉽게도 프로세스 안에서 동작하는 각 스레드는 죽일 수 없습니다.스레드를 죽이려면 앞으로 설명할 Abort를 이용해야 합니다. static void DoSomething(){ try { for (int i = 0; i Abort 메서드를 사용할 때는 조심할 점이 있습니다.Abort 메서드가 실행되었을 때 바로 스레드가 종료되는 것이 아닙니다.Abort 메서드가 실행되면 ThreadAbortException을 던집니다.그다음 catch문과 finally문을 실..

C#/문법 2025.08.25

C# 프로세스와 스레드

프로세스란?실행 파일이 실행되어 있는 메모리에 적재된 인스턴스(하나의 클래스에서 생성된 객체) 만약 unity.exe가 실행 파일이라면, 이 실행 파일에 담겨있는 데이터와 코드가 메모리에 적재되어 동작하게 하는 것이 프로세스입니다. + 힙과 스택도 구성 요소입니다. 특징으로는운영체제로부터 독립된 메모리 공간과 자원을 할당받는다는 점과,프로세스는 하나 이상의 스레드로 구성된다는 점입니다.이는 하나만 사용하는 단일 스레드의 구조거나 여러 개의 스레드를 사용하는 멀티 스레드의 구조가 있습니다. 스레드(Thread)란?프로세스 내에서 실행되는 흐름의 단위입니다.운영체제가 CPU 시간을 직접 할당하는 기본 단위가 바로 스레드입니다. 특징으로같은 프로세스의 다른 스레드와 코드, 데이터, 힙을 공유합니다.하지만 스택..

C#/문법 2025.08.21

C# object와 박싱, 언박싱

object란??object 형식은 모든 형식을 다룰 수 있는 데이터 형식입니다. object가 모든 형식을 다룰 수 있는 이유는 상속 덕분입니다.C#은 object가 모든 데이터 형식을 다룰 수 있도록 모든 데이터 형식이 object 형식으로 부터 상속받게 했습니다.즉 object 형식은 모든 데이터 형식의 부모가 된 것입니다. object a = 2025;object b = 3.14159265358979323846m;object c = false;object d = "반갑습니다";Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine(c);Console.WriteLine(d); 어떻게 object가 모든 데이터를 담을 수 있을까요?박싱과 언박싱에 ..

C#/문법 2025.08.13

C# 문법 17 -- 데이터 형식 정리 9

2 - 7 : 세트2 - 8 : LinkedList 7. 세트C#에서 세트는 중복되지 않는 값을 저장하는 컬렉션입니다. 주로 HashSet 클래스를 사용하여 구현되며, 데이터의 고유성을 보장하고, 빠른 검색 및 삽입 성능을 제공합니다. 1. 중복 허용 안 함 : 세트는 동일한 값을 여러 번 저장할 수 없습니다.2. 빠른 검색 : 해시 테이블을 기반으로 하여 요소의 검색, 추가, 삭제가 빠릅니다.3. 순서 없음 : 세트에 저장된 요소는 순서가 없으며, 인덱스를 사용하여 접근할 수 없습니다. 예시)using System;using System.Collections.Generic;class Program{ static void Main() { // HashSet 세트 선언 및 초기화 ..

C#/문법 2024.12.07

C# 문법 16 -- 데이터 형식 정리 8

2 - 5 : 클래스2 - 6 : 구조체 5. 클래스C#에서 클래스는 객체 지향 프로그래밍의 기본 단위로, 속성(데이터)과 메서드(기능)를 포함하는 사용자 정의 데이터 타입입니다. 클래스를 사용하면 관련된 데이터와 기능을 하나의 단위로 묶어 관리할 수 있습니다. 1. 속성과 메서드 : 클래스는 데이터를 저장하는 속성과 해당 데이터를 처리하는 메서드를 포함합니다. 2. 객체 생성 : 클래스를 기반으로 객체를 생성하여 사용할 수 있습니다. 3. 상속 : 클래스를 상속받아 새로운 클래스를 정의할 수 있습니다. 예시)using System;class Program{ static void Main() { // Person 클래스의 객체 생성 Person person1 = new..

C#/문법 2024.12.06

C# 문법 15 -- 데이터 형식 정리 7

2 - 3 : 딕셔너리2 - 4 : 튜플 3. Dictionary키-값 쌍으로 데이터를 저장하는 컬렉션입니다.각 키는 고유해야 하고, 이를 통해 값에 빠르게 접근할 수 있습니다.딕셔너리는 해시 테이블을 기반으로 하여 매우 효율적인 데이터 검색을 제공합니다. 1. 키-값 쌍 : 각각의 요소는 고유한 키와 그에 대응하는 값을 가집니다. 2. 빠른 검색 : 키를 사용하여 값을 빠르게 검색할 수 있습니다. 3. 동적 크기 : 요소를 추가하거나 삭제할 때 자동으로 크기가 조정됩니다. 예시)// 문자열 키와 정수 값을 가지는 딕셔너리 선언 및 초기화Dictionary ageDictionary = new Dictionary();ageDictionary.Add("Alice", 30);ageDictionary.Add("..

C#/문법 2024.12.05

C# 문법 14 -- 데이터 형식 정리 6

2. 복합 데이터 형식 2 - 1 : 배열2 - 2 : 리스트 1. 배열동일한 데이터 타입의 여러 값을 순서대로 저장하기 위한 자료구조 1. 고정 크기 : 배열을 선언할 때 크기를 정해야 하며, 이후에는 변경할 수 없습니다. 2. 인덱스 기반 접근 : 배열의 각 요소는 0부터 시작하는 인덱스를 통해 접근합니다. 3. 동일한 데이터 타입 : 배열의 모든 요소는 동일한 데이터 타입이어야 합니다. 예시)int[] numbers = new int[5];numbers[0] = 10;numbers[1] = 20;numbers[2] = 30;numbers[3] = 40;numbers[4] = 50;for (int i = 0; i  2. 리스트동적으로 크기가 조정되는 배열과 같은 데이터 구조 1. 동적 크기 : 리스트..

C#/문법 2024.12.04

C# 문법 13 -- 데이터 형식 정리 5

1 - 10 : float1 - 11 : double1 - 12 : decimal 10. float값의 범위 : 대략 -3.402823E38에서 3.402823E38까지. (-3.402823 곱하기 10의 38제곱 ~ 3.402823 곱하기 10의 38제곱)정밀도 : 약 7자리 십진수메모리 크기 : 4바이트용도 : 과학적 계산, 그래픽 처리, 게임 개발 등에서 소수점 숫자를 다룰 때 사용됩니다.float temperature = 36.6f; float pi = 3.14f;float largeNumber = 1.5e10f; Console.WriteLine("현재 온도: " + temperature + "°C");Console.WriteLine("원주율: " + pi);Console.WriteLine("큰 ..

C#/문법 2024.12.03

C# 문법 12 -- 데이터 형식 정리 4

1 - 8 : long1 - 9 : char 8.long값의 범위 : -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지. (-92경 ~ 92경) 메모리 크기 : 8바이트용도 : 매우 큰 정수가 필요한 경우에 사용합니다. 예를 들어 큰 카운터, 타임 스탬프, 파일 크기 등에서 사용됩니다.long population = 8000000000; long maxPopulation = 9223372036854775807; Console.WriteLine("세계 인구: " + population);Console.WriteLine("long의 최대값: " + maxPopulation);long increasedPopulation = population + 100000..

C#/문법 2024.12.02