본문 바로가기

Delphi134

객체지향 언어로서의 오브젝트 파스칼 1편 객체지향 언어로서의 오브젝트 파스칼 1편 객체지향 언어로서의 오브젝트 파스칼 오브젝트 파스칼의 객체지향성을 몰라도 델파이 어플리케이션을 쉽게 만들 수 있다. 단순히 폼을 하나 만들고, 거기에 여러가지 컴포넌트 들을 추가하고, 이벤트 핸들러에 적당한 내용의 코드 들을 추가하면 그걸로 충분한 것이다. 그렇지만, 이것을 이해하면 델파이가 어떤 방법으로 작업을 처리하는지 이해할 수 있고, 자신만의 컴포넌트를 만들어 내거나, 비교적 커다란 프로젝트를 진행할 때에 커다란 도움을 받게 될 것이다. ​ OOP의 기본 개념 프로그램은 데이터와 이를 처리하는 알고리즘으로 구성되어 있다고 하는 유명한 말이 있다. 그렇기 때문에, 프로그래밍 언어의 구조를 가만히 살펴보면 대부분의 경우 데이터를 다루는데 필요한 각종 정의 들과.. 2021. 6. 4.
델파이 기본타입 헬퍼 델파이 기본타입 헬퍼 자바 버전5부터 오토박싱 개념이 도입되어 기본타입을 마치 객체처럼 사용할 수 있도록 편리한 기능이 도입되었다. 델파이도 비슷한 기능을 제공하는데 아마 XE8부터인가?.. 도입시점을 알 수 없지만.. 엠바카데로 델파이 위키를 보면 XE3부터 지원되는 듯한데.. (검색해봤으나, 시원히 알려주는 자료를 찾지 못했습니다 ㅠㅠ) 아무튼.. 델파이 헬퍼는 class나 record에서 사용가능한데 이 주제는 냅두고.. 기본타입에 대한 헬퍼만 소개하겠다 예전에는 var intValue: Integer; begin intValue:= StrToInt('100') end; 라고 작성했지만 기본타입에 대한 헬퍼덕분에 아래처럼 사용이 가능하다. intValue:= '100'.ToInteger; 객체를 이.. 2021. 6. 3.
델파이(Delphi) 디자인패턴(Design pattern) 4탄 델파이(Delphi) 디자인패턴(Design pattern) 4탄 Strategy 패턴 Strategy 패턴을 쉽게 이해하는 방법은, 상속의 단점 두가지(불필요한 기능상속, 다중상속 불허) 보완하기 위한 Interface 의 사용과 Abstract 패턴의 사용을 통한 메서드의 다형성 보장이다. Strategy 패턴에 대해 구글링을 해 보면 Abstract 패턴만을 강조하여 도식화 해 놓고 Strategy 패턴이라고 알려주는 곳이 많은데, 이는 잘못된 설명이다. Strategy 패턴의 진정한 뜻은 자주 바뀌는 개발 요구사항에 대비해 최소의 비용을 들여 전략적으로 코드가 유연성을 가질 수 있도록 설계하는 기법이다. 코드의 유연성이란 말 안에는 기능의 구현없이 완성된 모듈을 재빠르게 가져다 쓸수 있도록 하는 .. 2021. 6. 1.
델파이(Delphi) 디자인패턴(Design pattern) 3탄 델파이(Delphi) 디자인패턴(Design pattern) 3탄 싱글톤(Singletone) 패턴 Singletone 은 single + tone 의 복합어 즉, 하나 + 논조 [ 論調 ] 논조 : 논하는 말이나 글의 투. 위 말을 디자인패턴의 형식에서 풀어 보면 프로그램 전체에서 "오직 하나의 인스턴스 가 존재하여야 한다는 원칙" 입니다. 이런 원칙을 세워서 프로그램을 개발해야 하는 이유는 원칙을 위배하게 되면 프로그램이 뒤죽박죽이 될 수 있기 때문입니다. 프로그램 개발에 있어 싱글톤으로 생성해야 하는 클래스 인스턴스가 여러가지가 존재하겠지만 가장 기본이되고 필수적인 클래스가 바로 어플리케이션의 설정값을 들고 있는 프로그램 설정값 클래스입니다. 특수한 경우가 아니라면 설정값은 프로그램 전체에서 하나이.. 2021. 6. 1.
델파이(Delphi) 디자인패턴(Design pattern) 2탄 델파이(Delphi) 디자인패턴(Design pattern) 2탄 옵져버(Observer) 패턴 "Observer" 라는 단어를 영어사전에서 찾아 보면 아래와 같습니다. Observer - 보는 사람, 목격자, 관찰자. 정찰병, 참관인 이런 여러가지 말이 나오는데 디자인패턴에서 통용되는 가장 적합한 해석은 바로 "관찰자" 또는 "정찰병" 입니다. 이 관찰자의 핵심적인 역활은 다음과 같습니다. 1. 어떤 상황이 발생하는지 잘 관찰하는 것 2. 특정상황이 발생하면 그 사실을 꼭 알아야 하는 다른 대상들에게 전파해 주는 것 이런 개념이 개발에도 꼭 필요한 경우가 있습니다. 채팅프로그램이 Observe 패턴을 쓰는 가장 좋은 예입니다. 채팅방에 10명의 대화자가 참가중인데 이중에 누구든 글을 쓰면 다른 대화자들.. 2021. 5. 31.
델파이 디자인패턴 1탄 델파이 디자인패턴 1탄 디자인패턴이란? 프로그램을 만드는데 있어 초식이 되는 코딩방식 "초식"이란 말을 처음 들어 보시는 분들도 많을 텐데요. 이 말을 국어사전에서 찾아보면 아래와 같은 해석이 달려 있습니다. 초식(招式) - 무협물에서 공격이나 방어를 하는 기본기술을 연결한 연속동작 다시말해 어떤 권법을 구사하는데 있어 핵이 되는 연결된 동작들을 정리하여 그 이름을 부여해 놓은 것입니다. 예를 들면 다음과 같습니다. 초식 1 : 양손으로 얼굴 가리기 + 숙이거나 앉기 + 주먹으로 옆구리 공격 (주로 주먹으로 공격해 오는 상대에게 쓰면 좋음) 초식 2 : 한걸음 뒤로 물러나기 + 양손으로 얼굴 가리기 + 재빨리 다가가기 + 주먹으로 얼굴 가격하기 (주로 발로 공격해 오는 상대에게 쓰면 좋음) 이런 초식의 .. 2021. 5. 28.
델파이 익명메소드 Part2 익명 메소드의 사용 익명 메소드는 다음의 예와 같이 일반적으로 어떤 것에 대입됩니다. 익명 메소드는 또한 함수에 의해 리턴되거나 메소드를 호출할 때 파라미터 값으로 전달될 수도 있습니다. 예를 들어, 아래는 바로 위에서 정의한 익명 메소드 변수 myFunc를 사용하 는 코드입니다. 익명 메소드 뿐만 아니라 메소드 참조도 메소드 변수에 대입될 수 있습니다. 예를 들면 다음 과 같습니다. 하지만, 그 반대는 되지 않습니다. 익명 메소드를 일반 메소드 포인터에 대입할 수는 없습니다. 메소드 참조는 매니지드 타입이지만 메소드 포인터는 언매니지드 타입입니다. 따라서 타입 안전성의 이유로 메소드 참조를 메소드 포인터로 대입하는 것은 지원되지 않습니다. 예를 들어, 이벤트는 메소드 포인터 값 속성이므로, 익명 메소드.. 2021. 5. 27.
델파이 익명메소드 Part1 델파이 익명메소드 Part1 이름이 시사하는 것처럼, 익명 메소드(anonymous method)는 이름이 연관되지 않은 프로시저나 함수 익명 메소드는 어떤 코드 블록을 변수에 대입될 수 있거나 메소드의 파라미터로 사용될 수 있는 엔티티로 취급합니다. 또한 익명 메소드는 그 메소드가 정의된 문맥에서 변수나 변수에 지정된 값을 가리킬 수도 있습니다. 익명 메소드는 단순한 문법으로 정의되고 사용될 수 있습니다. 익명 메소드는 다른 언어들의 클로저(closure) 문법과 유사합니다. 익명 메소드의 문법 익명 메소드는 일반 프로시저나 함수와 비슷하게 정의되지만 이름이 지정되지 않습니다. 예를 들어, 아래 함수는 익명 메소드로 정의된 함수를 리턴합니다. MakeAddr 함수는 이름 없이 선언된 함수, 즉 익명 메.. 2021. 5. 26.
델파이 배열 상수 델파이 배열 상수 다목적 웹 프로그래밍 언어 인 Delphi에서 배열 은 개발자가 일련의 변수를 동일한 이름으로 참조하고 숫자 (인덱스)를 사용하여 분할 수 있도록합니다. 대부분의 시나리오에서 배열을 변수로 선언하여 런타임에 배열 요소를 변경할 수 있습니다. 그러나 때때로 상수 배열 (읽기 전용 배열)을 선언해야합니다. 상수 또는 읽기 전용 변수의 값을 변경할 수 없습니다. 따라서 상수 배열 을 선언하는 동안 이를 초기화해야합니다. 세 개의 상수 배열 선언 이 코드 예제는 Days , CursorMode 및 Items 라는 세 개의 상수 배열을 선언하고 초기화 합니다. Days 는 6 개 요소로 구성된 string 형 배열입니다. Days [1]은 Mon 문자열을 반환합니다. CursorMode 는 두 .. 2021. 5. 25.
델파이 10 3 추가된 문법 델파이 10 3 추가된 문법 델파이 언어가 10.3 버전부터 로컬 변수 선언에 있어 훨씬 더 융통적으로 변합니다. 매우 핵심적인 기능 변화라고 볼 수 있습니다. 이번 업데이트는 본래 파스칼(Pascal) 언어의 핵심 개념을 깨는 변화이기는 합니다. 하지만 이 변화는 많은 장점을 제공하며, 이를 통해 불필요한 코드를 줄일 수 있습니다. 예전 스타일의 Var 블록 터보파스칼 1부터 지금까지 기존 파스칼 언어 규칙에 따라 모든 로컬 변수 선언은 함수(function), 프로시저(procedure), 메소드(method) 작성 전에 var 블록에 선언해야만 했습니다. procedure Test; var I: Integer; begin I := 22; ShowMessage (I.ToString); end; 인라인.. 2021. 5. 24.
델파이 쓰레드 사용법 델파이 쓰레드 사용법 1. 쓰레드란 무엇인가? A 라는 프로그램과 B 라는 프로그램이 실행중에 있다. 이러한 경우 A 프로그램에서 B 프로그램의 전역변수에 접근할 수 있는가? 물론 불가능하다. 이것이 가능하다는 것은 여러분이 즐기고 있는 벽돌깨기 프로그램이 MP3 플레이어 프로그램의 메모리 영역에 접근할 수 있다는 소리와 같은 것이다. 프로세스마다 독립적으로 메모리를 유지하기 때문에 이러한 일은 불가능하다. 부모 프로세스가 자식 프로세스를 생성하는 경우도 이와 같다. 생성되는 모든 자식 프로세스는 자신만의 독립적인 메모리 공간을 소유하게 된다. 그러나 쓰레드를 생성하게 되는 경우, 스택(Stack) 메모리 공간만 독립적으로 유지하게 되며 일반적인 나머지 메모리 영역은 공유된다. 일단은 프로그램상에서 쓰레.. 2021. 5. 21.
MessageBox 사용법 데스크톱 (Windows) 응용 프로그램의 경우 메시지 (대화 상자) 상자를 사용하여 응용 프로그램 사용자에게 일부 작업을 수행해야 함, 일부 작업이 완료되었음을 알리거나 일반적으로 사용자의주의를 끌 수 있습니다. 에서 델파이사용자에게 메시지를 표시하는 방법에는 여러 가지가 있습니다. ShowMessage 또는 InputBox와 같이 RTL에서 제공되는 루틴을 표시하는 기성 메시지를 사용할 수 있습니다. 또는 (재사용을 위해) 자신 만의 대화 상자를 만들 수 있습니다 : CreateMessageDialog. 위의 모든 대화 상자의 일반적인 문제는 응용 프로그램이 활성화되어 있어야 사용자에게 표시된다는 것 입니다. "활성"은 응용 프로그램에 "입력 포커스"가있는 경우를 나타냅니다. 사용자의주의를 끌고 다른.. 2021. 5. 20.
델파이 제네릭(Generic) 과 제너릭(Generic)을 사용한 예제 델파이 제네릭(Generic) 과 제너릭(Generic)을 사용한 예제 제너릭과 제너릭을 사용한 예제 제너릭이라는 단어는 자바등의 언어에서는 들어보거나 사용해 보신 분들도 있지만 델파이 개발자들은 아직 생소하거나 코드를 제대로 구현해 본적이 없는 분들도 있습니다. 또한 기존의 소스를 수정하시는 것이 번거롭다고 생각할수도 있습니다. 그래서 이 자료에서는 델파이 2009버전부터 추가되어 사용되는 제너릭의 전반적인 개념과 델파이에서 사용되는 제너릭 컬렉션 등을 소개해 보도록 하겠습니다. 제너릭이 무엇인지 설명하기 전에 델파이에서 제너릭을 사용하지 않았던 시점의 코드를 한 번 살펴 보도록 하겠습니다. 제너릭을 사용하지 않은 선언 및 호출 프로시저와 함수들을 선언할 때 우리는 항상 프로시저, 함수 등의 매개변수 .. 2021. 5. 19.
델파이 제네릭(Generic) 문법 변경 사항 델파이 제네릭(Generic) 문법 변경 사항 아래의 변경 사항들은 제네릭 혹은 제네릭 타입을 지원하기 위한 것들입니다. 2021. 5. 18.
델파이 제네릭(Generic) 클래스 변수 표준함수 델파이 제네릭(Generic) 클래스 변수 표준함수 제네릭 타입 내에서 정의된 클래스 변수는 타입 파라미터에 의해 타입이 인스턴스화될 때마 다 인스턴스화됩니다. 다음의 코드는 TFoo.FCount 및 TFoo.FCount가 단 한번 인스턴스화되고 이들은 서로 다른 변수라는 것을 보여줍니다. 표준함수와 문법의 변경 사항 다음은 제네릭을 지원하기 위한 표준 함수의 변경 사항들입니다. 예제는 다음과 같은 형식입니다. 표준 함수들: 2021. 5. 18.
델파이 제네릭(Generic) 제약조건 델파이 제네릭(Generic) 제약조건 제네릭의 제약조건 제네릭의 타입 파라미터에 제약조건을 연계시킬 수 있습니다. 제약조건(constraint)은 제네릭 타입의 구축(construction) 시에 파라미터로 넘겨질 모든 구체적 타입들이 지원해야 하는 아이템들을 선언합니다. 제네릭에서 제약조건의 지정 제약조건 항목들은 다음과 같은 것들을 포함합니다. 없거나, 하나 이상의 인터페이스 타입 없거나 하나의 클래스 타입 예약어“constructor”,“class”, 혹은“record” 제약조건으로서“constructor”와“class”를 모두 지정할 수 있습니다. 하지만“record”는 다른 예약어들과 같이 쓰일 수 없습니다. 여러 제약조건을 함께 사용하면 덧셈 합으로 동작 합니다(AND 로직). 여기서 예제들.. 2021. 5. 17.
델파이 제네릭(Generic) 메소드 델파이 제네릭(Generic) 메소드 (파라미터,오버로드,타입 호환성) 파라미터화된 메소드 메소드를 타입 파라미터와 함께 선언할 수 있습니다. 파라미터 타입과 결과 타입에서 타입 파라미터를 사용할 수 있습니다. 파라미터화된 메소드는 오버로드된 메소드와 비슷합니다. 메소드를 인스턴스화하는 데에는 두 가지 방법이 있습니다. 명시적으로 타입 인자를 지정하는 방법 인자 타입으로부터 자동으로 추정하는 방법 예를 들면 다음과 같습니다. 타입 파라미터의 유효 범위 타입 파라미터의 유효 범위는 타입 선언과 그 모든 멤버들의 바디를 포함하지만, 자손 타입 은 포함되지 않습니다. 예를 들면 다음과 같습니다. 제네릭에서의 오버로드와 타입 호환성 오버로드 제네릭 메소드도‘overload’지시어를 사용하여 제네릭이 아닌 메소드.. 2021. 5. 17.
IE캐시를 모두 지우기 IE캐시를 모두 지우기 uses WinInet; procedure DeleteIECache; var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; begin dwEntrySize := 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntryS.. 2021. 5. 14.
델파이 제네릭(Generic) 타입 델파이 제네릭(Generic) 타입 기반 타입 클래스,인터페이스,레코드,프로시저 ​ 파라미터화된 클래스나 인터페이스의 기반 타입(base type)은 실제 타입이거나 구축된 타입일 수 있습니다. 기반 타입은 타입 파라미터만으로 이루어질 수는 없습니다. TFoo2이 인스턴스화되면, 조상 클래스는 TBar2이 되며, TBar2 은 자동으로 인스턴스화됩니다. ​ 클래스, 인터페이스, 레코드 타입 클래스, 인터페이스, 레코드 타입은 타입 파라미터로 선언될 수 있습니다. 예를 들면 다음과 같습니다. 프로시저 타입 프로시저 타입과 메소드 포인터는 타입 파라미터로 선언될 수 있습니다. 파라미터 타입과 결과 타입에서도 타입 파라미터를 사용할 수 있습니다. ​ 예를 들면 다음과 같습니다. 2021. 5. 13.
델파이 제네릭(Generic) 선언 제네릭의 선언 ​ 제네릭의 선언은 일반적인 클래스, 레코드, 인터페이스 타입과 비슷합니다. 차이점은, 제네릭 선언의 타입 식별자 뒤에 각진 괄호()로 둘러싸인 하나 이상의 타입 파라미터의 리스트가 따라온다는 것입니다. 타입 파라미터는 포함하는 타입(container type) 선언과 메소드 바디 내에서 일반적인 타입 식별자처럼 사용될 수 있습니다. ​ 예를 들면 다음과 같습니다. 타입 인자 ​ 제네릭 타입은 타입 인자(type argument)를 제공함으로써 인스턴스화됩니다. 델파이에서 어떤 타입이든 타입 인자로 사용할 수 있지만, 정적 배열, 짧은 문자열, 그리고 이들 두가지 타입의 필드를 포함하는(재귀적으로) 레코드 타입의 경우는 예외입니다. ​ 중첩된 타입 ​ 제네릭 내에 중첩된 타입도 역시 제네릭.. 2021. 5. 13.