본문 바로가기

Delphi155

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.
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.
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.
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.
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.
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.
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.
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.
Copy 함수를 사용한 문자열 일부 추출 Copy 함수를 사용한 문자열 일부 추출 델파이에서 문자열의 일부분을 추출할 때 Copy 함수를 사용하면 매우 쉽고 빠르게 원하는 부분을 잘라낼 수 있습니다. 텍스트 처리, 데이터 분석, 포맷 변환 등 다양한 상황에서 유용하게 활용됩니다. uses System.SysUtils; procedure CopyExample; var OriginalText, ExtractedText: string; begin OriginalText := 'Welcome to Delphi World!'; ExtractedText := Copy(OriginalText, 12, 6); // 12번째 문자부터 6글자 추출 ShowMessage('추출된 텍스트: ' + ExtractedText); end; Copy.. 2025. 4. 28.
IfThen을 사용한 간결한 조건 처리 IfThen을 사용한 간결한 조건 처리 델파이의 IfThen 함수는 짧고 간결하게 조건에 따라 값을 선택할 수 있게 해주는 함수입니다. 전통적인 if..then..else 구문보다 한 줄로 표현할 수 있어 코드가 훨씬 깔끔해집니다. uses System.StrUtils; procedure IfThenExample; var UserLevel: Integer; ResultText: string; begin UserLevel := 2; ResultText := IfThen(UserLevel = 1, '관리자', '일반 사용자'); ShowMessage('사용자 권한: ' + ResultText); end; IfThen(조건, 참일 때 값, 거짓일 때 값) 형식 문자열 뿐 아니라 .. 2025. 4. 25.
IncludeTrailingPathDelimiter로 경로 끝에 슬래시 추가하기 IncludeTrailingPathDelimiter로 경로 끝에 슬래시 추가하기 파일 또는 폴더 경로를 조합할 때 슬래시(\) 누락으로 인해 문제가 생기는 경우가 많습니다. 델파이의 IncludeTrailingPathDelimiter 함수는 경로 끝에 슬래시가 없으면 자동으로 추가해줘 경로 연결 시 안전하게 사용할 수 있습니다. uses System.SysUtils; procedure JoinFolderPath; var BasePath, FullPath: string; begin BasePath := 'C:\MyApp\Data'; FullPath := IncludeTrailingPathDelimiter(BasePath) + 'Backup.txt'; ShowMessage('전체 경로.. 2025. 4. 18.
Now와 FormatDateTime을 활용한 현재 날짜 및 시간 포맷 출력 Now와 FormatDateTime을 활용한 현재 날짜 및 시간 포맷 출력   델파이에서 Now 함수는 현재 날짜와 시간을 반환합니다.  이를 FormatDateTime 함수와 함께 사용하면 다양한 형식으로 날짜와 시간을  손쉽게 표시할 수 있습니다. 로그 기록, UI 표기, 파일명 생성 등에 자주 활용됩니다. uses   System.SysUtils; procedure ShowCurrentDateTime; var   CurrentDateTime: string; begin   CurrentDateTime := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);   ShowMessage('현재 시간: ' + CurrentDateTime); end; ● 'yyyy', 'mm', '.. 2025. 4. 14.
TThread.Queue를 활용한 안전한 UI 업데이트 TThread.Queue를 활용한 안전한 UI 업데이트델파이에서 스레드 작업을 할 때  직접 UI 컴포넌트에 접근하면 오류가 발생할 수 있습니다.  이때 TThread.Queue를 사용하면 UI 스레드에서 안전하게  코드를 실행할 수 있습니다.  백그라운드 작업 중 UI에 메시지를 띄우거나  데이터를 갱신할 때 매우 유용합니다. uses   System.Classes, Vcl.Dialogs; procedure StartBackgroundTask; begin   TThread.CreateAnonymousThread(procedure   begin     Sleep(3000); // 3초간 작업 수행     TThread.Queue(nil, procedure     begin       ShowMessage.. 2025. 4. 10.
TFormatSettings를 사용한 지역화된 숫자/날짜 포맷 처리 TFormatSettings를 사용한 지역화된 숫자/날짜 포맷 처리 델파이에서 숫자나 날짜 형식을 지역 설정에 따라  다르게 출력해야 할 경우 TFormatSettings를 사용하면 유용합니다.  특히 다국어 지원이나 사용자 맞춤 포맷이 필요할 때 매우 효과적입니다. uses   System.SysUtils; procedure ShowLocalizedDateAndNumber; var   FS: TFormatSettings;   FormattedDate, FormattedNumber: string; begin   FS := TFormatSettings.Create('fr-FR');  // 프랑스 지역 설정   FormattedDate := FormatDateTime('dd mmmm yyyy', Date, .. 2025. 4. 7.
Interface를 활용한 의존성 주입 구조 만들기 Interface를 활용한 의존성 주입 구조 만들기 Interface를 사용하면 클래스 구현에 의존하지 않고 코드를 작성할 수 있어,  유지보수성과 확장성이 높아집니다.  델파이에서는 인터페이스 기반 설계를 통해 DI(Dependency Injection) 패턴을 쉽게  구현할 수 있습니다. type   IPrinter = interface     ['{3B770F50-22DA-4E69-8F28-56FA4E09B307}']     procedure Print;   end;   TConsolePrinter = class(TInterfacedObject, IPrinter)     procedure Print;   end;   TService = class   private     FPrinter: IPrin.. 2025. 4. 4.
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.
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.
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.
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.
익명 메서드(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.