Delphi and Unicode

Size: px
Start display at page:

Download "Delphi and Unicode"

Transcription

1 솔루션문서 새 Delphi 코딩스타일과아키텍처 Delphi 2009 의언어기능리뷰 2008 년 12 월 Corporate Headquarters Asia-Pacific Headquarters DEVGEAR 100 California Street, 12th Floor L La Trobe Street 서울특별시서초구 San Francisco, California Melbourne VIC 3000 반포동 Australia 데브기어 4층

2 소개 : DELPHI 언어 Object Pascal 로더잘알려진 Delphi 언어는단일상속및개체참조모델이특징인강력한최신타입확인및개체지향언어입니다. 최근몇년간 Delphi 언어는레코드메소드, 레코드를위한운영자오버로드, 클래스데이터, 중첩타입, 봉인된클래스, 최종메소드및기타관련기능등을사용하여향상되었습니다. 가장놀라운확장은새로운메소드를기존클래스에추가하거나일부기존메소드를대체하는데사용하는기술인클래스도우미의도입일것입니다. 그러나 Delphi 2009 에서컴파일러에추가된새기능은훨씬더중요합니다. Unicode 를지원하기위한문자열타입에대한확장이외에도 Delphi 의최근버전에는제네릭데이터타입, 익명메소드및여러개의기타 사소하지만 흥미로운기능이적용되었습니다. 제네릭소개 제네릭클래스의첫예로서저는키 - 값쌍데이터구조를구현했습니다. 아래에표시된첫번째코드조각은값을보유하는데사용되는개체와함께, 일반적으로작성되는데이터구조를보여줍니다. TKeyValue = class private FKey: string; FValue: TObject; procedure SetKey(const Value: string); procedure SetValue(const Value: TObject); public property Key: string read FKey write SetKey; property Value: TObject read FValue write SetValue; 이클래스를사용하려면다음조각에표시된대로개체를생성하고, 해당개체의키와값을설정하여사용할수있습니다. // FormCreate kv := TKeyValue.Create; // Button1Click kv.key := 'mykey'; kv.value := Sender; // Button2Click kv.value := self; // 폼 // Button3Click ShowMessage ('[' + kv.key + ',' + kv.value.classname + ']'); 제네릭을사용하면값에대한폭넓은정의를사용할수있지만그것이핵심은아닙니다. 앞으로다루겠지만큰차이점은키 - 값제네릭클래스를인스턴트화하면해당클래스가지정된데이터타입에연결된특정클래스가된다는것입니다. 이렇게하면코드타입을더안전하게만들수있지만개인적으로는기존에사용하던방식을그대로고수합니다. 이제제네릭클래스를정의하는 2

3 데사용되는구문에대해알아보도록하겠습니다. TKeyValue<T> = class private FKey: string; FValue: T; procedure SetKey(const Value: string); procedure SetValue(const Value: T); public property Key: string read FKey write SetKey; property Value: T read FValue write SetValue; 이클래스정의에는자리표시자 T 에의해표시되는한개의지정되지않은타입이있습니다. 제네릭 TKeyValue<T> 클래스는지정되지않은해당타입을속성값필드타입과 setter 메소드매개변수로사용합니다. 그러나메소드는일반적인방법으로정의되며, 메소드가제네릭타입과관련이있다하더라도해당정의에는제네릭타입을포함한클래스의전체이름이포함됩니다. procedure TKeyValue<T>.SetKey(const Value: string); FKey := Value; procedure TKeyValue<T>.SetValue(const Value: T); FValue := Value; 대신, 클래스를사용하려면제네릭타입의실제값을제공하여전체클래스를정규화해야합니다. 예를들어이제아래와같이작성하여키 - 값개체호스팅버튼을값으로선언할수있습니다. kv: TKeyValue<TButton>; 또한전체이름이실제타입이름이기때문에인스턴스작성시해당전체이름도필요합니다. ( 인스턴스화되지않은제네릭타입이름은타입구성메커니즘과유사합니다.) 키 - 값쌍에대해특정타입의값을사용하면, TButton 개체또는파생개체를키값쌍에추가할수있고추출된개체의다양한메소드를사용할수있기때문에코드가훨씬강력해집니다. 다음은일부코드조각의예입니다. // FormCreate kv := TKeyValue<TButton>.Create; // Button1Click kv.key := 'mykey'; kv.value := Sender as TButton; // Button2Click kv.value := Sender as TButton; // was "self" // Button3Click ShowMessage ('[' + kv.key + ',' + kv.value.name + ']'); 코드의이전버전에서는제네릭개체할당시버튼또는양식을추가할수있었습니다. 이제는버튼만추가할수있으며, 이것은컴파일러에의해강제로적용된규칙입니다. 마찬가지로, 출력에는제네릭 kv.value.classname 이아니라구성요소이름또는 TButton 의다른속성을사용할수있습니다. 3

4 물론키 - 값쌍을다음과같이선언하여원본프로그램을모방할수도있습니다. kvo: TKeyValue<TObject>; 제네릭키 - 값쌍클래스의이번버전에서는개체를값으로추가할수있습니다. 그러나추출한개체를특정타입에캐스트하지않으면추출한개체를많이활용할수없습니다. 균형을잘맞추려면다음과같이특정버튼과개체중간의어떤것을찾고값이구성요소가되도록요청할수있습니다. kvc: TKeyValue<TComponent>; 마지막으로다음과같이개체값이아니라보다일반적인정수값을저장하는제네릭키 - 값쌍클래스의인스턴스를생성할수있습니다. kvi: TKeyValue<Integer>; 제네릭의타입규칙 제네릭타입의인스턴스를선언하면이타입은수반되는모든작업에서컴파일러가강제로적용하는특정버전을사용하게됩니다. 따라서, 다음과같은제네릭클래스를가지는경우 TSimpleGeneric<T> = class Value: T; 지정된타입으로특정개체를선언하기때문에다른타입을값필드에할당할수없습니다. 다음두개의개체가지정되면아래의일부할당은틀릴수있습니다. sg1: TSimpleGeneric<string>; sg2: TSimpleGeneric<Integer>; sg1 := TSimpleGeneric<string>.Create; sg2 := TSimpleGeneric<Integer>.Create; sg1.value := 'foo'; sg1.value := 10; // Error // E2010 Incompatible s: 'string' and 'Integer' sg2.value := 'foo'; // Error // E2010 Incompatible s: 'Integer' and 'string' sg2.value := 10; 특정타입을제네릭선언으로정의하면 Object Pascal 과같이강력한타입의언어에서기대하는바처럼컴파일러가강제로적용하게됩니다. 타입확인도전체적으로제네릭개체에적용할수있습니다. 개체에대한제네릭매개변수를지정하면다른호환되지않는타입인스턴스에기반한유사제네릭타입을개체에할당할수없습니다. 잘이해가안되는경우아래예를보면명확하게이해할수있습니다. sg1 := TSimpleGeneric<Integer>.Create; // 에러 // E2010 Incompatible s: // 'TSimpleGeneric<System.string>' // and 'TSimpleGeneric<System.Integer>' 타입호환성규칙은타입이름이아니라구조별로정해지지만제네릭타입인스턴스에다른 4

5 호환되지않는타입인스턴스를할당할수는없습니다. DELPHI 의제네릭 앞의예에서는 Delphi 3 이인터페이스를도입한이후 Object Pascal 언어로의가장중요한확장중하나인제네릭클래스를정의하고사용하는방법을살펴보았습니다. 이제꽤복잡하지만매우중요한그기술을심도있게다루기전에예를통해그기능을설명하도록하겠습니다. 언어적인측면에서제네릭을설명한다음이기술을언어에추가한주요이유중하나인제네릭컨테이너클래스의사용과정의를포함한추가예로다시돌아가도록하겠습니다. Delphi 2009 에서클래스를정의할때아래와같이꺽쇠괄호내의기타 매개변수 를추가하여이후에제공되는타입의위치를유지할수있다는것을이미살펴봤습니다. TMyClass <T> = class... 제네릭타입은필드타입 ( 앞의예에서사용함 ), 속성의타입, 함수의매개변수또는반환값의타입및기타타입으로사용할수있습니다. 제네릭타입이결과즉매개변수로서만사용되거나클래스의선언이아닌일부메소드의정의에만사용되는경우가있으므로로컬필드 ( 또는배열 ) 에대한타입을반드시사용해야하는것은아닙니다. 확장또는제네릭타입선언의이형식을클래스및레코드에사용할수있습니다. ( 최신버전의 Delphi 에서는레코드도메소드와오버로드된연산자를포함할수있습니다.) C++ 과달리제네릭글로벌함수를선언할수는없지만단일클래스메소드로제네릭클래스를선언할수는있으며이는거의같습니다. 다른정적언어와마찬가지로 Delphi 의제네릭구현은런타임프레임워크에기반하지않고컴파일러와링커로처리되기때문에런타임메커니즘과는거의무관합니다. 런타임시바인딩되는가상함수호출과달리템플릿메소드는사용자가인스턴스화하는각템플릿타입별로한번생성되며컴파일시간동안생성됩니다. 이러한접근방법에는단점도있지만긍정적인측면에서보면제네릭클래스가일반클래스만큼또는런타임범주에대한필요성을줄일수있을정도로보다효율적이라는것을의미합니다. 제네릭타입함수 지금까지살펴본제네릭타입정의의가장큰문제는제네릭타입의개체에대해할수있는작업이거의없다는것입니다. 이러한한계를극복하기위해사용할수있는두가지의기술이있습니다. 첫번째는제네릭타입을특별히지원하는런타임라이브러리의일부특수함수를활용하는것입니다. 두번째는훨씬더강력한방법으로서사용할수있는타입에제약조건을포함한제네릭클래스를정의하는것입니다. 이섹션에서는첫번째부분에, 다음섹션에서는제약조건에초점을맞춰설명하도록하겠습니다. 5

6 이미설명한바와같이제네릭타입정의의매개변수타입 (T) 에서동작하도록특별히수정된 2 개의기존함수와 1 개의새로운함수가있습니다. Default(T) 는새로운함수로현재타입에대해빈또는 0( 영 ) 인값 이나 null 값을반환하며, 0( 영 ), 빈문자열, nil 등의값이될수있습니다. TypeInfo(T) 는제네릭타입의현재버전에대한런타임정보에포인터를반환합니다. SizeOf(T) 는타입의메모리크기를바이트로반환합니다. 다음예는활성중인 3 개의제네릭타입함수를표시하는제네릭클래스입니다. TSampleClass <T> = class private data: T; public procedure Zero; function GetDataSize: Integer; function GetDataName: string; function TSampleClass<T>.GetDataSize: Integer; Result := SizeOf (T); function TSampleClass<T>.GetDataName: string; Result := GetTypeName (TypeInfo (T)); procedure TSampleClass<T>.Zero; data := Default (T); GetDataName method 에서저는직접데이터구조에액세스하지않고 GetTypeName function( 또는 TypInfo 단위 ) 를사용했습니다. 이방법을사용하면타입이름이있는인코딩된 ShortString 값에서적합한 UTF-8 변환을실행할수있습니다. 위에나온선언이제공된경우 3 개의다른제네릭타입인스턴스에서자체적으로 3 번반복되는다음의테스트코드를컴파일할수있습니다. 여기서는반복된코드를생략했지만데이터필드에액세스하는데사용되는명령문은실제타입에따라달라지므로남겨두었습니다. t1: TSampleClass<Integer>; t2: TSampleClass<string>; t3: TSampleClass<double>; t1 := TSampleClass<Integer>.Create; t1.zero; Log ('TSampleClass<Integer>'); Log ('data: ' + IntToStr (t1.data)); Log (': ' + t1.getdataname); Log ('size: ' + IntToStr (t1.getdatasize)); t2 := TSampleClass<string>.Create; 6

7 ... Log ('data: ' + t2.data); t3 := TSampleClass<double>.Create;... Log ('data: ' + FloatToStr (t3.data)); 이코드를실행하면다음과같은출력이생성됩니다. TSampleClass<Integer> data: 0 : Integer size: 4 TSampleClass<string> data: : string size: 4 TSampleClass<double> data: 0 : Double size: 8 이상하게들리겠지만제네릭클래스내용이외의특정타입에서도제네릭타입함수를사용할수있습니다. 예를들어다음과같이작성할수있습니다. I: Integer; s: string; I := Default (Integer); Log ('Default Integer': + IntToStr (I)); s := Default (string); Log ('Default String': + s); Log ('TypeInfo String': + GetTypeName (TypeInfo (string)); Default are 에대한호출은 Delphi 2009 의새로운기능이지만 (( 템플릿외에서는전혀유용하지않음 ) 마지막의 TypeInfo 에대한호출은이전버전의 Delphi 에서이미가능했습니다. 다음은호출에대한간단한출력입니다. Default Integer: 0 Default String: TypeInfo String: string 제네릭제약조건 위에서살펴본바와같이제네릭타입값을통해제네릭클래스의메소드로할수있는작업은매우제한되어있습니다. 제네릭타입값을차례로분배 ( 즉, 할당 ) 하고위에서방금전에설명한제네릭타입함수가허용하는제한된작업을수행할수있습니다. 제네릭타입클래스의실제작업중일부를수행하기위해서일반적으로제약조건을배치합니다. 예를들어제네릭타입을클래스로제한하면컴파일러를사용하여클래스의모든 TObject 메소드를호출할수있습니다. 클래스를지정된계층에속하도록하거나특정인터페이스를실행하도록제약할수있습니다. 7

8 클래스제약조건 사용할수있는가장간단한제약조건은클래스제약조건입니다. 클래스제약조건을사용하려면다음과같은제네릭타입을선언해야합니다. TSampleClass <T: class> = class 클래스제약조건을지정하여개체타입만제네릭타입으로사용할수있음을지정합니다. 다음의선언을사용하여클래스제약조건을실행할수있습니다. TSampleClass <T: class> = class private data: T; public procedure One; function ReadT: T; procedure SetT (t: T); 다음에표시된처음 2 개의인스턴스 (3 번째는아님 ) 를생성할수있습니다. sample1: TSampleClass<TButton>; sample2: TSampleClass<TStrings>; sample3: TSampleClass<Integer>; // Error 이마지막선언으로발생하는컴파일러에러는다음과같습니다. E2511 Type parameter 'T' must be a class 이제약조건을지정하면어떤이점이있을까요? 제네릭클래스메소드에서이제가상메소드를포함한 TObject 메소드를호출할수있습니다! 다음은 TSampleClass 클래스에대한 One 메소드입니다. procedure TSampleClass<T>.One; if Assigned (data) then Form30.Log('ClassName: ' + data.classname); Form30.Log('Size: ' + IntToStr (data.instancesize)); Form30.Log('ToString: ' + data.tostring); 프로그램을사용하여다음코드조각에서처럼 One 메소드가제네릭타입의몇몇인스턴스를정의하고사용할때의실제효과를확인할수있습니다. sample1: TSampleClass<TButton>; sample1 := TSampleClass<TButton>.Create; try sample1.sett (Sender as TButton); sample1.one; finally sample1.free; 8

9 사용자정의된 ToString 메소드를포함한클래스를선언하면제네릭타입에제공된실제타입과상관없이데이터개체가특정타입에속할경우이사용자정의버전이호출됩니다. 다시말하면다음과같은 TButton descendant 가있는경우, TMyButton = class(tbutton) public function ToString: string; override; 이개체를 TSampleClass<TButton> 값으로전달하거나제네릭타입의특정인스턴스를정의할수있으며, 두경우모두 One 을호출하면다음과같이 ToString 의특정버전을실행하게됩니다. sample1: TSampleClass<TButton>; sample2: TSampleClass<TMyButton>; mb: TMyButton;... sample1.sett(mb); sample1.one; sample2.sett(mb); sample2.one; 클래스제약조건과유사하게다음과같이선언한레코드제약조건을사용할수있습니다. TSampleRec <T: record> = class 그러나일반적으로서로다른레코드가공통으로가지는것이거의없기때문에 ( 공통조상이없음 ), 이선언은다소제한됩니다. 특정클래스제약조건 제네릭클래스가클래스의특정하위세트 ( 특정계층 ) 과함께동작해야하는경우지정된기본클래스에기반한제약조건을지정해야할수도있습니다. 예를들어다음과같이선언하는경우 TCompClass <T: TComponent> = class 이제네릭클래스의인스턴스는구성요소클래스, 즉 Tcomponent 하위항목클래스에만적용할수있습니다. 이렇게하면매우특정적인제네릭타입 ( 다소이상하게들리겠지만실제로그러함 ) 을사용할수있으며컴파일러를사용하여해당제네릭타입에서작업하는동안 TComponent 클래스의모든메소드를사용할수있습니다. 이메소드가매우강력해보인다면다시한번생각해봐야합니다. 상속과타입호환규칙으로할수있는작업에대해고려한다면제네릭클래스를사용하지않고도일반적인개체지향기술을사용하여동일한문제를해결할수있습니다. 특정클래스제약조건이전혀유용하지않다고말하는것은아니지만높은수준의클래스제약조건이나개인적으로매우흥미롭게생각한인터페이스기반제약조건만큼강력하지는않습니다. 9

10 인터페이스제약조건 제네릭클래스를지정된클래스로제약하는대신지정된인터페이스를타입매개변수로서구현하는클래스만수락하는것이일반적으로보다나은유연성을제공합니다. 그렇게하면제네릭타입의인스턴스에서인터페이스를호출할수있습니다. 이미말했듯이제네릭에대한인터페이스제약조건의사용은.NET 프레임워크에서매우일반적입니다. 예를통해인터페이스제약조건의사용을알아보도록하겠습니다. 먼저다음과같이인터페이스를선언해야합니다. IGetValue = interface ['{60700EC4-2CDA-4CD1-A1A D9D2444}'] function GetValue: Integer; procedure SetValue (Value: Integer); property Value: Integer read GetValue write SetValue; 그런다음인터페이스를구현하는클래스를정의할수있습니다. TGetValue = class(tsingletonimplementation, IGetValue) private fvalue: Integer; public constructor Create (Value: Integer = 0); function GetValue: Integer; procedure SetValue (Value: Integer); 다음과같이제네릭클래스를지정된인터페이스를구현하는타입으로정의하면흥미로운일이일어납니다. TInftClass <T: IGetValue> = class private val1, val2: T; // or IGetValue public procedure Set1 (val: T); procedure Set2 (val: T); function GetMin: Integer; function GetAverage: Integer; procedure IncreaseByTen; 이클래스의제네릭메소드에대한코드에다음과같이작성할수있습니다. function TInftClass<T>.GetMin: Integer; Result := min(val1.getvalue, val2.getvalue); procedure TInftClass<T>.IncreaseByTen; val1.setvalue(val1.getvalue + 10); val2.value := val2.value + 10; 10

11 이제이러한모든정의를사용하여다음과같이제네릭클래스를사용할수있습니다. procedure TFormIntfConstraint.btnValueClick(Sender: TObject); iclass: TInftClass<TGetValue>; iclass := TInftClass<TGetValue>.Create; iclass.set1 (TGetValue.Create (5)); iclass.set2 (TGetValue.Create (25)); Log ('Average: ' + IntToStr (iclass.getaverage)); iclass.increasebyten; Log ('Min: ' + IntToStr (iclass.getmin)); 이제네릭클래스의유연성을보여주기위해저는인터페이스에대해완전히다른구현을생성했습니다. TButtonValue = class(tbutton, IGetValue) public function GetValue: Integer; procedure SetValue (Value: Integer); class function MakeTButtonValue (Owner: TComponent; Parent: TWinControl): TButtonValue; { TButtonValue } function TButtonValue.GetValue: Integer; Result := Left; procedure TButtonValue.SetValue(Value: Integer); Left := Value; 클래스함수는임의위치의부모컨트롤내에버튼을생성하여다음과같은샘플코드에서사용됩니다. procedure TFormIntfConstraint.btnValueButtonClick(Sender: TObject); iclass: TInftClass<TButtonValue>; iclass := TInftClass<TButtonValue>.Create; iclass.set1 (TButtonValue.MakeTButtonValue (self, ScrollBox1)); iclass.set2 (TButtonValue.MakeTButtonValue (self, ScrollBox1)); Log ('Average: ' + IntToStr (iclass.getaverage)); Log ('Min: ' + IntToStr (iclass.getmin)); iclass.increasebyten; Log ('New Average: ' + IntToStr (iclass.getaverage)); 11

12 인터페이스참조와제네릭인터페이스제약조건비교 마지막예에서저는지정된인터페이스를구현하는개체와함께동작하는제네릭클래스를정의했습니다. 인터페이스참조에기반한표준 ( 비제네릭 ) 클래스를생성한다면유사한효과를거둘수있습니다. 사실상다음과같은클래스를정의할수있습니다. TPlainInftClass = class private val1, val2: IGetValue; public procedure Set1 (val: IGetValue); procedure Set2 (val: IGetValue); function GetMin: Integer; function GetAverage: Integer; procedure IncreaseByTen; 이두접근방법간의차이는무엇일까요? 차이점은위와같은클래스에서다른타입의두개체클래스가모두지정된인터페이스를구현하는경우해당두개체를 setter 메소드에전달할수있다는것입니다. 반면제네릭버전에서는지정된타입의개체만제네릭클래스의지정된인스턴스에전달할수있습니다. 따라서제네릭버전은타입확인측면에서더보수적이고엄격합니다. 중요한차이점은인터페이스기반버전을사용하는것은 Delphi 참조카운트메커니즘을사용하는것을의미하지만제네릭버전을사용하게되면클래스가지정된타입의일반개체를처리하며참조카운트가되지않는다는것입니다. 뿐만아니라제네릭버전은생성자제약조건과같은여러개의제약조건을가질수있으며개발자는제네릭버전을통해제네릭타입의실제타입을요청하는것과같은다양한제네릭함수를사용할수있습니다. 이는인터페이스를사용하는경우에는수행할수없습니다. ( 인터페이스로작업시사실상기본 TObject 메소드에액세스할수없습니다 ). 다시말해인터페이스제약조건을포함한제네릭클래스를사용하면인터페이스의단점없이이점을활용할수있습니다. 대부분의경우두가지접근방법이유사하지만어떤경우에는인터페이스기반솔루션이더유연하다는점에주목하십시오. 미리정의된제네릭컨테이너사용 C++ 언어의초기템플릿이배포된이후제네릭클래스가가장확실하게사용되어온방법중하나는제네릭컨테이너, 목록또는컨테이너에대한정의였습니다. Delphi 의자체 TObjectList 와같은개체목록을정의하면사실상어떤종류의객체라도잠재적으로보유할수있는목록이표시됩니다. 상속또는컴퍼지션을사용하면특정타입에대한사용자정의컨테이너를정의할수있지만이방법은진부할뿐만아니라에러를자주일으킬수있는접근방법입니다. Delphi 2009 는새 Generics.Collections 단위에서볼수있는제네릭컨테이너클래스의작은세트를정의합니다. 4 개의핵심컨테이너클래스는모두독립적인방법 ( 다른클래스에서상속받지않음 ) 으로구현됩니다. 모두동적배열을사용하여비슷한방법으로구현되며컨테이너단위의해당비제네릭컨테이너클래스에매핑됩니다. 12

13 TList<T> = class TQueue<T> = class TStack<T> = class TDictionary<TKey,TValue> = class 클래스이름을고려해보면이러한클래스간의논리적차이는명백합니다. 이러한클래스를테스트하는좋은방법은비제네릭컨테이너클래스를사용하는기존코드에서얼마나많은변경을수행해야하는지알아보는것입니다. 그예로저는 Mastering Delphi 2005 라는책의실제샘플프로그램을사용하여제네릭을사용하도록변환했습니다. TLIST<T> 사용 샘플프로그램에는 TDate 클래스를정의하는단위가있으며주형식은날짜의 TList 를참조하는데사용됩니다. 먼저 Generics.Collections 를참조하는사용절을추가한다음주형식필드의선언을다음과같이변경했습니다. private ListDate: TList <TDate>; 물론목록을생성하는주형식 OnCreate 이벤트처리기도업데이트해야하므로다음과같은구문을작성해야합니다. procedure TForm1.FormCreate(Sender: TObject); ListDate := TList<TDate>.Create; 이제나머지코드를있는그대로컴파일해볼수있습니다. 프로그램에는 TButton 개체를목록에추가하도록시도하는 의도한 버그가있습니다. 컴파일하는데사용되는해당코드는이제다음과같이실패합니다. procedure TForm1.ButtonWrongClick(Sender: TObject); // add a button to the list ListDate.Add (Sender); // Error: // E2010 Incompatible s: 'TDate' and 'TObject' 날짜의새목록은타입확인측면에서원래의제네릭목록포인터보다더강력합니다. 해당줄을제거하고프로그램에서컴파일및작동합니다. 여전히프로그램을개선할수있습니다. 다음은 ListBox 컨트롤에서목록의모든날짜를표시하는데사용되는원본코드입니다. I: Integer; ListBox1.Clear; for I := 0 to ListDate.Count - 1 do Listbox1.Items.Add((TObject(ListDate [I]) as TDate).Text); 프로그램이개체목록 (TObjectList) 이아닌포인터목록 (TList) 을사용하고있기때문에캐스트가매끄럽지못합니다. 원본데모날짜가 TObjectList 클래스날짜보다앞서기때문일수있습니다! 다음을작성하면프로그램을쉽게개선할수있습니다. 13

14 for I := 0 to ListDate.Count - 1 do Listbox1.Items.Add(ListDate [I].Text); 이코드에대한또다른개선방법은일반 for loop 대신열거 ( 미리정의된제네릭목록이완벽히지원 ) 를사용하는것입니다. adate: TDate; for adate in ListDate do Listbox1.Items.Add(aDate.Text); 마지막으로 TDate 개체를가진제네릭 TObjectList 를사용하여프로그램을개선할수있지만이것에대해서는다음섹션에서설명하겠습니다. 이미설명했듯이 TList<T> 제네릭클래스는높은수준의호환성을제공합니다. Add, Insert, Remove 및 IndexOf 와같은모든클래식메소드가있습니다. Capacity 및 Count 속성도있습니다. 이상하게도 Items 가 Item 이되지만기본속성이되면거의참조를하지않게됩니다. TLIST<T> 정렬 정렬이작동하는방식은아주흥미롭습니다. ( 여기에서의목표는정렬지원을앞의예에추가하는것입니다.) Sort 메소드는다음과같이정의됩니다. procedure Sort; overload; procedure Sort(const AComparer: IComparer<T>); overload; IComparer<T> 는 Generic. Defaults 단위내에선언됩니다. 첫번째버전의프로그램을호출하면프로그램은 TList<T> 의기본생성자로초기화된기본비교자를사용합니다. 이경우에서는쓸모가없습니다. 대신에 IComparer<T> 인터페이스의적합한구현을정의해야합니다. 타입호환성을위해특정 TDate 클래스에서작동하는구현을정의해야합니다. 다음섹션에서설명할익명메소드를포함하여이를수행할수있는방법은여러가지가있습니다. 이흥미로운기술은몇가지의제네릭사용패턴을표시하고 TComparer라고불리는 Generics.Defaults 단위의일부인구조클래스를활용할수있는기회를제공합니다. 클래스는다음과같이인터페이스의추상및제네릭구현으로정의됩니다. TComparer<T> = class(tinterfacedobject, IComparer<T>) public class function Default: IComparer<T>; class function Construct( const Comparison: TComparison<T>): IComparer<T>; function Compare(const Left, Right: T): Integer; virtual; abstract; 여기서해야하는작업은특정데이터타입에대한제네릭클래스 ( 예의경우 TData) 를인스턴트화하고특정타입에대한 Compare 메소드를구현하는구체적인클래스를상속하는것입니다. 잠시면배울수있는코딩관용구를사용하여다음과같이두개의작업을한번에 14

15 수행할수있습니다. TDateComparer = class(tcomparer<tdate>) function Compare(const Left, Right: TDate): Integer; override; 이코드를보면많은사람들이이상하게생각할것입니다. 새클래스가제네릭클래스의특정인스턴스에서상속되면다음과같이두개의개별단계로표현할수있습니다. TAnyDateComparer = TComparer<TDate>; TMyDateComparer = class(tanydatecomparer) function Compare(const Left, Right: TDate): Integer; override; 여기에서강조하려는핵심사항은아니지만소스코드에서 Compare 함수의실제구현을볼수있습니다. 그렇지만목록을정렬하더라도 IndexOf 메소드는 TStringList 클래스와달리목록을활용하지는않습니다. 익명메소드를사용한정렬 이전섹션에나온정렬코드는꽤복잡해보이며실제로도복잡합니다. 정렬함수를 Sort 메소드로직접전달하는것이훨씬쉬우면서도깨끗합니다. 과거에는일반적으로함수포인터를전달하여정렬을수행했습니다. Delphi 2009 에서는익명메소드를전달하여이를수행할수있습니다. 사실상 TList<T> 클래스에있는 Sort 메소드의 IComparer<T> 매개변수는다음과같이정의된익명메소드를매개변수로전달하는 TComparer<T> 의 Construct 메소드를호출하여사용할수있습니다. TComparison<T> = reference to function(const Left, Right: T): Integer; 실제로타입 - 호환함수를작성하고다음과같이해당함수를매개변수로전달할수있습니다. function DoCompare(const Left, Right: TDate): Integer; ldate, rdate: TDateTime; ldate := EncodeDate(Left.Year, Left.Month, Left.Day); rdate := EncodeDate(Right.Year, Right.Month, Right.Day); if ldate = rdate then Result := 0 else if ldate < rdate then Result := -1 else Result := 1; procedure TForm1.ButtonAnonSortClick(Sender: TObject); ListDate.Sort (TComparer<TDate>.Construct (DoCompare)); 이방법이너무일반적인것으로생각되는경우다음과같이개별함수의선언을피하고개별 15

16 함수 ( 해당소스코드 ) 를매개변수로서 Construct 메소드에보내는것을고려해볼수있습니다. procedure TForm1.ButtonAnonSortClick(Sender: TObject); ListDate.Sort(TComparer<TDate>.Construct( function (const Left, Right: TDate): Integer ldate, rdate: TDateTime; ldate := EncodeDate(Left.Year, Left.Month, Left.Day); rdate := EncodeDate(Right.Year, Right.Month, Right.Day); if ldate = rdate then Result := 0 else if ldate < rdate then Result := -1 else Result := 1; end)); 이예는익명메소드를보여주는간단한예로서자세한내용은나중에학습하게될것입니다. 이번최종버전은이전섹션에서다룬원본보다훨씬쉽게작성할수있습니다. 그렇지만파생클래스를포함하는것이대부분의 Delphi 개발자에게보다깨끗하게보이고이해하기쉬울수있습니다. 익명메소드 ( 클로저 ) Delphi 언어에서는프로시저타입 ( 포인터를프로시저및함수에선언하는타입 ) 과메소드포인터 ( 포인터를메소드에선언하는타입 ) 를오랫동안사용해왔습니다. 프로시저타입과포인터를직접적으로자주사용하지는않더라도이는모든개발자들이작업에사용하는 Delphi 의주요기능입니다. 사실메소드포인터타입은 VCL 의이벤트처리기에대한기초가됩니다. 이벤트처리기를선언할때마다, 그것이순수 Button1Click 이라하더라도개발자는메소드포인터를사용하는이벤트 ( 이경우 OnClick 이벤트 ) 에연결되는메소드를선언하게됩니다. 익명메소드는다른위치에서정의한메소드의이름이아니라메소드의실제코드를매개변수로전달함으로써이기능을확장합니다. 그렇지만이것이유일한차이점은아닙니다. 익명메소드가다른기술과매우다른부분은로컬변수의수명을관리하는방법입니다. 익명메소드는 Delphi 에서는새기능이지만수년간다른프로그래밍언어 ( 특히동적언어 ) 에서다른형식으로또한다른이름으로사용되어져왔습니다. 제경우에는 JavaScript 에서의마감, 특히 jquery ( 라이브러리및 AJAX 호출작업을많이해보았습니다. C# 에서의해당기능은익명제어입니다. 여기서는마감과다양한프로그래밍언어에서의관련기술을비교하지않고대신 Delphi 2009 에서마감이어떻게작동되는지에대한정보를기술하도록하겠습니다. 16

17 익명메소드의구문및의미 Delphi 의익명메소드는표현식컨텍스트에서메소드값을생성하는메커니즘입니다. 다소복잡한정의이지만메소드포인터와의핵심적인차이를나타내주는것은표현식컨텍스트라는말입니다. 익명메소드를설명하기전에매우간단한코드예부터시작하도록하겠습니다. 다음은익명메소드타입선언으로, 이를통해 Delphi 가강력한타입의언어로계속사용될수있게됩니다. TIntProc = reference to procedure(n: Integer); 선언에사용되는키워드에서만참조메소드와차이를보입니다. TIntMethod = procedure(n: Integer) of object; 익명메소드변수 익명메소드타입이있으면다음과같이이타입의변수를선언하고타입 - 호환익명메소드를할당하고변수를통해해당메소드를호출할수있습니다. procedure TFormAnonymFirst.btnSimpleVarClick(Sender: TObject); anintproc: TIntProc; anintproc := procedure(n: Integer) Memo1.Lines.Add(IntToStr(n)); anintproc (22); 현재위치코드를포함한실제프로시저를변수에할당하는데사용되는구문을눈여겨보십시오. 이구문은과거의 Pascal 에서볼수없었던구문입니다. 익명메소드매개변수 보다놀라운구문을포함하는좀더흥미로운예를들자면, 익명메소드를매개변수로서함수에전달할수있다는것입니다. 다음과같이익명메소드매개변수를사용하는함수가있다고가정해보겠습니다. procedure CallTwice (value: Integer; anintproc: TIntProc); anintproc (value); Inc(value); anintproc(value); 함수는두개의연속정수값으로두번에걸쳐매개변수로서전달된메소드를호출합니다. 한 17

18 번은매개변수로서전달되며다른한번은그뒤에수반됩니다. 실제익명메소드를함수에전달하여다음과같이직접적인현재위치코드를포함한함수를호출합니다. procedure TFormAnonymFirst.btnProcParamClick(Sender: TObject); CallTwice(48, procedure(n: Integer) Memo1.Lines.Add(IntToHex(n, 4)); end); CallTwice (100, procedure(n: Integer) Memo1.Lines.Add(FloatToStr(Sqrt(n))); end); 구문의측면에서프로시저가괄호와함께매개변수로서전달되고세미콜론 (;) 으로종료되지않는것을눈여겨보십시오. 코드의실제결과는 48 및 49 를지정하여 IntToHex 를, 100 및 101 제곱근으로 FloatToStr 을호출한값이며다음과같이출력됩니다 로컬변수사용 사용하는구문이 그다지훌륭하지 않다하더라도메소드포인터를사용하면동일한효과를얻을수있습니다. 익명메소드를명확히차별시켜주는것은익명메소드가호출메소드의로컬변수를참조할수있는방법입니다. 다음코드를고려해보십시오. procedure TFormAnonymFirst.btnLocalValClick(Sender: TObject); anumber: Integer; anumber := 0; CallTwice (10, procedure(n: Integer) Inc (anumber, n); end); Memo1.Lines.Add(IntToStr(aNumber)); 여기에서여전히 CallTwice 프로시저에전달되는메소드는로컬매개변수 n 뿐아니라호출컨텍스트의로컬변수인 anumber 도사용합니다. 효과는무엇일까요? 익명메소드를두번호출하면매개변수가로컬변수에추가되어 ( 첫번째에는 10, 두번째에는 11) 해당로컬변수가수정됩니다. anumber 의최종값은 21 입니다. 로컬변수의수명연장 앞의예는흥미로운결과를보여주지만중첩함수호출의시퀀스와로컬변수를사용할수있다는 18

19 사실은놀랍지않습니다. 그러나익명메소드의장점은로컬변수를사용하여필요에따라수명을연장할수있다는사실에있습니다. 장황한설명보다는예를통해그것을설명하겠습니다. 저는클래스완성을사용하여다음과같이 TFormAnonymFirst 형식클래스에익명메소드포인터타입의속성을추가했습니다. ( 사실프로젝트의모든코드에사용한것과동일한익명메소드입니다.) private FAnonMeth: TIntProc; procedure SetAnonMeth(const Value: TIntProc); public property AnonMeth: TIntProc read FAnonMeth write SetAnonMeth; 그다음두개의추가버튼을형식에추가했습니다. 첫번째버튼은다음과같이로컬변수를사용하는익명메소드를속성에저장 ( 이전 btnlocalvalclick 메소드에서의방식과유사 ) 합니다. procedure TFormAnonymFirst.btnStoreClick(Sender: TObject); anumber: Integer; anumber := 3; AnonMeth := procedure(n: Integer) Inc (anumber, n); Memo1.Lines.Add(IntToStr(aNumber)); 이메소드를실행하면익명메소드는실행되지않고저장만됩니다. 로컬변수인 anumber 는 0( 영 ) 으로초기화되어수정되지않고메소드가종료될때로컬범위를벗어나위치가변경됩니다. 최소한이것은표준 Delphi 코드에서예상되는작업입니다. 이단계를위해양식에추가한두번째버튼은익명메소드라고하며, AnonMeth 속성에저장됩니다. procedure TFormAnonymFirst.btnCallClick(Sender: TObject); if Assigned(AnonMeth) then CallTwice(2, AnonMeth); 이코드를실행하면코드는스택에더이상존재하지않는메소드의로컬변수 anumber 를사용하는익명메소드를호출합니다. 그러나익명메소드는실행컨텍스트를캡처하기때문에변수는그대로있고익명메소드의해당지정된인스턴스 ( 메소드에대한참조 ) 가있는한사용될수있습니다. 더자세히알아보려면다음을수행하십시오. 저장버튼을한번누르고호출버튼을두번누르면사용중인것과동일한캡처된변수가다음과같이표시됩니다

20 13 이제저장버튼을한번더누른다음다시호출을누릅니다. 로컬변수의값이재설정되는이유는무엇일까요? 새익명메소드인스턴스를할당하면자체실행컨텍스트와함께이전익명메소드인스턴스가삭제되고로컬변수의새인스턴스를포함한새실행컨텍스트가캡처됩니다. 전체시퀀스저장 - 호출 - 호출 - 저장 - 호출을실행하면다음과같은결과가생성됩니다 다른일부언어에서수행하는동작과비슷한이동작은익명메소드가과거에문자그대로불가능했던기능을실행하는데사용할수있는매우강력한언어기능을가질수있다는것을보여줍니다. 기타새로운언어기능 Object Pascal 언어의많은새중요기능을살펴보다보면일부사소한기능을놓치기쉽습니다. 주석처리된 DEPRECATED 지시어 deprecated 지시어 ( 기호를표시하는데사용됨 ) 은호환성이문제가되는경우계속사용할수있지만이제컴파일러경고의일부로표시되는문자열이뒤에나올수있습니다. 다음과같은코드조각에서처럼프로시저를정의하고호출하는경우 procedure DoNothing; deprecated 'use DoSomething instead'; procedure TFormMinorLang.btnDepracatedClick(Sender: TObject); DoNothing; btndepracatedclick 메소드의호출위치에다음과같은경고가표시됩니다. W1000 Symbol 'DoNothing' is deprecated: 'use DoSomething instead' 이방법은사용하지않는기호의선언에주석을추가하는이전방법보다훨씬낫습니다. 이방법에서는에러메시지에서클릭하여기호가사용되는소스코드줄을열고선언위치로이동하여주석을찾습니다. 말할필요도없이위의코드는 Delphi 2007 에서컴파일되지않으며다음과같은에러가발생합니다. E2029 Declaration expected but string constant found 새 deprecated 기능은 Delphi 2009 RTL 및 VCL 에서는많이사용되지만이전버전의컴파일러와호환되지않기때문에타사공급업체는이기능을사용하는데제약이있을것입니다. 20

21 EXIT 에서값리턴 일반적으로 Pascal 함수는다음과같이함수이름을사용하여결과를할당하는데사용됩니다. function ComputeValue: Integer;... ComputeValue := 10; Delphi 는 Result 식별자를사용하여반환값을함수에할당하는대체코딩을제공해왔습니다. function ComputeValue: Integer;... Result := 10; 두개의접근방법은동일하며코드의플로우를변경하지않습니다. 함수결과를할당하고두개의개별문을사용할수있는현재실행을중지하려면, 결과를할당한다음 Exit 를호출하십시오. 문자열목록에있는지정된번호를포함하는문자열을검색하는다음코드조각은이접근방법에대한일반적인예입니다. function FindExit (sl: TStringList; n: Integer): string; I: Integer; for I := 0 to sl.count do if Pos(IntToStr (n), sl[i]) > 0 then Result := sl[i]; Exit; Delphi 2009 에서는두개의문을 Exit 에대한새특정호출로대체하여, C 언어반환문과비슷한방법으로함수의반환값을전달할수있습니다. 또한단일문을사용하여 /end 를지정하지않아도되므로더간결한버전으로위의코드를작성할수있습니다. function FindExitValue (sl: TStringList; n: Integer): string; I: Integer; for I := 0 to sl.count do if Pos(IntToStr (n), sl[i]) > 0 then Exit(sl[I]); 새별칭정수타입 엄격히말해컴파일러의변경사항이아니라시스템단위에추가된사항이긴합니다만, 이제서명된정수데이터타입및서명되지않은정수데이터타입에대해기억하기쉬운별칭세트를사용할수있습니다. 다음은컴파일러의미리정의된서명된정의타입및서명되지않은정의타입입니다. 21

22 ShortInt SmallInt Integer NativeInt Int64 Byte Word Cardinal NativeUInt UInt64 이러한타입은 Delphi 2007 및이전버전에이미존재하지만 64 비트타입은일부버전의컴파일러에만존재합니다. 컴파일러버전 (32 비트및향후 64 비트 ) 에따라달라지는 NativeInt 및 NativeUInt 타입은 Delphi 2007 에이미있지만문서화되지않았습니다. CPU 네이티브정수크기와일치하는데이터타입이필요한경우이러한타입을사용할수있습니다. 사실상정수타입은 32 비트에서 64 비트로이동시변경되지않도록되어있습니다. 시스템단위에의해추가된다음미리정의된별칭세트는 Delphi 2009 의새로운기능입니다. Int8 = ShortInt; Int16 = SmallInt; Int32 = Integer; UInt8 = Byte; UInt16 = Word; UInt32 = Cardinal; 새로운세트를추가하지않았더라도일반적으로 ShortInt 가 SmallInt 보다작은지기억하기가어렵고 Int16 또는 Int8 의실제구현을기억하기는쉽기때문에이미리정의된별칭세트가보다사용하기쉬울것입니다. 결론 Delphi 언어에추가된몇가지흥미로운기능을다루긴했지만컴파일러의이번버전에서가장큰차이점은제네릭에대한지원, 익명메소드에대한지원및제네릭과익명메소드의조합입니다. 이러한기능은 Delphi 언어를단순히확장하는것이아니라일반적인개체지향프로그래밍과 Delphi 에서전통적으로사용되어온이벤트중심프로그래밍접근방법이외의새프로그래밍패러다임에대한가능성을열었습니다. 클래스를한개이상의데이터타입에서매개변수화할수있는기능과루틴을매개변수로전달하는기능은새로운코딩스타일과 Delphi 응용프로그램의새로운설계방법을제시합니다. Delphi 2009 의언어기능은바로여기에있지만라이브러리와구성요소가이러한기능을완전히활용할때까지는시간이걸릴것입니다. Delphi 2009 를사용하면오늘바로새코딩기술을사용하여작업을시작할수있습니다. 필자에대하여 이문서는베스트셀러시리즈인 Mastering Delphi 의저작자 Marco Cantù 가 Embarcadero Technologies 를위해작성하였습니다. 이문서의내용은그의최근저서인 Delphi 2009 핸드북 " ( 에서발췌한것입니다. Marco Cantù 에대한정보는그의개인블로그 ( 에서읽을수있으며전자 22

23 메일 을통해연락할수있습니다. Embarcadero Technologies Inc. 는애플리케이션개발자및데이터베이스전문가가자신이선택한환경에서소프트웨어애플리케이션을설계, 빌드및실행하는도구를사용할수있도록합니다. 전세계 3 백만이상의커뮤니티와 Fortune 지선정 100 대기업중 90 개기업이 Embarcadero 의 CodeGear 및 DatabaseGear 제품군을기반으로하여생산성을향상시키고개방적인협업및자유로운혁신을추구하고있습니다. Embarcadero 는 1993 년에설립되어캘리포니아샌프란시스코에본사가있으며전세계에사무소를두고있습니다. Embarcadero 의온라인주소는 입니다. Embarcadero 의주요제품인 DatabaseGear 의도구에는 ER/Studio, DBArtisan, Rapid SQL 및 Embarcadero Change Manager 가있습니다. 데브기어는미국 Embarcadero Technologies Inc. 와기존의코드기어한국지사의협력으로전략적으로설립된엠바카데로솔루션전문공급기업입니다. 데브기어는 Delphi, C++Builder, JBuilder, Delphi Prism 등개발툴제품들과 ER/Studio, PowerSQL, DB Artisan, EA/Studio 등의데이터베이스툴제품들에대한한국시장에공급은물론기술지원및교육을제공합니다. 데브기어웹사이트는 이며제품에대한문의는 ask@embarcadero.kr 로하면됩니다. 23

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

A Tour of Java V

A Tour of Java V A Tour of Java V Sungjoo Ha April 3rd, 2015 Sungjoo Ha 1 / 28 Review First principle 문제가생기면침착하게영어로구글에서찾아본다. 타입은가능한값의집합과연산의집합을정의한다. 기본형이아니라면이름표가메모리에달라붙는다. 클래스로사용자정의타입을만든다. 프로그래밍은복잡도관리가중요하다. OOP 는객체가서로메시지를주고받는방식으로프로그램을구성해서복잡도관리를꾀한다.

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

MVVM 패턴의 이해

MVVM 패턴의 이해 Seo Hero 요약 joshua227.tistory. 2014 년 5 월 13 일 이문서는 WPF 어플리케이션개발에필요한 MVVM 패턴에대한내용을담고있다. 1. Model-View-ViewModel 1.1 기본개념 MVVM 모델은 MVC(Model-View-Contorl) 패턴에서출발했다. MVC 패턴은전체 project 를 model, view 로나누어

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 # 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요 . 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요소로써안드로이드시스템에서는 Activities, Services, Content Providers,

More information

오버라이딩 (Overriding)

오버라이딩 (Overriding) WindowEvent WindowEvent 윈도우가열리거나 (opened) 닫힐때 (closed) 활성화되거나 (activated) 비활성화될때 (deactivated) 최소화되거나 (iconified) 복귀될때 (deiconified) 윈도우닫힘버튼을누를때 (closing) WindowEvent 수신자 abstract class WindowListener

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074> 객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

PowerPoint Presentation

PowerPoint Presentation 데이터처리프로그래밍 Data Processing Programming 08 객체와클래스 목차 1. 객체와클래스 2. 인스턴스변수, 클래스변수 3. 클래스매직메소드 4. 클래스의상속 데이터처리프로그래밍 (Data Processing Programming) - 08 객체와클래스 3 1. 객체와클래스 객체 Object 객체란존재하는모든것들을의미 현실세계는객체로이루어져있고,

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

Microsoft PowerPoint - lec12 [호환 모드]

Microsoft PowerPoint - lec12 [호환 모드] 제네릭 제네릭클래스 제네릭인터페이스 제네릭메소드 형매개변수의제한 어노테이션 어노테이션형태시스템정의어노테이션사용자정의어노테이션 kkman@sangji.ac.kr 2 제네릭 (generic) 클래스나메소드에자료형을매개변수형식으로사용할수있는기능 자료형과무관하게알고리즘을기술 예전에작성한알고리즘을쉽게재사용가능 어노테이션 (annotation) 프로그램요소에다양한종류의속성정보를추가하기위해서사용

More information

This is a title of the whitepaper

This is a title of the whitepaper Delphi XE: Delphi 7 이후의 새로운디버그기능들 Nick Hodges, 박지훈. 임프 2010 년 9 월 Americas Headquarters EMEA Headquarters Devgear 100 California Street, 12th York House 서울특별시반포 1 동 743-14 Floor 18 York Road 4 층 데브기어 San

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

vRealize Automation용 VMware Remote Console - VMware

vRealize Automation용 VMware Remote Console - VMware vrealize Automation 용 VMware Remote Console VMware Remote Console 9.0 이문서는새버전으로교체되기전까지나열된각제품버전및모든이후버전을지원합니다. 이문서에대한최신버전을확인하려면 http://www.vmware.com/kr/support/pubs 를참조하십시오. KO-002230-00 vrealize Automation

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp 1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Chapter 6.ppt 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)

More information

No Slide Title

No Slide Title 상속 이충기 명지대학교컴퓨터공학과 상속 Q: 건설회사는기존아파트와조금다르거나추가적인특징들을가진새아파트를지을때어떻게하는가? A: 2 상속 상속 (inheritance) 은클래스들을연관시키는자연스럽고계층적인방법이다. 상속은객체지향프로그래밍의가장중요한개념중의하나이다. 상속은 은 이다 라는관계 (is-a relationship) 를나타낸다. 이관계를적용하여클래스들을상하관계로연결하는것이상속이다.

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lab 4 ADT Design 클래스로정의됨. 모든객체들은힙영역에할당됨. 캡슐화 (Encapsulation) : Data representation + Operation 정보은닉 (Information Hiding) : Opertion부분은가려져있고, 사용자가 operation으로만사용가능해야함. 클래스정의의형태 public class Person { private

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - Chap12-OOP.ppt 객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버

More information

쉽게

쉽게 Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 22 장제네릭과컬렉션 이번장에서학습할내용 제네릭클래스 제네릭메소드 컬렉션 ArrayList LinkedList Set Queue Map Collections 클래스 일반적인하나의코드로다양한자료형을처리하는기법을살펴봅시다. 제네릭이란? 제네릭프로그래밍 (generic programming) 다양한타입의객체를동일한코드로처리하는기법 제네릭은컬렉션라이브러리에많이사용

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

Slide 1

Slide 1 SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 16. 템플릿 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr Learning Objectives 함수템플릿 구문, 정의 컴파일합병 클래스템플릿 문법 예 : 배열템플릿클래스 템플릿및상속 예 : 부분적으로채워진배열템플릿클래스

More information

Chapter 6 Objects and Classes

Chapter 6 Objects and Classes 11 장상속과다형성 1 강의목표 상속 (inheritance) 을이용하여기본클래스 (base class) 로부터파생클래스 (derived class) 생성 (11.2) 파생클래스유형의객체를기본클래스유형의매개변수 (parameter) 로전달함으로써일반화프로그래밍 (generic programming) 작업 (11.3) 생성자와소멸자의연쇄적처리 (chaining)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Programming Languages 모듈과펑터 2016 년봄학기 손시운 (ssw5176@kangwon.ac.kr) 담당교수 : 임현승교수님 모듈 (module) 관련있는정의 ( 변수또는함수 ) 를하나로묶은패키지 예약어 module과 struct end를사용하여정의 아래는모듈의예시 ( 우선순위큐, priority queue) # module PrioQueue

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Slide 1

Slide 1 SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 14. 상속 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr Learning Objectives 상속의기본 파생클래스와생성자 protected: 제한자 멤버함수의재정의 상속되지않는함수들 상속을이용한프로그래밍

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

제4장 기본 의미구조 (Basic Semantics)

제4장  기본 의미구조 (Basic Semantics) 제 4 장블록및유효범위 Reading Chap. 5 숙대창병모 1 4.1 변수선언및유효범위 숙대창병모 2 변수선언과유효범위 변수선언 Declaration before Use! 대부분의언어에서변수는사용전에먼저선언해야한다. 변수의유효범위 (scope) 선언된변수가유효한 ( 사용될수있는 ) 프로그램내의범위 / 영역 변수이름뿐아니라함수등다른이름도생각해야한다. 정적유효범위

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

Microsoft Word - java19-1-midterm-answer.doc

Microsoft Word - java19-1-midterm-answer.doc 중간고사 담당교수 : 단국대학교응용컴퓨터공학박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호 (4자리숫자 ) 를기입하면성적공고시학번대신암호를 사용할것임. 1. 다음질문에답을하라. (55

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information