본문 바로가기
반응형

프로그래밍493

OOP의 기초 객체 지향 프로그래밍(Object Oriented Programming) 간략히 OOP라고도 불리는 객체지향 프로그래밍은 데이터 조각들 및 해당 데이터와 관련된 행동들을 객체라는 특수한 묶음으로 모은다는 개념에 기반한 이론적인 틀 또는 체계이며, 객체들은 클래스라고 하는 프로그래머가 정의한 '청사진'들의 집합으로 구성된다. 오스카라는 고양이가 있다고 가정해 보자. 오스카는 객체이며, Cat 클래스의 인스턴스이다. 각 고양이는 이름, 성별, 나이, 체중, 색깔, 좋아하는 음식 같은 일반적인 속성들을 많이 갖고 있다. 이러한 속성들을 클래스의 필드들이라고 한다. 모든 고양이는 비슷하게 행동한다. 숨을 쉬고, 먹고, 뛰고, 자고, 야옹 소리를 내며 운다. 이것들은 클래스의 매서드들이다. 필드들과 메서드들을 통.. 2024. 4. 19.
ASP.NET Core 호스트 설정하기 Host 정의 Host는 .NET app의 아래의 자원들을 캡슐화한 객체이다. 의존성 주입 (Dependency injection, DI) 로깅 (Logging) 설정 (Configuration) IHostedService 구현체들 Host 설정 host는 일반적으로 Program.cs에서 설정하고 빌드하고 실행된다. await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService(); }) .Build() .RunAsync(); 기본 빌더 설정(Default builder settings) 위에부터 순서대로 적용되며 가장 최근 항목이 이전 항목을 덮어쓰기(overwrite) 한다. host co.. 2024. 4. 15.
C# Fisher-Yates Shuffle 알고리즘 오리지널 Fisher-Yates Shuffle 알고리즘 길이가 n인 배열을 생성한다. [0, n - 1] 범위의 무작위 인덱스를 뽑아서 새로운 배열에 추가한다. 기존 배열의 n - 1 위치의 원소를 무작위로 뽑혀 나간 위치에 추가한다. (한 칸씩 당겨서 해당 빈칸을 채우는 방법도 있지만 그때는 length - n개만큼 움직여야 해서 비효율적이다.) 다음으로 [0, n - 2] 범위의 무작위 인덱스를 뽑아서 새로운 배열에 추가한다. 기존 배열의 n - 2 위치의 원소를 무작위로 뽑혀 나간 위치에 추가한다. 해당 과정을 반복한다. 예제 코드 public partial class Program { private static Random random = new Random(); static void Main(s.. 2024. 4. 12.
C# 비동기 프로그래밍으로 반응성 개선하기 반응형 응용 프로그램 개발 .NET 프레임워크 발표 당시에는 순차적으로 실행되는 프로그램 흐름을 따랐다. 이런 실행 흐름은 다음 작업을 실행하기 전에 무조건 현재 진행 중인 작업이 끝나야 한다는 단점을 갖는다. 이로 인해 프로그램이 멈춘 것처럼 보이는 등 사용자에게 좋지 않은 인상을 주게 된다. .NET 프레임워크는 이 문제점을 해소하려는 목적으로 운영체제가 독자적으로 스케줄링할 수 있는 최소 실행 단위인 스레드를 도입했다. 비동기(asynchronous) 프로그래밍이란 독립된 스레드가 특정 작업을 처리하게 함으로써 원래의 스레드가 멈추는 것을 막고 다른 작업들을 처리할 수 있게 하는 것이다. 동기식 프로그램 실행 먼저 모든 작업을 동기적으로 수행하는 프로그램을 만들어보는 것부터 시작하자. static .. 2024. 4. 11.
C# 모나드 설계 패턴 소개 C# 모나드 설계 패턴 C#에서 제공하는 Nullable, IEnumerable, Func, Lazy, Task가 여기에 해당한다. 이 다섯 형식은 모두 T라는 하나의 매개 변수를 가지는 제네릭 형식이라는 것을 포함해 몇 가지 공통점을 가진다. 이들은 특정 동작과 연계된 특별한 규칙들을 제공하는 측면, 즉, 형식에 대한 증폭기와 같은 역할을 함으로써 자연스럽게 모나드를 구현한다. 이 형식들은 어떤 형식을 취해 특수한 형식으로 변환해 준다. Nullable Nullable는 예를 들어, -2,147,483,648 ~ 2,147,483,647 사이의 정수만 담을 수 있는 int 형식이 null에 대응할 수 있게 확장해 준다. 즉, null에 대응하도록 기능을 확장시켜 주는 래퍼 클래스라고 생각하면 이해하기 .. 2024. 4. 9.
.NET Options Pattern 사용하기 Options 패턴 options 패턴은 세팅 데이터(configuration data)에 접근하도록 도와주는 강력한 도구이다. 즉, 프로그래머가 클래스를 정의하고 option 패턴을 이용해서 설정 파일에서 값을 가져와서 바인딩하면 이를 인스턴스 객체로 선언해서 사용이 가능하게 만든다. appsettings.json 파일 appsettings.json에 정의된 "Units" 내용 "Units": { "Temp": "Celsius", "Distance": "Miles" } 바인딩 클래스 만들기 Option 패턴을 사용하기 위해서 클래스를 생성한다. public class UnitOptions { public string Temp { get; set; } = String.Empty; public string.. 2024. 4. 9.