본문 바로가기

분류 전체보기1142

StringReplace로 문자열 다중 치환 처리하기 StringReplace로 문자열 다중 치환 처리하기 델파이의 StringReplace 함수는 문자열 내 특정 텍스트를 다른 텍스트로 교체할 수 있는 강력한 기능입니다. 반복적 치환이나 대소문자 무시 기능까지 지원해 다양한 텍스트 변환 작업에 적합합니다. uses System.SysUtils; procedure ReplaceTextDemo; var Original, Modified: string; begin Original := 'Delphi는 정말 좋은 Delphi 개발 도구입니다.'; Modified := StringReplace(Original, 'Delphi', 'Object Pascal', [rfReplaceAll, rfIgnoreCase]); ShowMessage(Mod.. 2025. 5. 16.
Span<T>와 stackalloc으로 고성능 버퍼 직접 관리하기 Span와 stackalloc으로 고성능 버퍼 직접 관리하기 C#에서는 Span와 stackalloc을 활용하면 GC 힙을 피하고 스택 메모리를 사용하여 고성능의 임시 버퍼를 직접 관리할 수 있습니다. 특히 실시간 시스템이나 반복 계산 루틴 등에서 매우 유용합니다. using System; class Program { static void Main() { Span buffer = stackalloc int[5]; for (int i = 0; i { buffer[i] = i * 2; } Console.WriteLine("스택 버퍼 내용:"); foreach (var n in buf.. 2025. 5. 16.
Now와 DateToStr, TimeToStr로 현재 날짜와 시간 구분 출력하기 Now와 DateToStr, TimeToStr로 현재 날짜와 시간 구분 출력하기델파이에서는 Now를 통해 현재 시스템의 날짜와 시간을 동시에 얻을 수 있습니다. 이 값을 DateToStr 또는 TimeToStr 함수와 함께 사용하면 날짜와 시간을 분리하여 명확하게 출력할 수 있습니다. uses System.SysUtils; procedure ShowCurrentDateTime; var Today: string; CurrentTime: string; begin Today := DateToStr(Now); CurrentTime := TimeToStr(Now); ShowMessage('오늘 날짜: ' + Today); // 예: 2025-05-15 ShowMessa.. 2025. 5. 15.
OrderBy()와 ThenBy()로 정렬 기준 다중 지정하기 OrderBy()와 ThenBy()로 정렬 기준 다중 지정하기 LINQ의 OrderBy()와 ThenBy() 메서드를 사용하면 리스트나 배열을 여러 기준으로 정렬할 수 있습니다. 데이터를 우선순위와 부속 조건에 따라 정렬할 때 매우 유용합니다. using System; using System.Collections.Generic; using System.Linq; class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { var people = new List { new Pers.. 2025. 5. 15.
Assigned 함수로 객체나 포인터의 nil 여부 확인하기 Assigned 함수로 객체나 포인터의 nil 여부 확인하기 델파이에서 포인터나 객체가 유효한지, 즉 nil이 아닌지를 확인할 때는 Assigned 함수를 사용하는 것이 가장 안전하고 명확합니다. 직접 비교하는 방식보다 의도를 드러내고 코드 가독성을 높일 수 있습니다. procedure CheckObject; var MyList: TStringList; begin MyList := nil; if not Assigned(MyList) then ShowMessage('리스트가 생성되지 않았습니다.'); MyList := TStringList.Create; try if Assigned(MyList) then ShowMessage('리스트가 생성되어 있습니다.').. 2025. 5. 14.
Select()로 컬렉션의 각 요소 가공하기 Select()로 컬렉션의 각 요소 가공하기 LINQ의 Select() 메서드는 컬렉션 내 요소를 다른 형태로 가공하거나 변환할 때 사용됩니다. 원본 데이터를 유지하면서 가공된 새 결과를 반환할 수 있어, 데이터 처리에 매우 유용합니다. using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List numbers = new List { 1, 2, 3, 4, 5 }; var squares = numbers.Select(n => n * n); Console.WriteLine("제곱값 리스트:"); for.. 2025. 5. 14.
TryStrToInt를 이용한 안전한 문자열 → 정수 변환 TryStrToInt를 이용한 안전한 문자열 → 정수 변환 델파이에서 문자열을 정수로 변환할 때 StrToInt를 사용하면 변환 실패 시 예외가 발생합니다. 반면, TryStrToInt는 예외 없이 실패 여부를 확인하며 변환 결과를 안전하게 처리할 수 있어 사용자 입력 검증에 매우 유용합니다. uses System.SysUtils; procedure TryStrToIntExample; var Input: string; Number: Integer; begin Input := '1234'; if TryStrToInt(Input, Number) then ShowMessage('변환된 숫자: ' + IntToStr(Number)) else ShowMessage('유효.. 2025. 5. 13.
string.Format()으로 문자열 포맷 지정하기 string.Format()으로 문자열 포맷 지정하기 string.Format()은 텍스트 내에 변수 값을 삽입할 수 있는 다양한 서식 지정 기능을 제공합니다. 숫자, 날짜, 통화 등 포맷이 필요한 문자열 출력에서 매우 유용하게 사용됩니다. using System; class Program { static void Main() { string name = "델파이사이트"; int visitors = 1234; DateTime today = DateTime.Today; string message = string.Format("📅 {0:yyyy-MM-dd} 기준, {1} 방문자 수: {2:N0}명", .. 2025. 5. 13.
RandomRange를 사용한 범위 내 난수 생성 RandomRange를 사용한 범위 내 난수 생성 델파이에서는 Random 함수를 통해 난수를 생성할 수 있지만, 특정 범위의 정수를 얻고 싶을 때는 RandomRange가 더 간편하고 직관적입니다. 이 함수는 Math 유닛에 포함되어 있으며, 시작값과 끝값 사이의 정수 난수를 반환합니다. uses System.SysUtils, System.Math; procedure ShowRandomNumber; var R: Integer; begin Randomize; R := RandomRange(10, 21); // 10 이상 20 이하 ShowMessage('랜덤 숫자: ' + IntToStr(R)); end; RandomRange(A, B)는 A 이상 B 미만의 정수를 반환 Rand.. 2025. 5. 9.
Expression Tree를 활용한 동적 코드 구성 Expression Tree를 활용한 동적 코드 구성 C#의 System.Linq.Expressions 네임스페이스를 이용하면 코드를 데이터처럼 구성할 수 있습니다. 컴파일 시점이 아닌 실행 시점에 식(함수, 연산)을 생성하고 조합할 수 있어 ORM, 규칙 엔진, 동적 쿼리 작성 등 고급 시나리오에 적합합니다. using System; using System.Linq.Expressions; class Program { static void Main() { // Expression: (int x) => x + 1 ParameterExpression param = Expression.Parameter(typeof(int), "x"); Express.. 2025. 5. 9.
Application.Terminate로 안전하게 프로그램 종료하기 Application.Terminate로 안전하게 프로그램 종료하기 델파이 애플리케이션을 종료할 때는 Application.Terminate를 사용하는 것이 가장 안전한 방법입니다. 이는 현재 실행 중인 메시지 루프를 종료하고 메인 폼을 닫으면서 애플리케이션을 정리된 방식으로 종료시켜 줍니다. procedure TForm1.Button1Click(Sender: TObject); begin if MessageDlg('프로그램을 종료하시겠습니까?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Application.Terminate; end; Application.Terminate는 비정상 강제 종료가 아닌 정리된 종료 처리 방식 종료 전에 확인 메시지.. 2025. 5. 8.
using 블록 없이 using 선언으로 자원 자동 해제하기 using 블록 없이 using 선언으로 자원 자동 해제하기 C# 8.0부터 도입된 using 선언은 블록을 사용하지 않아도 IDisposable 객체를 자동으로 정리해 줍니다. 코드를 간결하게 만들면서도 리소스 누수를 방지할 수 있는 유용한 기능입니다. using System; using System.IO; class Program { static void Main() { using var writer = new StreamWriter("log.txt"); writer.WriteLine("이 내용은 파일에 기록됩니다."); Console.WriteLine("파일 작성 완료!"); } } using var 선언은 해당 범위(scope)가 .. 2025. 5. 8.
InterlockedIncrement로 안전한 정수 증가 처리하기 InterlockedIncrement로 안전한 정수 증가 처리하기 멀티스레드 환경에서 동일한 변수를 동시에 증가시키면 경합 조건(Race Condition)이 발생할 수 있습니다. 델파이의 InterlockedIncrement 함수는 원자적(Atomic)으로 정수 값을 증가시켜 스레드 충돌을 방지합니다. uses System.SyncObjs, System.Classes, System.SysUtils; var Counter: Integer = 0; procedure IncrementInThread; begin TThread.CreateAnonymousThread(procedure var I: Integer; begin for I := 1 to 1000 do .. 2025. 5. 7.
Stopwatch로 코드 실행 시간 측정하기 Stopwatch로 코드 실행 시간 측정하기 성능을 측정하거나 특정 블록의 실행 시간을 확인하고 싶을 때, System.Diagnostics.Stopwatch 클래스를 사용하면 정확한 시간 측정이 가능합니다. using System; using System.Diagnostics; using System.Threading; class Program { static void Main() { Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(1500); // 테스트용으로 1.5초 대기 sw.Stop(); Console.WriteLine($"실행 시간: {sw.Elapse.. 2025. 5. 7.
for..in 반복문을 사용한 컬렉션 순회 for..in 반복문을 사용한 컬렉션 순회 델파이의 for..in 구문은 배열이나 리스트, 문자열, 컬렉션 등을 간단하게 순회할 수 있게 해주는 문법입니다. 기존의 인덱스 기반 반복문보다 가독성이 좋고, 실수 가능성이 적어 더욱 안전합니다. uses System.SysUtils, System.Classes; procedure ForInExample; var List: TStringList; S: string; begin List := TStringList.Create; try List.Add('Delphi'); List.Add('개발'); List.Add('재미있어요'); for S in List do ShowMessage(S); fina.. 2025. 5. 5.
string.Contains()로 문자열 포함 여부 간단히 확인하기 string.Contains()로 문자열 포함 여부 간단히 확인하기 C#의 string.Contains() 메서드를 사용하면 텍스트 내에 특정 문자열이 포함되어 있는지를 간단하고 직관적으로 검사할 수 있습니다. 검색, 필터링, 조건 분기 등에 유용하게 사용됩니다. using System; class Program { static void Main() { string message = "안녕하세요, 모노솔루션입니다."; if (message.Contains("모노")) { Console.WriteLine("✅ 회사명이 포함되어 있습니다."); } else { .. 2025. 5. 5.
FreeAndNil을 사용한 메모리 해제와 포인터 초기화 FreeAndNil을 사용한 메모리 해제와 포인터 초기화 델파이에서 객체를 메모리에서 해제한 뒤 포인터를 nil로 초기화하지 않으면, 이후 해당 포인터를 접근하려 할 때 오류(Access Violation)가 발생할 수 있습니다. FreeAndNil은 이 두 과정을 한 번에 처리해주는 안전한 도구입니다. uses System.SysUtils; procedure FreeAndNilExample; var Obj: TStringList; begin Obj := TStringList.Create; try Obj.Add('Delphi is powerful!'); finally FreeAndNil(Obj); // 메모리 해제 + 포인터 nil 처리 end; if Obj .. 2025. 5. 1.
List<T>.Find()로 조건에 맞는 첫 번째 항목 찾기 List.Find()로 조건에 맞는 첫 번째 항목 찾기 List의 Find() 메서드는 조건을 만족하는 첫 번째 요소를 간편하게 찾을 수 있는 기능입니다. 복잡한 반복문 없이도 원하는 항목을 빠르게 추출할 수 있어 실용적입니다. using System; using System.Collections.Generic; class Program { static void Main() { List names = new List { "John", "Jane", "Steve", "Sara" }; string result = names.Find(name => name.StartsWith("S")); Console.WriteLine("조건에 맞는 이름: " +.. 2025. 5. 1.
Pos 함수를 활용한 문자열 내 위치 검색 Pos 함수를 활용한 문자열 내 위치 검색 델파이의 Pos 함수는 특정 문자열이 다른 문자열 내 어디에 위치하는지를 알려주는 함수입니다. 검색 기능, 유효성 검사, 문자열 파싱 등 다양한 곳에서 활용할 수 있습니다. uses System.SysUtils; procedure PosExample; var Text, SubStr: string; Index: Integer; begin Text := 'Welcome to the Delphi world!'; SubStr := 'Delphi'; Index := Pos(SubStr, Text); ShowMessage('위치: ' + IntToStr(Index)); // 결과: 16 end; 실행 결과: "위치: 16" ('Delphi'.. 2025. 4. 30.
Array.Exists()로 배열 조건 빠르게 검사하기 Array.Exists()로 배열 조건 빠르게 검사하기 C#의 Array.Exists() 메서드는 배열에 특정 조건을 만족하는 요소가 하나라도 존재하는지 간단하게 검사할 수 있는 방법입니다. 불필요한 반복문 없이 조건 검사를 간결하게 표현할 수 있어 유용합니다. using System; class Program { static void Main() { int[] numbers = { 3, 7, 9, 12, 15 }; bool hasEven = Array.Exists(numbers, n => n % 2 == 0); Console.WriteLine(hasEven ? "✅ 배열에 짝수가 있습니다." : ".. 2025. 4. 30.