>> 이없을수있다면서꺼린다고것이다. 그래서필자는맥플랫폼의선진적인개발환경과오픈소스정책이생산성에큰도움을주는게아닌가하고조심스럽게추측해본다. 그중심에바로 코코아 (Cocoa) 가있다. 코코아로가장많은프로젝트를수행하는애플에서코코아의개발퍼포먼스에대해어떻다는공식적인언급은없었지만지켜

Size: px
Start display at page:

Download ">> 이없을수있다면서꺼린다고것이다. 그래서필자는맥플랫폼의선진적인개발환경과오픈소스정책이생산성에큰도움을주는게아닌가하고조심스럽게추측해본다. 그중심에바로 코코아 (Cocoa) 가있다. 코코아로가장많은프로젝트를수행하는애플에서코코아의개발퍼포먼스에대해어떻다는공식적인언급은없었지만지켜"

Transcription

1 이없을수있다면서꺼린다고것이다. 그래서필자는맥플랫폼의선진적인개발환경과오픈소스정책이생산성에큰도움을주는게아닌가하고조심스럽게추측해본다. 그중심에바로 코코아 (Cocoa) 가있다. 코코아로가장많은프로젝트를수행하는애플에서코코아의개발퍼포먼스에대해어떻다는공식적인언급은없었지만지켜보는사람들이그퍼포먼스가뛰어나다는것을미루어짐작할수있는부분이다. method definitions 예를들면애플에서제공하는레퍼런스에서 NSString 클래스를볼수있는데, 이것과별개로 NSString Additions라고된부분도볼수있다. NSString은기본클래스이고 NSString Additions는카테고리로더추가된경우이다. 이클래스에는다음과같은메쏘드도들어있다. 이번호에는오브젝티브-C의중요한두가지기능인 카테고리 와 프로토콜 에대해알아볼것이다. 지난호의내용이너무딱딱한것같고이번호또한무척건조한느낌이드는게사실이다. 하지만이부분을제대로이해해야코코아의장점을제대로살릴수있을것이라고생각한다. 설령지금이해가안되는부분이있다면앞으로진행되는연재를보면서가끔돌이켜보면좋을것이다. 추후에예제코드를보면서다시보면훨씬쉽게와닿을수있기때문이다. 난 6월 23 일부터 27일까지는전세계의맥개발자들플이쏟아내는제품들을보면과연 200명으로그걸다할수에게축제기간이었다. WWDC(World Wide 있는지의심이들지않을수없다. 참고로마이크로소프트 Developers Conference) 가열린것이다. 새로운 IDE와향 ( 이하 MS) 의맥관련소프트웨어를개발하는부서인 맥비상된컴파일, 디버깅기능, 새로운버전의 OS( 코드명지니스유닛 의총원은대략 150명가량된다고한다. 여기 Panther), 새로운하드웨어, 새로운주변기기가쏟아져나서만들어내는제품은매킨토시용워드, 엑셀, 파워포인트, 왔다. 사실이번 WWDC 기간동안세션에참가해서도많은앙트라쥬 ( 아웃룩익스프레스같은프로그램 ), MSN 메신저, 걸배웠지만애플에서근무하는몇몇개발자들과의만남이미디어플레이어, 인터넷익스플로러등이다. 대충어림짐작더욱인상에남았다. 으로도애플직원 1명당처리하는일이거의 MS 직원 10명애플의소프트웨어개발자는놀랍게도 200명정도에불과이상의업무량이라고봐도무방할것같다. 하다고한다. 지금까지애플개발자들이내놓은제품은 Mac 그런데필자가애플주위를어슬렁거렸을때애플직원들 OS X을비롯해개발도구, 퀵타임, i애플리케이션 (iphoto, 이매우열심히일하는것같이보이지는않았다 ( 우리나라 ichat, itunes, idvd 등 ), 키노트, 파이널컷시리즈, 웹오의근무태도를기준으로 ). 그렇다고애플직원들이 MS 직브젝트, 애플웍스, 사파리, 각종서버용관리툴등이다. 애원보다더뛰어나다고보기도힘들것같다 (MS는각대학에서뛰어난인재를많이끌어모으기로유명하다 ). 그렇다면과연이런생산성의차이는어디서오는것일까. 애플개발자들이혹자가말하는애플광신도 (?) 이기때문에 MS 의개발자보다정신무장이더잘되어있다고생각할수도있겠지만필자가듣기로는애플에서는자사의광신도들만뽑지는않는다고한다. 오히려공정하게바라보는시각 카테고리카테고리 (categories) 에대해설명하자면 1개의클래스안에서여러메쏘드들을적당한기준으로분류해서정리해줄수있게해주는기능 이라고간단하게정의할수있다. 물론이것만있는것은아니다. 오브젝티브-C의카테고리를잘이용하면 C++ 와같은언어로는상상할수도없는마술같은일이가능해지기도한다. 예를들어클래스를상속하지않고기존클래스를확장할수있는방법을제공하는것이좋은예가된다. 비록그클래스의소스가없다고하더라도말이다. 카테고리의사용목적은다음과같다. 클래스를연관된몇개의그룹으로나누어서관리할수있게해준다 ( 즉하나의클래스를몇개의조각내에서관리할수있게해준다. 구현파일의크기가커지고메쏘드들이많아지면상당히유용하다. 또한공동작업을하게될때각각의개발자들이자신의작업영역을같은클래스내에서도명확하게구분짓게할수도있다 ). 기존의클래스를상속받지않고새로운메쏘드를추가할수있게해준다. 인포멀프로토콜 (informal protocol) 을구현할때사용된다. 클래스에카테고리추가방법클래스에카테고리를추가하는방법은비교적간단하다. 인터페이스파일에카테고리로분류해서메쏘드를정의한다음카테고리이름과같은파일의구현파일을작성하면된다. 카테고리는새클래스를만드는것이아니고기존클래스에메쏘드가더추가되는것을말한다. 다음과같은방법으로사용하면된다. #import ClassName (CategoryName) method declarations #import ClassName (CatrgoryName) - (void) drawatpoint: (NSPoint )apoint withattributes: (NSDictionary *) attributes 이메쏘드는이름에서짐작할수있듯이화면에문자열을그려주는역할을한다. 이는필자가가장흥미롭게생각하는부분으로, 코코아프레임워크는그려야하는객체에그려주는메쏘드들이존재한다. MFC의 CString에는이런부분이존재하지않는다. 어느것이더객체지향적인지에대한논의를하기전에이메쏘드를소개하는이유는이메쏘드가카테고리로구현되었기때문이다. 즉 NSString에기본적으로는드로잉하는메쏘드가존재하지않지만카테고리를이용해서추가하게된것이다. 또원한다면카테고리로새로운메쏘드들을더추가할수있다. 물론 NSString의소스코드도필요없다. 또한카테고리로추가된메쏘드들은일반적인다른메쏘드처럼상속되기도한다 ( 이점은아주중요한문제로색다른문제를야기하기도한다 ). 카테고리사용예실제로카테고리를어떻게쓰는지알아보자. K&R의유명한 The C Programming Language 라는책에는섭씨, 화씨온도를변환하는예제가있다. 여기에서영감을받은 (?) 예제이다. 먼저 NSExample이라는클래스를만들어서이클래스가계산을하도록해보자. 프로젝트빌더또는 Xcode에서새프로젝트를선택한다. 그다음아래쪽에있는파운데이션툴을선택해서프로젝트를생성시킨다. 일반적으로는코코아애플리케이션같은걸사용하겠지만지금은간단한예제를만들것이기때문에 UI를사용하지않는파운데이션툴을선택한것이다. 메인프로그램은다음과같다. int main (int argc, const char * argv[]) NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // insert code here... int ret;

2 NSExample *example = [[NSExample alloc] init]; 구현파일은다음과같이수정했다. 이간단한예제에서볼수있듯 지않겠다고약속했으니새파일을만들자. NSExampleAdditions.h [example setfahr:200]; [example calc]; ret = [example celsius]; NSLog(@ %d\n, ret); - (void)setfahr:(int)afahr fahr = afahr; 이카테고리사용법은다끝난것이나마찬가지다. 필요하다면카테고리이름으로새로운파일을만들어서구현할수도있다. #import NSExample.h 와 NSExampleAdditions.m 을만들었다. [example release]; - NSExample (NSExampleAdditions) return 0; <main.m> 이처럼단순히화씨온도를입력한후에계산하라는메시지를주고섭씨온도를받아오는게전부이다. NSLog는 printf와비슷한데, NSString 값을로그창으로출력해주는역할을한다. 을붙인문자열은 NSString을말한다. NSAutorelease Pool과객체의생성 소멸에대해서는뒷부분에도설명이나오므로일단넘어가도록하자. return celsius; - (void)setcelsius:(int)acelsius celsius = acelsius; - (void)calc celsius = 5 * (fahr - 32) / 9; NSExample - (void)calc celsius = 5 * (fahr - 32) / NSExample (Accessors) - (int)fahr return fahr; - (void)loop; <NSExampleAdditions.h> #import NSExample (NSExampleAdditions) - (void)loop int lower, upper, step; lower = 0; upper = 300; 여기서 calc 를제외한다른메쏘드들은 accessor 라고명명했다. 지 - (void)setfahr:(int)afahr step = NSExample : int fahr, celsius; - (int)fahr; - (void)setfahr:(int) afahr; - (int)celsius; 금은소스코드가짧아서그렇지만소스코드가무한정길다면결국이부분을따로관리하고싶다는생각을하게될것이다. 이제부터 accessor 메쏘드를따로카테고리로분리시키겠다. 헤더파일을다음과같이수정했다. fahr = afahr; - (int)celsius return celsius; fahr = lower; while ( fahr <= upper ) celsius = 5 * (fahr - 32) / 9; NSLog(@ %d\t%d\n, fahr, celsius); fahr = fahr + step; - (void)setcelsius:(int) acelsius; - (void)calc; <NSExample.h> 지난호에설명한방법대로일반적인클래스를선언했다. 구현역시단순하다. NSExample : int fahr, celsius; - (void)calc; - (void)setcelsius:(int)acelsius celsius = acelsius; <NSExample.m> <NSExampleAdditions.m> 그리고 loop라는메쏘드를만들어서구현했다. 여기서 fahr와 celsius 변수는 NSExample의것을그대로이용했다. NSExample - (int)fahr return NSExample (Accessors) - (int)fahr; - (void)setfahr:(int) afahr; - (int)celsius; - (void)setcelsius:(int) acelsius; < NSExample.h> 그럼기존클래스에새로운기능을추가해보자. 현재 NSExample 클래스는단순하며실제로 K&R 책의예제와같지도않다. K&R 책의예제에서는루프를돌리면서온도를쭉출력하는기능이있다. 이기능을추가해보자 ( 단기존의 NSExample 클래스는손대지않고 ). 즉 NSExample 클래스를벤더에서제공한클래스라고생각하고, 이제개발자가기존에제공된클래스를상속받지않고기능을추가하는작업을한다고가정하자. 일단 NSExample은단한줄도건드리 #import NSExampleAdditions.h int main (int argc, const char * argv[]) NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // insert code here

3 NSExample *example = [[NSExample alloc] init]; 오브젝트가루트클래스의인스턴스메쏘드를실행할수있다는데 이때동시에여러개의프로토콜을지원하게하려면콤마 (,) MyObject : NSObject <MyProtocol> [example loop]; [example release]; 주의해야한다 ( 일반적으로인스턴스화되지않은클래스오브젝트에서바로인스턴스메쏘드를호출할수없다. 하지만특별히루트클래스의인스턴스메쏘드는상속받은다른클래스오브젝트에서도사용 Formatter : NSObject < Formatting, Prettifying > return 0; <main.m> 할수있다. NSObject의인스턴스메쏘드를밑에서오버라이딩하면이러한특징은사라진다 ). 프로토콜 directive를이용함으로써프로토콜오브젝트를사용할수있다. <MyObject.h> NSObject 를상속받은후아무내용을추가하지않았다 ( 실제상황 프로토콜 (protocols) 은클래스상속에서떨어져있는메쏘드정의리 에선이렇게하지않을것이다 ). 단지차이가있다면 MyProtocol 을 이제카테고리의가장중요한기능인파티션해주는기능과새로운 스트라고할수있다. 즉클래스상속의관계와무관하게, 특정클래 Protocol *myprotocol 준수할것이라고선언한것뿐이다. 메쏘드를추가해주는기능을확인해보았다. 여기서예제를만들지는 스정의와무관하게클래스들간의공통적인메쏘드를정리할수있는 않았지만만약기존의메쏘드와같은메쏘드를카테고리로추가하게 메쏘드리스트인것이다. 이는자바의인터페이스와유사하다. 만약어떤오브젝트가주어지면 conformstoprotocol: 메시지를 #import MyObject.h 되면기존의메쏘드를덮어버리게된다. 즉상속을해도기존의메쏘드를사용할방법이없다는것이다. 만약상속을받았다면 super를 프로토콜의용도 오브젝트에보내서프로토콜을따르는지확인할수있다. 결국 conformstoprotocol: MyObject 이용해서기존의메쏘드에접근할방법은있지만카테고리는그렇지 주로두가지목적에서프로토콜을사용하는데, 하나는클래스를알 콜을따르는지확인한후사용할수있다. - (void)mymethod 못하다. 이것은잘생각해보면큰문제일수도있다. 카테고리는어떻게사용하느냐에따라서매우위험할수도있다. 자칫잘못하면전혀엉뚱한결과를낳을수있기때문이다. 또한공용으로사용하는특정클래스의메쏘드를카테고리로바꿔버리면다른작업자들이나소스의다른부분에서문제를일으킬수도있다. 즉메쏘드 수없는어떤객체를받아서그객체의사용여부를판단할때이다. 예를들어분산객체환경과같은경우다른호스트에서선언되고생성된어떤객체를네트워크를통해전달받아이객체를사용할때필요한프로토콜을만족하는지 conformstoprotocol: 메쏘드를이용해확인한후사용하게된다. 또다른주요용도로는어떤목적을위해 if ( [receiver conformstoprotocol:@protocol(myprotocol)] ) [receiver mymethod]; NSLog(@ My Method ); <MyObject.m> 를덮어버리는카테고리의남발은매우위험하며신중해야한다. 반드시구현해야하는메쏘드집합을선언할때이다. 예를들어코코 프로토콜의특징 반면카테고리가훌륭한부분은얼마든지있다. 예를들어특정인 아의 NSCoding 프로토콜은코코아객체의파일보관매커니즘 프로토콜은상속되거나중첩선언되지못하며선언된모든메쏘드는 구현에서도역시 MyProtocol 에정의된 mymethod 만을구현했다. 코딩을지원해야하는데 NSString 에서는해당인코딩을지원하지 (archiving mechanism) 으로, 이프로토콜의메쏘드를모두구현해 구현되어야한다. 메쏘드들을부분적으로사용해야할때는인포멀 여기서주의할점은프로토콜에정의된모든메쏘드를구현하지않으 않는다고가정해보자. 카테고리가없으면 NSString 을상속받아서 야비로소보관가능한객체가된다. 프로토콜을이용해야한다. 면실행시간에없는메쏘드를찾다가예외 (exception) 를발생시킨다 기능을추가하고그클래스를이용해야할것이다. 이작업은의외로 는것이다. 이경우메쏘드내의남은부분을처리하지않고빠져나와 상당히번거로운문제를야기할수있다. 특히이미완성된수만라인 프로토콜의사용 프로토콜사용예 서버그를발생시킬수있으나 -conformstoprotocol: 메시지에의해 의코드에서 NSString 을모두교체하고확인하려면적지않은부담 프로토콜의정의는다음과같이할수있다. 카테고리와마찬가지로파운데이션툴로간단히프로토콜의작동을보 프로토콜검사를할때실패하기때문에꼭확인을한다음사용하는 이될것이다. 하지만이경우에도카테고리는아주단순하고명확한 이는예제를만들어보자. 먼저 MyProtocol.h 를다음과같이만든다. 것이좋다. 특히컴파일할때경고 (warning) 를발생시키므로꼼꼼하 ProtocolName 게살펴봐야할것이다. 루트클래스카테고리카테고리는어떤클래스에도메쏘드를추가할수있다고했는데, 만 method MyProtocol - (void)mymethod; #import MyObject.h 약루트클래스라면문제가좀특별해진다. 지난호에도설명했듯이 어떤클래스를선언할때프로토콜을추가하려면다음과같이한다. int main (int argc, const char * argv[]) 코코아에서모든클래스의루트클래스는 NSObject이므로여기에카테고리로추가된메쏘드는모든오브젝트에공통으로사용된다. ClassName : ItsSuperclass <protocol list> <MyProtocol.h> NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 는자칫하면매우위험한코드가될수있다는점을내포하고있다. 이 MyProtocol 을준수하는모든오브젝트는 mymethod 를구현해 id myobject = [[MyObject alloc] init]; 상속된모든클래스에서예상치못한동작을야기할수도있기때문 또한카테고리에프로토콜을추가할수도있는데, 다음과같이하 야한다. 다음으로 NSObject 를상속받은 MyObject 를만든다. id nsobject = [[NSObject alloc] init]; 이다. 그래도꼭해야하는경우엔루트클래스의 super는없으므로 면된다. if ( [myobject conformstoprotocol:@protocol(myprotocol)] ) [myobject mymethod]; super 로메시지를보내지못하며 ( 컴파일러가에러를낸다 ) ClassName (CatergoryName) <protocol list> #import MyProtocol.h

4 if ( [nsobject conformstoprotocol:@protocol(myprotocol)] ) 블데이터갱신이필요할경우에만구현하면되고, 나머지세메쏘드 예를들어문자열객체를인자로넘겨주어야할경우엔다음과같이 그럼이제처음에배웠던간단한객체생성코드에서이 retain [nsobject mymethod]; 들은드래그앤드롭의지원여부에따라구현해주면된다. 객체의생성과소멸 만들면된다. - initwithstring:(nsstring *)string; Count가어떻게동작하는지알아보자. 다음의코드를실행시켜보면간단한해답이나온다. [myobject release]; [nsobject release]; return 0; <main.m> 객체지향개발환경에서객체의생성과소멸은가장기본적이면서도가장중요한부분이지만 C++ 나자바와달리오브젝티브-C에서는별도의객체를생성하거나소멸하는데사용하는키워드가존재하지않는다. 또한오브젝티브-C는안타깝게도가비지컬렉팅 (garbage collecting) 기능을갖추고있지도않다. 그러나오브젝티브-C에서의 이객체의클래스가 MyObject라할때객체의생성은다음과같이하면된다. anobject = [[MyObject alloc] initwithstring:@ Sample ]; anobject1 = [NSObject new]; anobject2 = [[NSObject alloc] init]; NSLog(@ %d, [anobject1 retaincount]); NSLog(@ %d, [anobject2 retaincount]); 룰을잘이해한다면그리걱정할건없다. 오브젝티브 -C 에서는여러 앞에서도언급했지만사실두생성코드는같다. 따라서결과도같 마지막으로 main.m 의구현이다. 비교사례를들기위해 My 모로편리하게생성 소멸관리를도와주는장치들이준비되어있기 이코드는 -init 메쏘드를 -initwithstring: 으로대체시킨것이다. 다. 답은 1 이다. 다음을또보자. Protocol 을준수하는 MyObject 와 MyProtocol 을준수하지않는 때문이다. 물론한번에객체를생성시켜주는 +new 도얼마든지대체시킬수 NSObject 를같이생성한다음 -conformstoprotocol: 메시지를이 있다. +newwithstring: 을만들어 +alloc 과 -initwithstring: 을불 anobject = [[NSObject alloc] init]; 용해서 mymethod 를불러주게했다. 생성된객체가정확히무엇인 NSObject 의인스턴스를만들어보자 러주면된다. 이외에도객체를바로만들어주는클래스메쏘드들이 지모른다는것을보이기위해서 id 타입으로캐스팅했다. 실행결과를보면 myobject의 mymethod는부르지만 nsobject에서는 mymethod를부르지않는다. 다만 MyObject 외에또다른 MyProtocol을준수하는객체에대해서는메쏘드를호출할것이다. 인포멀프로토콜 NSObject의인스턴스를만드는방법은몇가지있는데, 이중에서가장쉬운것부터해보자. 다음의코드는 anobject 변수에 NSObject 의인스턴스를생성해서대입시킨것이다 ( 지난호에서도설명했듯이 NSObject는코코아프레임워크의루트클래스이고사실상아무것도아니지만루트클래스이기때문에다른모든서브클래스들에대해서도동일하게사용된다. 객체의생성과소멸을관리하는대부분 존재한다. 예를들어 NSString 클래스를살펴보면 +string이라는클래스메쏘드가있다. 이클래스는빈문자열객체를생성시켜준다. +new로도똑같은일을할수있지만 +string은분명히다른점이있다. 이제설명하는내용을보면뭐가다른지알수있을것이다. retaincount를이해하자 [anobject retain]; [anobect release]; [anobject release]; 프로토콜을이용하지않은채카테고리를선언하고이를구현하지않 역할도 NSObject 에구현되어있다 ). 혹시메쏘드를생성했는데어떻게소멸시키는지언급하지않는데대 는방법으로프로토콜과비슷한기능을구현할수도있다. 이것을인 해궁금해하는독자가있을까. NextStep 에서는 -free 라는메쏘드가 이번에는객체를생성시킨다음 -retain 과 -release 를불러보았 포멀프로토콜 (informal protocols) 이라고하는데모든서브클래싱 anobject = [NSObject new]; 있었다. 이메쏘드가객체를소멸시켜주는역할을했지만 OpenStep 다. retaincount 는어떻게변할까? 답은 1, 2, 1 이다. 하지만이코드 된클래스들에서구현해도되고하지않아도될메쏘드그룹을정의 부터는없어졌다. 그럼어떻게할까? 정답은 소멸시키지말라 이다. 에서는중요한것이하나있다. 마지막에부른 -release 는바로전에 하는데이용한다. 인포멀프로토콜은흔히 NSObject 의카테고리로 이코드는매우간단하지만많은것을내포한다. 객체가메모리에할 정확히말해서소멸시킬필요가없다. 그렇다면자동으로소멸시켜준 부른 -release 와달리객체를완전히소멸시켜버린다는것이다. 왜 선언되는데, NSObject 에서상속된모든클래스에광범위하게영향 당되며인스턴스변수나객체에대한초기화를하게된다. 이코드는 다는것일까? 앞서말했듯이그건아니다. 냐하면 retaincount 가 0 이되는순간이니까. 나중에 anobject 를사 을미치게된다. 이런이유로일반적인프로토콜을사용할때의사용 NextStep 애플리케이션소스에서는많이찾아볼수있지만필자는 코코아프레임워크에서는모든객체가 retaincount 를가지고있 용하면곧바로런타임에러가발생하게된다. 이미소멸되어없어진 은피하는것이좋다. 모든메쏘드의구현을선택적으로할수있으므 OpenStep 이후잘보지못했다. 하지만지금도잘동작하며, 단지좀 다. retaincount 란쉽게말해객체의 reference count 라고할수있 객체를사용하려고했으니까. 로딜리게이트 (delegate) 처리같은부분에서사용된다. 예들들어 명확하지못하다는것일뿐이다. 이코드는다음코드와똑같다. 다. 즉 얼마나많이참조되고있느냐 라는것이다. 가비지컬렉션이 한가지더중요한것은처음에객체를생성하고난뒤 retain 코코아의 NSTableDataSource 프로토콜은인포멀프로토콜이다. 지원되는언어들과차이점은이 count 를프로그래머가직접제어해 Count 가 1 이라는사실이다. 당연한게아니냐고반문할수도있겠지 NSTableDataSource 프로토콜의인포멀프로토콜을루트클래스 anobject = [[NSObject alloc] init]; 야한다는것이다. NSObject 에구현된 -retaincount 는 unsigned 만, 필자가말하고싶은것은 +alloc 메쏘드에있다. +alloc 은객체 인 NSObject 클래스에카테고리로붙여놓은이유는어떤클래스에 int 형의숫자를돌려주는데, 이숫자가얼마나레퍼런스되고있는지 가필요한메모리를할당하는것외에도 retaincount 를 0 에서 1 로 서도이카테고리의메쏘드를구현할수있도록하기위해서이다. 만 +new 메쏘드는클래스메쏘드로, 클래스에게 +alloc 과 -init 을 를알려준다. 프로그래머는객체에 -retain 과 -release 를불러서 증가시켜준다는것을잊지말자. 약 MyDataSource 라는클래스가이프로토콜을사용하고싶으면 연속적으로부른다. +alloc 메쏘드는클래스메쏘드로, 클래스가인 retaincount 를증가시키고감소시킬수있다. MyDataSource 클래스에다앞서선언된메쏘드들을구현해주기만 스턴스화할때객체가필요로하는메모리를할당하는역할을한다. 객체는 retaincount 가 0 이되는순간소멸된다. 좀더자세히설명 생성된객체사용하기 하면된다. -init 은인스턴스메쏘드로인스턴스화된객체를최종적으로초기화 하면 -retain 은객체의 retaincount 를 1 증가시키고 -release 는 1 retaincount 를이해했다면이제본격적으로응용해보자. C 프로그 NSTableDataSource 인포멀프로토콜의경우선언된메쏘드들 하게된다. 어떻게보면 C++ 나자바의 Constructor 는오브젝티브 - 감소시킨다. retaincount 는객체가 0 인지확인하고 0 이라면객체를 래밍을공부할때선생님이나선배들로부터귀에못이박히도록들은 중처음의두메쏘드 (numberofrowsintableview: 와 tableview C 의이 -init 메쏘드와같은역할을한다고할수있다. 완전히소멸시키는것이다. 이 retaincount 만정확히이해하고있으 잔소리가있을것이다. 메모리가필요하면반드시 malloc 으로할당 objectvaluefortablecolumn:) 는반드시구현해야하지만나머지 가끔객체를초기화시킬때필요로하는인자를요구할수있는데, 면되는데, 프로그래밍할때조금만주의를기울여룰을지켜준다면 받고사용이끝나면반드시 free 해주어라 라는말이다. 즉돼지같은 메쏘드들을필요에따라구현해주면된다. 즉세번째메쏘드는테이 이경우는 init 로시작하는메쏘드들을만들어나감으로써가능하다. 가비지컬렉팅지원언어가부럽지않을만큼쉽다. 프로그램이되지않으려면자신이할당받은자원은반드시해제해주

5 어야한다. 그렇지않으면프로그램이종료될때까지시스템의자원 는사용이끝났는데 -release 가불려지지않는다면소멸되지않을것이 id anobject = [[NSObject alloc] init]; 다. NSAutoreleasePool 객체가애플리케이션이시작하면서부터종 들은폐허가되어버린다. 객체도똑같다. 객체를필요로해서받아왔으면본격적인사용에들어가기전에 -retain을불러줘객체가사용되고있음을알려야하 다. 다시말해객체가소멸될때그객체의인스턴스변수에존재하는객체들마저자동으로처리될것이라고는절대로기대하지말라. 이시점에서 -dealloc 메쏘드를소개한다. 이메쏘드는자바의... return [anobject autorelease]; 료될때까지단하나만존재한다면어차피애플리케이션이종료되면모든자원이 OS에의해회수될것이기때문에굳이 NSAutorelease Pool을사용할필요가없을것이다. 여러개의 NSAutoreleasePool 고, 사용이끝나면 -release 를불러더이상필요없는객체는소멸되 finalize() 와비슷하다. 객체의 retaincount 가 0 이되어소멸하게되 객체는스택 (stack) 으로존재해서 autorelease 되는객체들은가장마 도록해줘야한다. C 프로그래밍을가르쳐준선배들처럼필자도잔 면오브젝티브 -C 런타임은객체에 -dealloc 메쏘드를불러소멸시키 이번에는 release 시키지않고 -autorelease 의리턴값을돌려주었 지막에만들어진 NSAutoreleasePool 객체에보존된다. 소리를한마디하려고한다. retain 한객체는반드시 release 해주 게된다. 하지만프로그래머가결코 -dealloc 을부르지는않는다. 소 다. -autorelease 는리시버를리턴하며 autorelease 가된다. 그럼 일반적인 AppKit 애플리케이션의경우코코아프레임워크에의해 어라 retain 만해주고 release 를하지않으면그객체는프로그램이 멸이필요하면자동으로불려진다. 개발자는 -dealloc 메쏘드만적절 autorelease 는자동으로 release 해주는것인가. 아니면조금있다가 이벤트가발생할때마다 NSAutoreleasePool 을생성했다가소멸시 종료될때까지소멸되지않는다. 만약그프로그램이서버프로그램 하게구현해놓으면끝이다. release 시켜주는것인가. autorelease 를이해하기위해서는코코아 킨다. 따라서이벤트처리시만들어지는객체들은자동소멸하게되는 이라면? 아주치명적인결과를얻을것이다. 필요해서 retain 을해주 -dealloc 메쏘드를구현할때반드시지켜야할것은단한가지인 프레임워크에있는 NSAutoreleasePool 이라는클래스를알필요가 것이다. 만약 AppKit 을사용하지않는서버프로그램을작성한다면 고필요없어서 release 를해주었음에도불구하고프로그램이런타임 데, 마지막에 super 의 -dealloc 을불러주기만하면된다. 바로앞의 있다. NSAutoreleasePool 은객체를가지고있다가풀이소멸될때 프로그래머는 NSAutoreleasePool 을적당히사용해애플리케이션이 에러를내며종료된다면, 그것은프로그래머가잘못한것이지이룰 예제에서 MyObject 의경우 -dealloc 메쏘드의구현은다음과같다. 가지고있던객체들에게 -release 메시지를보내는역할을한다. 즉 쓸데없는시스템자원을차지하게되는현상을막아야한다. 의잘못은아니라는점을확실하게말하고싶다. autorelease 를사용하면당장 release 되지않고 NSAutoreleasePool 그리고노파심에서덧붙이자면앞에서도언급했듯이 +alloc도 retaincount를증가시키기때문에 +alloc도곧 retain을한것이나마찬가지로볼수있다. 그러므로다음과같이말할수있다. +alloc 으로생성시켰으면역시반드시 release해주어라 - (void)dealloc [object release]; [super dealloc]; 이소멸될때 release되는것이다. 이렇게함으로써객체가얼마간소멸되지않도록해준다. 다음의코드를보자. pool = [[NSAutoreleasePool alloc] init]; 잠시사용할객체얻기앞서 NSString의객체를생성하는메쏘드들중에 +new를이용하거나 +alloc과 -init을연속으로불러서객체를얻는방법외에국적없는 (?) +string이라는메쏘드를언급한적이있다. 이메쏘드는새 간단한예를하나들어보겠다. 만약 MyObject 클래스를구현하는데, 이객체가 -setobject: 라는메쏘드를통해다른객체를받아서사 MyObject가사용하기위해 retain을걸어놓았던 object를마지막으로 release해주고나머지는 superclass에맡긴다. 만약 super에 - anobject = [[NSObject alloc] init]; 로운빈문자열객체를생성해서리턴하기때문에역시생성을위한메쏘드임에는틀림없다. 하지만이메쏘드가다른점은객체가리턴 용하고있다고하자. -setobject: 를간단히구현한코드를보자. dealloc을부르지않으면객체가소멸된것처럼보이지만완전히소멸되지않았다는것은새삼설명할필요가없을것이다. [anobject retain]; 될때 -autorelease가한번불려진다는점이다. 즉잠시동안사용할문자열객체에대해서 +alloc과 -init을이용해생성한다음사용을 - (void)setobject:(id)anobject [object release]; object = [anobject retain]; anobject 는 MyObject 에넘겨주는객체이고 object 는 MyObject autorelease 만약독자여러분이객체를하나생성하고리턴해주는메쏘드를만는상황을가정해보자. 앞에서무척강조했던 retain한객체는반드시 release해주라 는룰을지킬수있을까? 다음의코드를보자. [anobject release]; [anobject autorelease]; 마치고 -release를부르는것이귀찮을정도라면 +string을사용하라는것이다. 그럼객체는이미 NSAutoreleasePool에추가되어서풀이소멸될때 release되는운명을가지고생성되는것이다. 객체복사하기 가 anobject 를받아서사용하게될인스턴스변수이다. 이코드는 이외에도새로운객체를생성시키는방법으로이미생성되어있는객 anobject를새로받을때기존의 object에 -release를불러서사용이끝났음을알리고, 새로받게되는 anobject에 -retain을불러이제사용할것이라고알린다 ( 참고로 -retain 메쏘드는리시버 (receiver) - (id)objectforme id anobject = [[NSObject alloc] init];... [anobject release]; 결과는 1, 2, 1, 1이나오고, 결국 -autorelease가호출되더라도 retaincount가감소되지않는다는것을알수있다. 하지만풀이 체의복사본을얻는방법이있다. 복사라는말은객체를하나더만들되그객체의내용을원본객체의내용과똑같게하는것이다. 객체를복사하는메쏘드는 -copy이다. 다음코드를보자. 를리턴한다 ). 이렇게하면매번다른객체로 -setobject: 를하더라도정확히 MyObject에의해 retain/release되어객체가사용중소 return anobject; release되어소멸되는순간 anobject도 release되기때문에이때 anobject는소멸하게된다. NSAutoreleasePool 객체는코코아애 anotherobject = [anobject copy]; 멸되지않을뿐만아니라아무도사용하지않게되는객체는소멸됨 플리케이션에서는항상존재하며, 만약하나도없으면객체가생성될 으로써깨끗한프로그램이될수있다. 단도직입적으로이소스코드는완전히틀렸다. 코드가잘못됐다는 때런타임경고가발생한다. 이는소멸되어야할객체가소멸되지않 anobject 는이미존재하는객체라고가정하고이코드는 것을이해한다면왜 autorelease 가필요한지알것이다. 이코드에서 았다는것을의미한다. 코코아프레임워크에존재하는대부분의객체 anobject 와내용이똑같은새로운객체를생성해서 anotherobject 객체가소멸될때 리턴해주는 anobject 는 -release 메쏘드가호출되면서소멸해버려 들은이 NSAutoreleasePool 을사용하므로코코아프레임워크의객 변수에대입한다. 객체복사가끝난직후에는 anobject 와 another 앞에서생성한객체를소멸시켜보았다. 이제필요없는시스템자원을 전혀쓸모없을뿐만아니라런타임에러도발생할것이다. 이코드를 체를하나도사용하지않는오브젝티브 -C 프로그램을만든다면굳이 Object 가내용이똑같겠지만실제로는다른객체이기때문에복사후 돌려주게되어기쁜가? 하지만한가지남은문제가있다. 바로앞의예 맞게고치면다음과같다. NSAutoreleasePool 을사용하지않을수있다 ( 그러나 Mac OS X 을 anobject 에변경을가하더라도 anotherobject 에영향을미치지는 제의경우에서보는것처럼 MyObject 가소멸될때가지고있던인스턴 이용한다면아마도절대이런일은없을것이다 ). 않는다. 따라서없던객체를생성한꼴이된다. 복사된객체는원본 스변수에남아있는 object 는어떻게할것인가하는점이다. 이 object - (id)objectforme NSAutoreleasePool 은애플리케이션에서하나이상존재하게된 객체와같은클래스이고, 원본객체가가지고있던모든인스턴스변

6 수에대입되어있던객체나값들도새로운객체에복사된다. 객체를복사하는것에서한가지알아야할점은 -copy라는객체복사메쏘드에의해리턴되는새로운객체는 retaincount가 1이며, 바로앞에서봤던 +string과같은메쏘드처럼 autorelease되지않는다는것이다. 즉 +new를이용해서생성한것과같다. 그러므로복사 - (id)initwithx:(nsnumber *)x y:(nsnumber *)y; - (NSNumber *)x; - (void)setx:(nsnumber *)x; - (NSNumber *)y; - (void)sety:(nsnumber *)y; _x = [x retain]; _y = [y retain]; return self; - (void)dealloc 마지막으로 -initwithx:y: 메쏘드를잘살펴보기바란다. 알아두어야할사실은 -init... 메쏘드가생성된객체를초기화할때만약어떤이유에의해서초기화를할수없다면 nil을리턴한다는사실이다. 만약 super의 -init... 이실패해서 nil이리턴된다면초기화과정을거치지않고바로리턴한다. 혹시이경우초기화를하기위해객체를 해서사용한객체도사용이끝나면반드시 MyPoint [_x release]; [_y release]; [super dealloc]; 생성하게되면이객체들은영영소멸되지않게된다. 또한초기화과정에서도실패를하게되면 nil을리턴하는데, 이때는반드시 release해야한다는것을잊지말자. release하지않는다면역시이 객체생성을위한메쏘드아주특별한경우가아니라면코코아프레임워크의모든객체는객체 - (id)copywithzone:(nszone *)zone return [[[self class] allocwithzone:zone] initwithx:[[_x copy] autorelease] - (NSNumber *)x return _x; 객체는영영소멸하지않게된다. 좀더완벽한 Point 객체를구현하기위해서는여러가지예외처리 생성을위한메쏘드에네이밍룰 (naming rule) 이있다. 이룰을알게됨으로써굳이메쏘드의레퍼런스를보지않아도사용자가 release해주어야할지말아야할지를알수있다. 특히객체를디자인하고구현하는프로그래머의경우이룰을따라줌으로써다른사용자가좀더편리하게접근할수있도록할수있다. 현재까지알아본모든객체생성방법과함께간단하게다시정리해보면다음과같다. +alloc은객체를생성하고 retaincount를 1로만든다. -init... 은생성된객체를초기화하는메쏘드이다. +new... 는 +alloc과 -init... 이다. 클래스의이름을따온생성메쏘드 ( 앞의예 : +string) 는 +alloc, -init..., - autorelease이다 ( 가끔씩아닌경우도있지만중요한점은 release해줄필요가없 y:[[_y copy] autorelease]]; + (id)point return [[[self alloc] init] autorelease]; + (id)pointwithpoint:(mypoint *)point return [[[self alloc] initwithpoint:point] autorelease]; + (id)pointwithx:(nsnumber *)x y:(nsnumber *)y return [[[self alloc] initwithx:x y:y] autorelease]; - (id)init self = [super init]; if (self) - (void)setx:(nsnumber *)x if (x) [_x release]; _x = [x retain]; - (NSNumber *)y return _y; - (void)sety:(nsnumber *)y if (y) [_y release]; _y = [y retain]; 가필요할것이고더복잡해지겠지만, 여기서는생성과소멸문제를집중적으로다뤘기때문에이정도만해도충분하리라생각한다. 부족한글이지만약간이나마도움이되어더나은프로그램을만들수있게되기를바란다. 흥미로운코코아의세계를꿈꾸며이번호에는오브젝티브-C의특별한기능인카테고리와프로토콜에대해알아보았고, 덤으로객체의생성과소멸과정에대해서알아보았다. 사실여기에쓴내용보다더많고복잡한내용들이있으나카테고리와프로토콜에대해서이해하고나면사실상오브젝티브-C의기능에대해서는다배운거나다름없다. 이처럼오브젝티브-C 언어는단순한언어이며, C++ 과같이두툼한문법책이필요없다. 런타임시스템에대해서는좀더설명할내용들이있지만나머지부분들에대 다는것이다 ). -copy... 는 +alloc과 -init... 으로생성된같은내용의객체다. 그러므로이도사용후반드시 release해주어야한다. _x = [[NSNumber alloc] initwithfloat:0]; _y = [[NSNumber alloc] initwithfloat:0]; return self; 해서는연재를진행하면서필요할때마다조금씩다룰예정이다. 이번연재를진행하면서필자에게걱정이좀생겼다. 흥미롭게배울수있기로유명한코코아를너무재미없게시작하는게아닌가하는생각이들기때문이다. 처음부터질려서거들떠보지도않는독자들이생 Point 구현하기 - (id)initwithpoint:(mypoint *)point 참고로 Point 는 NSCopying 프로토콜을구현하고있다. - 긴다면전적으로필자의책임이다. 단언하건데가장어려운부분은이 지금까지설명한내용을중심으로 Point MyPoint : NSObject <NSCopying> NSNumber *_x; self = [super init]; if (self) _x = [[point x] retain]; _y = [[point y] retain]; return self; copywithzone: 은 NSCopying 프로토콜에의한것이다. -copy는 NSCopying 프로토콜의 -copywithzone: 메쏘드를사용하므로 Point에서굳이 -copy를구현할필요는없다. 특히주의해서봐야할것은다음의차이이다. 번연재로끝이났다고봐도된다. 앞으로이어지는연재에서는신나고재미있고 (?), 가끔은경이로운개발환경을들여다보게될것이다. a m o s NSNumber *_y; + (id)point; + (id)pointwithpoint:(mypoint *)point; + (id)pointwithx:(nsnumber *)x y:(nsnumber *)y; - (id)init; - (id)initwithpoint:(mypoint *)point; - (id)initwithx:(nsnumber *)x y:(nsnumber *)y self = [super init]; if (self) if (!x!y) [self release]; return nil; point1 = [[Point alloc] initwithpoint:apoint]; point2 = [apoint copy]; point1과 point2는내용이같지만사실은좀다르다. - initwithpoint: 와 -copywithzone: 의구현상차이를잘살펴보라. 혹시좀더자세한내용을알고싶으면 Foundation 프레임워크의 NSCopying 프로토콜레퍼런스를읽어보기바란다 Object-Oriented Programming And The Objective-C Language, Apple Computer, Inc. Cocoa Programming for Mac OS X, Aaron Hillegass Objective-C Poket Reference, O reilly, Andrew M. Duncan Learning Cocoa With Objective-C, O reilly, James Duncan Davidson Building Cocoa Applications, O reilly, Simson Garfinkel, Michael K. Mahoney Cocoa In a Nutshell, O reilly, Michael Beam, James Duncan Davidson

Microsoft PowerPoint - 2-Objective-C 기초

Microsoft PowerPoint - 2-Objective-C 기초 클래스와오브젝트 메모리관리 순천향대학교컴퓨터공학과이상정 1 Objective-C 소개 C 언어에 Smalltalk 스타일의메시지전달을결합한객체지향프로그래밍언어 Objective-C 와코코아는 Mac OS X 운영체제의핵심 개발역사 1980 년대초에 Stepstone 사의 Brad Cox 와 Tom Love 가개발 1985년에 Steve Jobs가저렴한워크스테이션개발을위해

More information

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

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

Microsoft PowerPoint - CSharp-10-예외처리

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

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

JVM 메모리구조

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

More information

쉽게 풀어쓴 C 프로그래밍

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

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

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

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

슬라이드 1

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

More information

설계란 무엇인가?

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

More information

슬라이드 1

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

More information

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint 장강의노트.ppt 클래스와객체 클래스와객체 객체 : 우리주변의어떤대상의모델 - 예 : 사람, 차, TV, 개 객체 = 상태 (state) + 행동 (behavior) - 예 : 개의상태 - 종자, 이름, 색개의행동 - 짖다, 가져오다 상태는변수로행동은메소드로나타냄 객체는클래스에의해정의된다. 클래스는객체가생성되는틀혹은청사진이다. 2 예 : 클래스와객체 질문 : 클래스와객체의다른예는?

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

Microsoft PowerPoint - 4-UI 애플리케이션

Microsoft PowerPoint - 4-UI 애플리케이션 UIApplication 클래스 UIApplicationDelegate 프로토콜 순천향대학교 컴퓨터공학과 이 상 정 1 UIApplication 클래스 순천향대학교 컴퓨터공학과 이 상 정 2 UIApplication 클래스 개요 이 장에서는 UIApplication 클래스를 기본으로 하여 아이폰 프 로그램 동작 과정을 이해 인터페이스 빌더를 사용하지 않는 아이폰

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

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

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

17장 클래스와 메소드

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

More information

PowerPoint Presentation

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

More information

No Slide Title

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

More information

No Slide Title

No Slide Title 클래스와객체 이충기 명지대학교컴퓨터공학과 들어가며 Q: 축구게임에서먼저공격하는팀을정하기위해동전을던진다. 우리는동전을던질때앞면이나오느냐아니면뒷면이나오느냐에만관심이있다. 또한동전을가지고해야할일은동전을던지는것과동전을던진후결과를알면된다. 이동전을효과적으로나타낼수있는방법을기술하라. A: 2 클래스와객체 객체 (object): 우리주변의어떤대상의모델이다. - 예 : 학생,

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

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

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

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

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

예제 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

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

자바 웹 프로그래밍

자바 웹 프로그래밍 Chapter 00. 강의소개 Chapter 01. Mobile Application Chapter 02. 기본프로그래밍 강의내용최근큰인기를끌고있는 Mobile Application 에관한소개및실제이를위한개발방법을소개하며, Application 개발에관한프로그래밍을간략히진행 강의목표 - 프로그래밍의기본흐름이해 - 창의 SW 설계에서프로그래밍을이용한프로젝트진행에도움을주기위함

More information

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

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

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

Microsoft PowerPoint - Chap12-OOP.ppt

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

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

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

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

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

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

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

More information

2ndWeek_Introduction to iPhone OS.key

2ndWeek_Introduction to iPhone OS.key Introduction to iphone OS _2 Dept. of Multimedia Science, Sookmyung Women s University. Prof. JongWoo Lee Index iphone SDK - - - Xcode Interface Builder Objective-C Dept. of Multimedia Science, Sookmyung

More information

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

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

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

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

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

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

쉽게 풀어쓴 C 프로그래밍

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

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

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

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

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345]) 클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

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

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

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 20 장패키지 이번장에서학습할내용 패키지의개념 패키지로묶는방법 패키지사용 기본패키지 유틸리티패키지 패키지는연관된클래스들을묶는기법입니다. 패키지란? 패키지 (package) : 클래스들을묶은것 자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 그림 20-1. 패키지의개념 예제 패키지생성하기 Q: 만약패키지문을사용하지않은경우에는어떻게되는가?

More information

Microsoft PowerPoint - 2강

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

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå 기초통계프로그래밍 클래스, 객체, 변수, 메소드 hmkang@hallym.ac.kr 금융정보통계학과 강희모 ( 금융정보통계학과 ) 기초통계프로그래밍 1 / 26 자바구성파일 소스파일 소스파일 : 사용자가직접에디터에입력하는파일로자바프로그램언어가제공하는형식으로제작 소스파일의확장자는.java 임 컴파일 : javac 명령어를이용하여프로그래머가만든소스파일을컴파일하여실행파일.class

More information

C++ Programming

C++ Programming C++ Programming 상속과다형성 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 상속의이해 상속과다형성 다중상속 2 상속과다형성 객체의이해 상속클래스의객체의생성및소멸 상속의조건 상속과다형성 다중상속 3 상속의이해 상속 (Inheritance) 클래스에구현된모든특성 ( 멤버변수와멤버함수 )

More information

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 UI 이벤트 Event listener Touch mode Focus handling Notification Basic toast notification Customized toast notification Status bar notification 2 사용자가인터랙션하는특정 View

More information

오버라이딩 (Overriding)

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

More information

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

Microsoft PowerPoint - additional06.ppt [호환 모드] 보조자료 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park 복습 : Const 키워드왜사용? C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; //

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

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

Microsoft PowerPoint - additional03.ppt [호환 모드] 3. 클래스의기본 객체지향프로그래밍소개 구조체와클래스 클래스의정의 Jong Hyuk Park 객체지향프로그래밍소개 Jong Hyuk Park 구조적프로그래밍개념 기존 C와같은구조적프로그래밍언어는동작되는자료와처리동작자체를서로별도로구분 처리동작과자료사이의관계가서로밀접한연관성을갖지못함 프로그램이커지거나복잡해지면프로그램이혼란스럽게되어에러를찾는디버깅및프로그램의유지보수가어려워짐

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 프레젠테이션

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

More information

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1 IP 심화 º 각 P 의게이트웨이는해당네트워크의마지막주소를사용한다. - P1 (210.220.10.1/26) 의게이트웨이 (5의 Fa0/0) : 210.220.10.63 /26 = 255.255.255.192 호스트비트수 : 32-26 = 6 비트 => = 64 그러므로 P1의 IP 210.220.10.1 중서브넷마스크에의거 26비트는변함이없고, 나머지 6비트가호스트비트로변하므로

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

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 9 장생성자와접근제어 이번장에서학습할내용 생성자 정적변수 정적메소드 접근제어 this 클래스간의관계 객체가생성될때초기화를담당하는생성자에대하여살펴봅니다. 생성자 생성자 (contructor): 객체가생성될때에필드에게초기값을제공하고필요한초기화절차를실행하는메소드 생성자의예 class Car { private String color; // 색상

More information

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\) Session 을이용한현재로그인한사용자의 숫자구하기 작성자 : 김성박 ( 삼성 SDS 멀티캠퍼스전임강사 ) email : urstory@nownuri.net homepage : http://sunny.sarang.net - 본문서는http://sunny.sarang.net JAVA강좌란 혹은 http://www.javastudy.co.kr 의 칼럼 란에서만배포합니다.

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

PowerPoint 프레젠테이션

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

More information

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas 플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서

More information

슬라이드 1

슬라이드 1 9 장. 생성자와가비지컬렉션 학습목표 스택과힙지역변수와인스턴스변수객체생성과생성자객체제거 ( 가비지컬렉션 ) 객체의삶과죽음 그리고그가말했어. 다리에감각이없어! 그리고내가말했지. 조! 정신차려조! 하지만이미너무늦었어. 가비지컬렉터가나타났고그는죽고말았지. 내가만나본가장좋은객체였는데말야 스택과힙 스택 (stack) 메소드호출과지역변수가사는곳 지역변수는스택변수라고도부릅니다.

More information

PowerPoint Presentation

PowerPoint Presentation #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

제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

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

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

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

041~084 ¹®È�Çö»óÀбâ

041~084 ¹®È�Çö»óÀбâ 1998 60 1 1 200 2 6 4 7 29 1975 30 2 78 35 1 4 2001 2009 79 2 9 2 200 3 1 6 1 600 13 6 2 8 21 6 7 1 9 1 7 4 1 2 2 80 4 300 2 200 8 22 200 2140 2 195 3 1 2 1 2 52 3 7 400 60 81 80 80 12 34 4 4 7 12 80 50

More information

Blog

Blog Objective C http://ivis.cwnu.ac.kr/tc/dongupak twitter : @dongupak 2010. 10. 9.. Blog WJApps Blog Introduction ? OS X -. - X Code IB, Performance Tool, Simulator : Objective C API : Cocoa Touch API API.

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 2015 학년도 2 학기 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

More information

<B3EDB9AEC0DBBCBAB9FD2E687770>

<B3EDB9AEC0DBBCBAB9FD2E687770> (1) 주제 의식의 원칙 논문은 주제 의식이 잘 드러나야 한다. 주제 의식은 논문을 쓰는 사람의 의도나 글의 목적 과 밀접한 관련이 있다. (2) 협력의 원칙 독자는 필자를 이해하려고 마음먹은 사람이다. 따라서 필자는 독자가 이해할 수 있는 말이 나 표현을 사용하여 독자의 노력에 협력해야 한다는 것이다. (3) 논리적 엄격성의 원칙 감정이나 독단적인 선언이

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 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

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

Slide 1

Slide 1 SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 6. 구조체와클래스 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr Learning Objectives 구조체 구조체형 함수매개변수로서의구조체 구조체초기화 클래스 정의, 멤버함수 public 과 private

More information

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

Microsoft PowerPoint - additional08.ppt [호환 모드] 8. 상속과다형성 (polymorphism) 상속된객체와포인터 / 참조자의관계 정적바인딩과동적바인딩 virtual 소멸자 Jong Hyuk Park 상속의조건 public 상속은 is-a 관계가성립되도록하자. 일반화 ParttimeStd 구체화 2 상속의조건 잘못된상속의예 현실세계와완전히동떨어진모델이형성됨 3 상속의조건 HAS-A( 소유 ) 관계에의한상속!

More information

No Slide Title

No Slide Title 객체의이용 이충기 명지대학교컴퓨터공학과 들어가며 Q: 어떤집의설계도에따라집을서울, 용인과강릉에짓는다면이집들을어떻게구별할까? A: 2 객체와참조 실세계의한대상을모델한클래스를이용하기위해서는객체를생성해야한다. 한클래스로부터여러개의객체들을생성할수있다. 이객체들을서로구별하기위해객체를가리키는참조형변수를사용한다. 참조는가리키는객체의주소이다. 3 객체와참조 Account

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

다른 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

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P Duplicator 는기본적으로원본하드디스크를빠르게복사본하드디스크에복사하는기능을하는것입니다.. 복사본 하드디스크가원본하드디스크와똑같게하는것을목적으로하는것이어서저용량에서고용량으로복사시몇 가지문제점이발생할수있습니다. 하드디스크는사용하려면, 디스크초기화를한후에포맷을해야사용가능합니다. Windows PC는 MBR과 GPT 2 개중에 1개로초기화합니다. -Windows

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

Microsoft PowerPoint - java1 [호환 모드]

Microsoft PowerPoint - java1 [호환 모드] 10 장객체 - 지향프로그래밍 I 창병모 1 10.1 객체 - 지향개념 창병모 2 객체지향 : 동기 프로그램에서실세계객체들을시뮬레이션 창병모 3 객체 (Object) 객체 상태 (state) 객체에대한데이터 행동 (behavior)- 할 ( 될 ) 수있는연산혹은동작 예 : 은행계좌 계좌번호 현재잔액 입금 출금 창병모 4 객체와클래스 객체 Object= 데이터

More information

11장 포인터

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

More information