분류 전체보기1082 TComboBox.Items.Objects를 활용한 데이터 연동 TComboBox.Items.Objects를 활용한 데이터 연동 TComboBox에 표시되는 항목에 추가 정보를 함께 저장하고 싶을 때 Items.Objects를 활용하면 유용합니다. 각 항목에 객체 또는 포인터를 연결해 비즈니스 로직과 연동할 수 있습니다. procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Items.AddObject('사과', TObject(PtrInt(100))); ComboBox1.Items.AddObject('바나나', TObject(PtrInt(200))); ComboBox1.Items.AddObject('오렌지', TObject(PtrInt(300))); end; procedure TForm1.Com.. 2025. 4. 2. StringBuilder로 문자열 성능 향상시키기 StringBuilder로 문자열 성능 향상시키기 문자열을 반복적으로 연결할 때 + 연산자를 사용하는 대신, StringBuilder를 사용하면 성능이 크게 향상됩니다. 특히 루프 안에서 문자열을 누적할 경우 StringBuilder는 메모리 낭비를 방지해 줍니다. using System; using System.Text; class Program { static void Main() { StringBuilder sb = new StringBuilder(); for (int i = 1; i { sb.Append("Line "); sb.Append(i); sb.AppendLine().. 2025. 4. 2. TStringStream을 활용한 문자열과 스트림 간 변환 TStringStream을 활용한 문자열과 스트림 간 변환 TStringStream은 문자열을 스트림처럼 다룰 수 있게 해주는 클래스입니다. 주로 파일, 네트워크, JSON 처리 등에서 문자열을 스트림 형태로 넘겨야 할 때 유용하게 사용 uses System.Classes, System.SysUtils; procedure UseStringStream; var Str: string; Stream: TStringStream; begin Str := '이 문자열은 스트림으로 변환됩니다.'; Stream := TStringStream.Create(Str, TEncoding.UTF8); try // 스트림 데이터를 다시 문자열로 가져오기 Stream.Position := 0.. 2025. 4. 1. switch 표현식으로 간결하게 조건 분기하기 switch 표현식으로 간결하게 조건 분기하기C# 8.0부터는 기존의 switch 문보다 간단하고 표현력 있는 switch 표현식을 사용할 수 있습니다. 코드를 더 간결하게 만들고 가독성을 높이는 데 효과적 using System; class Program { static void Main() { string role = "admin"; string permission = role switch { "admin" => "모든 권한", "user" => "읽기/쓰기", "guest" => "읽기 전용", _ => "권한 없음" }; Co.. 2025. 4. 1. RTTI를 이용한 런타임 속성 정보 접근 RTTI를 이용한 런타임 속성 정보 접근 델파이의 RTTI(Run-Time Type Information)를 활용하면 클래스나 객체의 속성, 메서드, 타입 정보 등을 런타임 중에 확인하고 동적으로 접근할 수 있습니다. 이를 통해 설정 자동화, JSON 직렬화, ORM 등의 고급 기능을 구현할 수 있습니다. uses System.Rtti, System.TypInfo, System.SysUtils; type TPerson = class private FName: string; FAge: Integer; published property Name: string read FName write FName; property Age: Integer read FAge .. 2025. 3. 31. async void는 이벤트 핸들러에만 사용 async void는 이벤트 핸들러에만 사용 C#에서 async void 메서드는 예외 처리가 어렵고 비동기 흐름을 제어하기 힘들기 때문에 이벤트 핸들러에서만 사용해야 합니다. 그 외 상황에서는 반드시 Task 또는 Task를 반환해야 합니다. using System; using Systehttp://m.Threading.Tasks;class Program { static async Task Main() { try { await DoSomethingAsync(); } catch (Exception ex) { Console.WriteLine($"예외 처리됨: {ex.Messa.. 2025. 3. 31. InputBox로 사용자 입력 받기 InputBox로 사용자 입력 받기 델파이에서는 간단한 사용자 입력을 받을 때 InputBox 함수를 사용할 수 있습니다. 별도의 UI 없이도 빠르게 데이터를 입력받을 수 있어 설정 값이나 간단한 사용자 응답을 처리할 때 유용합니다. procedure AskUserName; var UserName: string; begin UserName := InputBox('사용자 입력', '이름을 입력하세요:', ''); if UserName '' then ShowMessage('안녕하세요, ' + UserName + '님!'); end; ●첫 번째 매개변수는 대화 상자의 제목입니다. ●두 번째는 메시지, 세 번째는 기본값입니다. ●사용자가 취소를 누르면 빈 문자열이 반환됩니다. 2025. 3. 28. params 키워드로 가변 인자 받기 params 키워드로 가변 인자 받기 C#의 params 키워드를 사용하면 메서드에 개수 제한 없이 인자를 전달할 수 있습니다. 이 기능은 유연한 API를 만들 때 매우 유용합니다. using System; class Program { static void Main() { PrintNumbers(1, 2, 3); PrintNumbers(10, 20); PrintNumbers(); // 인자 없이도 호출 가능 } static void PrintNumbers(params int[] numbers) { Console.WriteLine("숫자 목록: " + string.Join(", ", numbers)); }.. 2025. 3. 28. TStopwatch를 이용한 실행 시간 측정 TStopwatch를 이용한 실행 시간 측정 성능 분석이나 특정 코드 블록의 처리 시간을 측정할 때는 System.Diagnostics 유닛의 TStopwatch를 사용하는 것이 가장 간편하고 정확합니다. 특히 반복 루프나 쿼리 실행 시간 측정에 유용합니다. uses System.Diagnostics, System.SysUtils; procedure MeasureExecutionTime; var Stopwatch: TStopwatch; I: Integer; begin Stopwatch := TStopwatch.StartNew; // 시간 측정 대상 코드 for I := 1 to 1000000 do Inc(I); Stopwatch.Stop; ShowMessage(.. 2025. 3. 27. try-catch-finally 구문으로 예외 처리 마스터하기 try-catch-finally 구문으로 예외 처리 마스터하기 try-catch-finally 구문으로 예외 처리 마스터하기 C#에서 예외(Exception)는 프로그램 실행 중 발생하는 문제를 처리하기 위한 핵심 메커니즘입니다. try-catch-finally 구문을 사용하면 오류를 우아하게 처리하고 자원 정리를 할 수 있습니다. using System; class Program { static void Main() { try { Console.Write("숫자를 입력하세요: "); int number = int.Parse(Console.ReadLine()); Console.WriteLine.. 2025. 3. 27. Record Helper를 사용한 레코드 기능 확장 Record Helper를 사용한 레코드 기능 확장 Delphi의 Record Helper 기능을 활용하면 기존 레코드 타입에 메서드나 프로퍼티를 추가할 수 있어, 객체지향 방식의 코드처럼 레코드를 활용할 수 있습니다. 특히 수학, 날짜, 좌표 등 간단한 구조체 데이터에 기능을 부여할 때 유용합니다. type TPoint = record X, Y: Integer; end; TPointHelper = record helper for TPoint function ToString: string; function DistanceTo(const AOther: TPoint): Double; end; { TPointHelper } function TPointHelper.T.. 2025. 3. 26. readonly struct로 값 타입 최적화하기 readonly struct로 값 타입 최적화하기 C#의 readonly struct는 값 타입(Struct)의 불변성을 보장하고 성능 최적화에 큰 도움이 되는 기능입니다. 값 타입은 주로 작은 데이터 덩어리를 표현할 때 사용되며, readonly를 붙이면 의도치 않은 변경을 방지할 수 있습니다. using System; public readonly struct Point { public int X { get; } public int Y { get; } public Point(int x, int y) { X = x; Y = y; } public double Distance => Math.Sqrt(X * X + Y * Y); } .. 2025. 3. 26. nameof 연산자 사용하기 nameof 연산자 사용하기 nameof는 변수, 속성, 메서드, 클래스 등의 이름을 문자열로 안전하게 가져올 수 있는 기능입니다. 코드 리팩토링 시에도 안전하게 작동하므로 유지보수성과 안정성이 향상됩니다. using System; class Person { public string Name { get; set; } public void PrintPropertyName() { Console.WriteLine(nameof(Name)); // "Name" 출력 } } class Program { static void Main() { var person = new Person(); person.PrintProperty.. 2025. 3. 25. Format 함수를 활용한 문자열 포맷팅 Format 함수를 활용한 문자열 포맷팅 Format 함수는 문자열 안에 값을 삽입할 때 매우 유용합니다. 숫자, 문자열, 날짜 등을 원하는 형식으로 손쉽게 조합할 수 있어 가독성과 유지보수성이 좋아집니다 uses System.SysUtils; procedure ShowFormattedMessage; var UserName: string; Age: Integer; Msg: string; begin UserName := '김델파이'; Age := 35; Msg := Format('이름: %s, 나이: %d세', [UserName, Age]); ShowMessage(Msg); end; %s, %d, %f 등 포맷 태그를 사용해 다양한 타입의 데이터를 삽입할 수 있습니다. [값.. 2025. 3. 25. 확장 메서드(Extension Methods) 사용 확장 메서드(Extension Methods) 사용 확장 메서드는 기존 클래스에 새로운 메서드를 상속 없이 추가할 수 있는 강력한 기능입니다. 코드를 더 간결하고 읽기 쉽게 만들어주며, LINQ와 같은 라이브러리에서도 널리 사용 using System; public static class StringExtensions { // 문자열의 첫 글자를 대문자로 바꾸는 확장 메서드 public static string CapitalizeFirst(this string input) { if (string.IsNullOrEmpty(input)) return input; return char.ToUpper(input[0]) + input.Substring(1);.. 2025. 3. 24. 타이머(TTimer)를 이용한 주기적 작업 처리 타이머(TTimer)를 이용한 주기적 작업 처리 타이머(TTimer)를 이용한 주기적 작업 처리 TTimer는 주기적으로 어떤 작업을 수행하고 싶을 때 유용하게 사용할 수 있는 컴포넌트입니다. 예를 들어, UI 갱신, 자동 저장, 상태 체크 등에 활용 procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 1000; // 1000ms = 1초 Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := TimeToStr(Now); // 매초 현재 시간 표시 end; Interval 속성은 실행 간격(.. 2025. 3. 24. 익명 메서드(Anonymous Method) 활용하기 익명 메서드(Anonymous Method) 활용하기 익명 메서드는 이름 없이 즉석에서 정의할 수 있는 함수 또는 프로시저입니다.콜백 함수나 이벤트 핸들링을 단순화하는 데 유용합니다. uses System.SysUtils; procedure ExecuteWithCallback(Callback: TProc); begin ShowMessage('작업을 시작합니다...'); Callback; // 전달된 익명 메서드 실행 ShowMessage('작업이 완료되었습니다!'); end; procedure Test; begin ExecuteWithCallback(procedure begin ShowMessage('중간 작업 진행 중...'); end); end; 포인트:TProc .. 2025. 3. 20. PostgreSQL 시퀀스 초기화 PostgreSQL 시퀀스 초기화 TRUNCATE TABLE public."테이블명" RESTART IDENTITY; ALTER TABLE public."테이블명" ALTER COLUMN "필드" RESTART SET START 시작값; 2025. 2. 19. [1편] VCL 컴포넌트란? 개요 및 기본 개념 VCL 컴포넌트 1. VCL(Visual Component Library)이란?VCL(Visual Component Library)은 Delphi에서 제공하는 UI 컴포넌트 라이브러리로, Windows 애플리케이션을 쉽게 개발할 수 있도록 다양한 UI 요소를 제공합니다. Delphi 개발 환경에서는 VCL을 활용하여 폼 기반(Form-based) 애플리케이션을 제작하며, 코드 작성 없이 드래그 앤 드롭 방식으로 UI를 구성할 수 있습니다.✔ VCL을 사용하면?UI 개발 속도 향상: 컴포넌트를 배치하고 속성을 조정하는 것만으로 UI 제작이 가능복잡한 UI 요소를 쉽게 구성: TButton, TEdit, TPanel 등 다양한 컴포넌트 제공강력한 Windows 네이티브 지원: 윈도우즈 환경에 최적화된 U.. 2025. 2. 17. 인터페이스와 추상클래스 namespace Property2{ //.Net 9.0 internal class Program { abstract class Product { private static int serial = 0; public string SerialID { get {return String.Format("{0:d5}", serial++);} } abstract public DateTime ProductDate { get;set; } } class MyProduct : Product { public override DateTime ProductDate { get;set; } } record RTransaction { public string From { get; set; } public string T.. 2025. 2. 14. 이전 1 2 3 4 ··· 55 다음