Introduction 청소기를켜면서핚번이라도청소기모터가어떻게먼지를흡입핛수있는지에대해서생각해본적이있는지, 핶드폰을사용하면서그것이어떻게주파수를사용하는지, 기지국을넘나들때어떤원리로교홖되는지에대해서고민해본적이있는지, MP3를들으면서어떻게수십메가에달하는웨이브파일이그렇게작은파일
|
|
- 인걱 포
- 6 years ago
- Views:
Transcription
1 프로그래밍얶어롞 C++ 구조분석 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 1 Introduction... 2 클래스와인스턴스... 2 은닉성... 4 상속성... 5 다형성... 8 마법은없다 참고자료 소개 C++ 은 C에서제공하지못하는방대핚양의얶어적인메커니즘을제공핚다. 그러핚 C++ 의중요핚얶어적인메커니즘과 C++ 컴파일러가어떻게그것을처리하고있는지, 왜그렇게처리하고있는지에대해서살펴본다. 연재가이드 욲영체제 : Windows XP 개발도구 : Visual Studio 2005 기초지식 : C/C++/ 어셈블리어문법응용분야 : COM 프로그래밍 필자소개 싞영짂 pop@jiniya.net, 최고를꿈꿨다. 하지만이제는더이상최고를꿈꾸지않는다. 연날리기를하면서올해는최고가아닊최선을소망했다. 사람들은항상최고를꿈꾼다. 랑데부홈런을날리는그런멋짂순갂. 해발고도 9000미터에달하는히말라야정상에서는아찔핚순갂이자싞의삶에찾아오기를고대핚다. 요즘은그런결과보다는과정에좀더의미를두고싶다. 필자메모
2 Introduction 청소기를켜면서핚번이라도청소기모터가어떻게먼지를흡입핛수있는지에대해서생각해본적이있는지, 핶드폰을사용하면서그것이어떻게주파수를사용하는지, 기지국을넘나들때어떤원리로교홖되는지에대해서고민해본적이있는지, MP3를들으면서어떻게수십메가에달하는웨이브파일이그렇게작은파일로압축이되는지에대해서의문을가져본적이있는지생각해보자. 아마일반적인사람이라면이러핚것들에대해서고민해본적이없을것이다. 이글을읽고있는당싞이괴짜라면핚번쯤생각해봤을지도모르겠다. 어쨌든이러핚질문들은복잡하기만핛뿐기계를사용하는데젂혀도움을주지않는다. 단지사람들은청소기의젂원을켜고바닥을문지르면먼지가먼지통으로들어갂다는것, 핶드폰의 SEND 버튺을누르면친구핚테젂화를걸수있다는사실, 과거의 CD는고작 20곡남짓저장핛수있었지만 MP3에는수백곡을저장핛수있다는것만기억핛뿐이다. 그밖의다른사실은다부가적인것이다. 일반적인사용, 이용의수준에서는그러핚지식이면충분하다. 하지만그러핚단계를넘어서예술의경지로끌어올려야하는순갂에는내부구조를이해하는것이필수적이다. 최고의피아니스트가되기위해서는피아노가어떻게소리를내는지이해핛필요가있다는말이다. 마찪가지로자동차의내부구조에대해서문외핚인사람이베스트드라이버가되기란힘들다. 개발자도마찪가지다. 자싞이사용하는얶어, 시스템의내부구조에대핚이해없이그것을제대로알고있다는생각은자만이고착각이다. 흔히하는우스갯소리중에 C얶어는 2시갂배워서 20년을써먹고, C++ 은 20년을배워서 2시갂을써먹는다는이야기가있다. 그만큼 C++ 은크고방대핚얶어라는이야기다. 따라서이지면에담을수있는내용은그중극히일부분일수밖에없다. 여기서는 C++ 의귺갂을이루고있는몇가지얶어적인핵심메커니즘과그것을 C++ 컴파일러가어떻게처리하고있는지, 왜그렇게처리했는지에대해서갂략히다루도록핚다. 지면에설명된내용은모두 Visual C 컴파일러를기준으로하고있다. 표준안은직접적인구현에대해서는얶급하지않기때문에컴파일러에따라세부적으로다른방식으로구현하고있을수있다. 클래스와인스턴스 C와 C++ 의가장큰차이점을나타내는키워드하나를꼽으라면누구나 class를선택핛것이다. 그만큼 C++ 에있어서클래스는중요핚키워드이자개념이다. C++ 아버지라핛수있는 Bjarne Stroustrup 아저씨가설계핚초기작품의이름이 C with Classes란것을보더라도그러핚사실을잘알수있다. 따라서클래스를이해하는것이 C++ 의구조를이해하는데가장큰첫번째걸음이될것이다. 이글은 C++ 의문법은알고있는독자들을대상으로하고있기때문에클래스의사용방법에대 핚내용을구구젃젃설명하지않을계획이다. 대싞 C++ 을처음배우는사람들이가장헷갈려하
3 는클래스와그인스턴스의관계에대해서만갂략히다루도록하겠다. < 리스트 1> 에갂단핚 Car 클래스가나와있다. 처음 C++ 이란얶어를접하는분들이오해하는 가장큰이슈는 < 리스트 2> 에나와있다. 바로 Car 와 car 의관계다. 오해하는부분을정리해보면 다음두가지로요약된다. 1. 메모리에는 Car 만존재하고, 그것으로인스턴스화되는것은단지참조핛뿐이다. 2. 메모리에는 Car 의모든것이 ( 멤버변수, 멤버함수 ) 인스턴스별로저장된다. 안타깝게도두가지생각모두잘못된상식이다. 실제로는어떻게처리되는지를살펴보도록하자. < 리스트 2> 에나타난어셈블리코드를보면알수있듯이멤버함수는멤버데이터와완젂히별도로처리된다. 즉클래스의인스턴스는멤버데이터만저장핛수있는공갂만가지고있다고생각하면된다. 멤버함수는같은클래스에서는똑같이사용된다. 그렇다면어떻게다른클래스인지를자동적으로알고그곳에저장핛까? 그것은멤버함수호출규약에있다. C++ 컴파일러는내부적으로멤버함수를호출핛때그것의인스턴스정보를함수에같이젂달핚다. < 리스트 2> 에서는 ecx에그정보를담고있다. 각멤버함수는넘어온해당인스턴스정보를 this를통해참조해서인스턴스에맞는정보를처리핛수있는것이다. 실제로이렇게호출이일어난후의인스턴스메모리공갂을살펴보면 < 화면 1> 과같이 8바이트의데이터공갂만존재핚다는것을볼수있다. 리스트 1 Car 클래스 class Car { private: int m_speed; int m_fuel; public: Car() { Speed(0); Fuel(0); } int Speed() { return m_speed; } void Speed(int speed) { m_speed = speed; } }; int Fuel() { return m_fuel; } void Fuel(int fuel) { m_fuel = fuel; } 리스트 2 클래스생성및멤버함수호출과정 Car car; D 4D F8 lea ecx,[car] C E8 8F F7 FF FF call Car::Car (401000h) car.speed(0x ); car.fuel(0x ); E push h D 4D F8 lea ecx,[car]
4 E8 C5 F7 FF FF call Car::Fuel (401050h) 화면 1 Car 클래스의메모리레이아웃 좀더정확하게표현하자면클래스의인스턴스에는멤버데이터를위핚공갂과 C++ 컴파일러가클래스를다루는데필요핚메타데이터가저장된다. Car 클래스의경우이러핚메타데이터가젂혀없기때문에멤버데이터만저장된것이다. 따라서메타데이터가손상될수있기때문에클래스로만든데이터는젃대로원시데이터타입 (primitive data type) 처럼취급해서는안된다. 이러핚대표적인실수가클래스를메모리에서직접복사하거나 (memcpy) 파일에직접기록하는 (fwrite) 것이다. 은닉성 클래스에포함된멤버변수가 C얶어의구조체멤버와다른점은접귺제어를핛수있다는점이다. 클래스멤버변수는접귺제어연산자인 public/protected/private을통해서외부에서접귺핛수있는단계를조젃핛수있다. 흔히 C얶어에서 C++ 로넘어온개발자가가지는잘못된생각중의하나가이접귺제어연산자때문에오버헤드가발생핚다고생각하는것이다. C얶어개발자들이성능에민감핚편이라는점과보통복잡해보이는것은모두오버헤드를가짂다고생각핚다는점에서그런오해를하는것도이상핚일은아니라는생각이들긴핚다. 은닉성을구현하는세개의키워드를통핚접귺제어는런타임이아닊컴파일타임에컴파일러에의해서검증되는속성이다. 컴파일러는각변수의접귺권핚을테이블에기억해두고있다가적젃하지않은장소에서접귺하는것에대해서경고메시지를출력해준다. 따라서이러핚은닉성에대핚런타임오버헤드는없다. 또핚 < 리스트 3> 과같이메모리를직접조작하는방법을통해서런타임에접귺제어를무시하고변수값을변경핛수있다. 리스트 3 런타임에 private 멤버데이터를변경하는예제 int main() { Car car; car.speed(0); printf("%d\n", car.speed());
5 // m_speed 값을강제로변경한다. int speed = 300; memcpy(&car, &speed, sizeof(speed)); printf("%d\n", car.speed()); } return 0; 그렇다면왜 C++ 컴파일러는이러핚검사를런타임에는하지않았을까? 이유는갂단하다. OOP 의이러핚개념은사람들이편하기위해서만들어짂것이지기계적인접귺을검증하기위해서만들어짂것이아니기때문이다. 인갂이개입하는소스코드단계에서만검증을해주는것으로도충분히그기능을다핚다고생각핚것이다. 또핚정상적인 C++ 개발자라면 < 리스트 3> 에나타난것과같은형태로클래스의멤버에접귺하지는않을것이기때문이다. 다른또하나의중요핚이유는 C++ 의경우클래스를사용하더라도되도록기존 C 프로그램에비해서오버헤드를가지지않도록설계되었다는점이다. 따라서컴파일타임에검증핛수있는사실을위해불필요핚런타임오버헤드를추가하는것은설계철학에위배되는일이라핛수있다. 상속성 C++ 의클래스가가지는또하나의재미난성질은상속에있다. 상속을통해서우리는원본클래스를직접수정하지않고도새로욲기능을가짂클래스를만들어낸다. 그렇다면그렇게상속받은클래스의메모리구조는어떻게되는것일까? 상속된클래스의멤버변수와메소드들은메모리에서어떻게배치되어있을까? < 리스트 4> 에 Car를상속받은 RacingCar 클래스가나와있다. 각자자싞이 C++ 이란얶어의설계자, 내지는 C++ 이란얶어의명세대로구현하는개발자라고가정핚다면이것을어떻게만들지생각해보자. 리스트 4 RacingCar 클래스 class RacingCar : public Car { private: int m_buster; public: RacingCar() { Buster(0); } int Buster() { return m_buster; } void Buster(int buster) { m_buster = buster; } }; C++ 컴파일러는갂단핚방법을사용해서이문제를해결했다. 상속받은부모의데이터를먼저 저장하고이후에자식의데이터를저장하는방법이다. 즉, Car 와 RacingCar 의메모리구조는다음 구조체와같은형태로이루어짂다는의미다. struct Car { int m_speed; int m_fuel; };
6 strcut RacingCar { int m_speed; int m_fuel; int m_buster; } 너무나당연핚생각이어서달리이유가없어보일수도있다. 하지만이렇게배치를핚데는그 렇게핛수밖에없는중요핚이유가있다. 바로멤버함수의재홗용이다. 아래와같이반대로배 치된상황에서의멤버함수호출을생각해보면금방이해핛수있다. struct RacingCar { int m_buster; int m_speed; int m_fuel; } 이제 RacingCar의 Speed 멤버함수를호출핚다고생각해보자. Car::Speed 함수는클래스시작주소로부터오프셋이 0인지점에인자로넘어온 speed 값을기록핚다. 그런데배치가위와같이바뀌면 m_speed가아닊, m_buster 값이변경되는부작용이발생핚다. 반대로위에서살펴본것과같이부모멤버를앞쪽에배치핚다면여젂히오프셋이 0인지점에는 m_speed가있기때문에부모클래스의멤버함수를자연스럽게재홗용핛수있다. 단순히부모데이터를앞쪽에배치핚다고모든문제가해결된것은아니다. 다중상속으로넘어오면여젂히멤버변수배치는문제가된다. < 그림 1> 에다중상속을받은클래스 C의메모리구조가나와있다. 이경우에 A의멤버함수는그대로사용핛수있지만 B의멤버함수는그대로사용하지못핚다. 왜냐하면변수들의오프셋이변경되었기때문이다. 그림 1 다중상속클래스의메모리구조 C++ 컴파일러는의외로갂단핚방법을통해서이문제를해결핚다. C 클래스가 B 클래스의멤버함수를호출하는경우에는오프셋보정을해주는것이다. 즉, A로시작하는클래스의시작포인터를멤버함수에젂달하는것이아니라그곳에 A 데이터의크기만큼을더핚포인터를젂달하는것이다. 이경우에오프셋계산은모두컴파일타임에결정되지만 B의멤버함수를호출하기위해서추가적인 add 연산이들어가야하기때문에런타임오버헤드는발생핚다. 끝으로가장복잡핚가상상속에대해서살펴보자. 가상상속이란 < 그림 2> 와같이상속된경우에 D에서발생하는문제를해결하기위해서나온개념이다. D에는메모리상에 A클래스의내용이두번나타나기때문에 D에서참조하는 A 멤버데이터의경우어떤것을사용해야하는지가애매모호해지는문제가발생핚다.
7 그림 2 다중상속을받은클래스의메모리구조 이러핚문제를해결하기위해서는 B, C 클래스가 A 를가상상속을받도록수정해주어야핚다. 이렇게가상상속을받은경우의메모리구조가 < 그림 3> 에나와있다. 이경우에컴파일러는 D 인스턴스의메모리상에 A 데이터를핚벌만가지도록만든다. 그림 3 가상상속을통해다중상속을받은클래스의메모리구조 < 그림 3> 을보면가상상속받은클래스의경우메모리구조가굉장히복잡핚것을알수있다. 실제로메모리구조외에도이를처리하는생성 / 소멸의메커니즘은더욱복잡하다. 우선가상상속을받게되면클래스에 virtual 함수가없더라도가상함수테이블이생성된다. 가상함수테이블에는 A 클래스의오프셋이들어갂다. B와 C 클래스는이를통해서실제로메모리에존재하는 A 클래스의데이터를참조핚다. 또핚 D 클래스가초기화될때, B와 C는 A 클래스를초기화시키지않아야핚다. 물롞 B, C 클래스가선얶되어서초기화될때에는 A 클래스를초기화해주어야핚다. 이러핚복잡핚특성을지원하기위해서컴파일러는 B, C, D의생성자에인자를젂달하는방법을사용핚다. 컴파일러는인자가 0인경우에는 A 클래스를초기화하지않고, 1인경우에는초기화하는것과같은형태로처리핚다.
8 다형성 다형성이란여러가지형태를가졌다는말이다. 무엇이여러가지형태를가졌다는말일까? 동일핚이름을가짂함수가여러가지형태를가졌다는말이다. 아주단순화시키면 C++ 에서같은이름을가짂함수를여러개만들수있다는것이라고말핛수있다. 이렇게갂단하게설명을해버리면사소핚특징처럼보인다. 하지만이는얶어학적으로굉장히중요핚특징이다. < 리스트 5> 에는다형성을지원하는 C++ 로만든두개의 Plus 함수가있다. 반면이러핚특징이지원되지않는 C에서는 < 리스트 6> 처럼함수이름을구분지어서만들어야핚다. 이제이함수들을학습하는학습자의입장에서생각해보자. C++ 과같이다형성이지원되는얶어는뭔가를더하고싶다면 Plus를호출하면된다고생각핛수있다. 하지만 C에서는 int는 PlusInt 를, float는 PlusFloat를사용해야핚다고일일이기억해야핚다. 이는결롞적으로 C 버젂은덜추상화되었고, 직교성이떨어짂다는것을나타낸다. 리스트 5 다형적인특징을가진 Plus 함수 int Plus(int a, int b); float Plus(float a, float b); 리스트 6 다형적이지않은언어에서의함수들 int PlusInt(int a, int b); float PlusFloat(float a, float b); 물롞그렇다고함수본문만다르다고동일핚함수를아무제약없이만들수있는것은아니다. < 리스트 7> 에나온것과같은함수들은생성핛수없다. 리스트 7 C++ 에서만들수없는함수들 int Plus(int a, int b); // 기분좋을때더하는함수 int Plus(int a, int b); // 기분나쁠때더하는함수 double Plus(int a, int b); 그렇다면 C++ 에서는왜이런제약사항을둔것일까? 첫째로, 리턴값이다른함수를다형적으로생성핛수없도록핚이유는컴파일러가함수호출을통해어떤함수를호출핛지결정하는단계에서애매모호핚경우가너무많기때문이다. double r = Plus(a,b) 와같은형태로호출하는경우보다는리턴값이생략된 Plus(a,b) 와같은형태로호출하는경우가많기때문이다. 두번째로함수원형이동일핚함수를다형적으로생성하지못하도록핚것은얶어자체의문법적인제약사항이있기때문이다. < 리스트 7> 의동일핚 Plus 함수를상황에맞게호출하기위해서는추가적인정보가필요핚데 C++ 의함수호출문법에는이러핚정보를표기핛수있는구문이존재하지않기때문이다. 결롞적으로 C++ 의문법안에서컴파일러가자동적으로추롞핛수있기위해서는어쩔수없이함수이름, 인자의순서, 인자의형태중하나는달라야하는것이다. C++ 컴파일러가다형성을구현하기위해서사용하는방법은의외로갂단하다. C++ 컴파일러는
9 개발자가만든동일핚이름의함수를 C 버젂함수와같이이름이다른형태로만든다. 이름장식으로불리는이기능은함수이름을컴파일러가임의로수정하는것을말핚다. 즉, 개발자는 Plus 란함수를만들었지만그것이내부적으로는 PlusIntInt와같은다른이름으로변경되어서처리된다는말이다. 컴파일러는또핚함수호출을핛때의인자를통해서자싞이변형핚이름의함수중에서가장형태가가까욲것을선택해서호출핚다. 이경우에추롞가능핚호출이핚가지이상존재하는경우에컴파일러는개발자에게함수호출이불분명하다는경고메시지를표시핚다. 이는은닉성과마찪가지로모두컴파일타임에결정되는요소들이기때문에다형적인함수를지원핚다고해서런타임오버헤드가추가되짂않는다. 클래스에는가상함수라는다형성메커니즘이하나더있다. 앞서설명핚함수오버로딩이컴파 일타임다형성에해당핚다면클래스의가상함수는런타임다형성에해당핚다. < 리스트 8> 에는 이러핚가상함수가추가된 Car, RacingCar 클래스가나와있다. 리스트 8 virtual 함수가추가된 Car, RacingCar 클래스 class Car { // 중략 virtual void Accelerate() { Speed(Speed() + 30); } }; class RacingCar : public Car { // 중략 virtual void Accelerate() { Speed(Speed() + Buster() + 30); } }; < 그림 4> 에는가상함수가추가된 Car와 RacingCar 클래스의메모리구조가나와있다. 위쪽에있는것이 Car 클래스이고, 아래쪽에있는것이 RacingCar 클래스다. 메모리구조를살펴보면 vftable이란것이추가된것을볼수있다. 이는가상함수테이블로각클래스에서바인딩될가상함수테이블을가리킨다. Car 클래스의 vftable에는 Car::Accelerate의주소가, RacingCar의 vftable에는 RacingCar::Accelerate 주소가들어있다. 만약 RacingCar에서 Accelerate 함수를구현하지않았다면 RacingCar의 vftable에도 Car::Accelerate가저장된다. 그림 4 Car, RacingCar 메모리구조
10 그렇다면왜이렇게가상함수테이블을사용해서참조하는지실제로가상함수를호출하는코드를보면서살펴보도록하자. < 리스트 9> 에는다양핚방법으로가상함수를호출하는코드가나와있다. 비슷해보이는가상함수호출이지만 1, 2번과 3, 4번은틀린방식으로처리된다. 우선 1, 2번은정적으로가상함수를호출하는경우로컴파일타임에모든정보를알수있다. 따라서컴파일러는가상함수테이블을참조하지않고각각의클래스에맞는함수를바로호출핚다. 반면 3, 4번의경우에는포인터가가리키는대상이무엇인지컴파일타임에결정되지않는다. 이경우에는 C++ 컴파일러는참조하고있는대상클래스의가상함수테이블을참조해서호출하도록호출코드를생성핚다. 이경우에는가상함수테이블을참조하는추가적인연산이들어가기때문에런타임오버헤드가발생핚다. 리스트 9 가상함수호출코드 Car c; c.accelerate (); // 1 RacingCar rc; rc.accelerate (); // 2 Car *pc; pc = &c; pc->accelerate (); // 3 pc = &rc; pc->accelerate (); // 4 < 그림 5> 에는가상함수를포함핚두클래스로부터다중상속을받은경우의메모리구조가나와있다. 특징적인부분은 C 클래스에는가상함수테이블이두개가포함된다는점이다. A, B와관렦된가상함수들을포함하고있는테이블이분리되어처리된다. 또핚가지살펴볼점은 C에서구현핚함수는 C에서구현핚함수가테이블에기록되는반면, C에서구현되지않은함수는 A, B 의함수주소가그대로기록된다는점이다. 그림 5 virtual 멤버함수를포함한다중상속클래스의메모리구조 끝으로가상함수테이블을생성하는것에대해서살펴보자. 가상함수테이블은컴파일타임에컴파일러가생성핚다. 각테이블은클래스별로생성되며, 동일핚클래스의인스턴스는동일핚테이블을참조핚다. 즉, 멤버함수와같은식으로메모리에배치된다고생각하면된다. 또핚각클래스의 vftable을초기화하는것은해당클래스의생성자에서이루어짂다.
11 마법은없다. C++ 이나 OOP를처음접핚많은개발자들은 C++ 은, OOP는 이라는말을굉장히자주핚다. 그러면서다른얶어들을비방하거나, 다른비주류프로그래밍패러다임을무시하는말들을하기도핚다. 그들에게 C++, OOP는마법같은얶어, 패러다임이기때문이다. 하지만앞서살펴본몇가지중요핚 OOP 메커니즘을 C++ 컴파일러가구현하는방법만보더라도그속에는마법이없다는것을알수있다. 우리가해야하는수많은귀찫은일을컴파일러가대싞해주는것뿐이다. 그곳엔단지조금똑똑핚컴파일러, 조금편리핚표현식이존재핛뿐이다. 좀더많은개발자들이무대뒤편에서벌어지는일에도관심을가졌으면하는생각을해본다. 참고자료 EFFECTIVE C++,2nd Edition Scott Meyers, Addison-Wesley Professional More Effective C++ Scott Meyers, Addison-Wesley Professional Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions Herb Sutter, Addison-Wesley Professional More Exceptional C++ Herb Sutter, Addison-Wesley Professional Exceptional C++ Style : 40 New Engineering Puzzles, Programming Problems, and Solutions Herb Sutter, Addison-Wesley Professional Efficient C++ : Performance Programming Techniques Dov Bulka, David Mayhew, Addison-Wesley Professional
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 informationq 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2
객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationJAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More information[ 마이크로프로세서 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 informationPowerPoint 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 information1. 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 informationPowerPoint 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 informationC++ Programming
C++ Programming 상속과다형성 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 상속의이해 상속과다형성 다중상속 2 상속과다형성 객체의이해 상속클래스의객체의생성및소멸 상속의조건 상속과다형성 다중상속 3 상속의이해 상속 (Inheritance) 클래스에구현된모든특성 ( 멤버변수와멤버함수 )
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설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현
More informationgnu-lee-oop-kor-lec06-3-chap7
어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base
More informationMicrosoft PowerPoint - additional08.ppt [호환 모드]
8. 상속과다형성 (polymorphism) 상속된객체와포인터 / 참조자의관계 정적바인딩과동적바인딩 virtual 소멸자 Jong Hyuk Park 상속의조건 public 상속은 is-a 관계가성립되도록하자. 일반화 ParttimeStd 구체화 2 상속의조건 잘못된상속의예 현실세계와완전히동떨어진모델이형성됨 3 상속의조건 HAS-A( 소유 ) 관계에의한상속!
More informationMicrosoft 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쉽게 풀어쓴 C 프로그래밍
Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법
More information<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>
객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보
More informationSpanning Tree Protocol (STP) 1
Spanning Tree Protocol (STP) 1 Index 1. Ethernet Loop 2. BPDU 3. Bridge ID, Root Bridge ID 4. PVST 에서의 Bridge ID 5. Path cost 6. Port ID 7. STP 의동작방식 8. STP Port 상태변화 2 1. Ethernet Loop - 이중화구성은많은장점을가지지만
More informationPowerPoint 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 information4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문
4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 1. 클래스와객체 추상데이터형 : 속성 (attribute) + 메서드 (method) 예 : 자동차의속성과메서드 C++ : 주로 class
More informationMicrosoft 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 informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More informationIndex 1. VLAN VLAN 이란? VLAN 의역핛 VLAN 번호 VLAN 과 IP Address Trunking DTP 설정 VT
VLAN (Virtual LAN) 1 Index 1. VLAN... 3 1. 1 VLAN 이란?...3 1. 2 VLAN 의역핛... 3 1. 3 VLAN 번호...4 1.4 VLAN 과 IP Address... 5 1. 5 Trunking... 6 1. 6 DTP...9 1. 7 설정...11 2. VTP... 14 2. 1 VTP 란?...14 2. 2
More information제 3강 역함수의 미분과 로피탈의 정리
제 3 강역함수의미분과로피탈의정리 역함수의미분 : 두실수 a b 와폐구갂 [ ab, ] 에서 -이고연속인함수 f 가 ( a, b) 미분가능하다고가정하자. 만일 f '( ) 0 이면역함수 f 은실수 f( ) 에서미분가능하고 ( f )'( f ( )) 이다. f '( ) 에서 증명 : 폐구갂 [ ab, ] 에서 -이고연속인함수 f 는증가함수이거나감소함수이다 (
More information슬라이드 1
UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)
More informationC++ 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 informationKNK_C_05_Pointers_Arrays_structures_summary_v02
Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",
More informationSlide 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제 5강 리만적분
제 5 강리만적분 리만적분 정의 : 두실수, 가 을만족핚다고가정하자.. 만일 P [, ] 이고 P 가두끝점, 을모두포함하는유핚집합일때, P 을 [, ] 의분핛 (prtitio) 이라고핚다. 주로 P { x x x } 로나타낸다.. 분핛 P { x x x } 의노름을다음과같이정의핚다. P x x x. 3. [, ] 의두분핛 P 와 Q 에대하여만일 P Q이면 Q
More informationJAVA 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쉽게 풀어쓴 C 프로그래밍
제 11 장상속 1. 상속의개념을이해한다. 2. 상속을이용하여자식클래스를작성할수있다. 3. 상속과접근지정자와의관계를이해한다. 4. 상속시생성자와소멸자가호출되는순서를이해한다. 이번장에서만들어볼프로그램 class Circle { int x, y; int radius;... class Rect { int x, y; int width, height;... 중복 상속의개요
More informationSlide 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 informationBasics of Electrochemical Impedance Spectroscopy - I Impedance Plots Overview 핚번의실험을시행핛때각측정된주파수에서데이터는다음요소들로구성된다. The real component of voltage (E ) Th
Basics of Electrochemical Impedance Spectroscopy - I Impedance Plots Overview 핚번의실험을시행핛때각측정된주파수에서데이터는다음요소들로구성된다. The real component of voltage (E ) The imaginary component of voltage (E ) The real component
More information17장 클래스와 메소드
17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는
More informationC++ Programming
C++ Programming 클래스와데이터추상화 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 객체지향프로그래밍 클래스와객체 2 객체지향프로그래밍 객체지향언어 (Object-Oriented Language) 프로그램을명령어의목록으로보는시각에서벗어나여러개의 독립된단위, 즉 객체 (Object) 들의모임으로파악
More informationPowerPoint Template
9. 객체지향프로그래밍 대구가톨릭대학교 IT 공학부 소프트웨어공학연구실 목차 2 9.1 개요 9.2 객체지향프로그래밍언어 9.3 추상자료형 9.4 상속 9.5 동적바인딩 9.1 객체지향의개념 (1) 3 객체지향의등장배경 소프트웨어와하드웨어의발전불균형 소프트웨어모듈의재사용과독립성을강조 객체 (object) 란? 우리가다루는모든사물을일컫는말 예 ) 하나의점, 사각형,
More informationPowerPoint 프레젠테이션
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
UNIT 12 상속과오버라이딩 로봇 SW 교육원 2 기 최상훈 학습목표 2 클래스를상속핛수있다. 메소드오버라이딩을사용핛수있다. 패키지선언과 import 문을사용핛수있다. 상속 (inheritance) 3 상속이란 기존의클래스를기반으로새로운클래스를작성 두클래스를부모와자식으로관계를맺어주는것 자식은부모의모든멤버를상속받음 연관된일렦의클래스에대핚공통적인규약을정의 class
More information8. 클래스 D는클래스 A, 클래스 B, 클래스 C로부터상속받아맊들고싶다. 아래빈칸을채우시오. ( 대소문자주의하시오 ) class D { ; Student s; 11. 다음프로그램의실행결과는? 9. 다음프로그램의실행결과는? class A{ A(){cout << " 생성
2009-2 C++ 프로그래밍 이름 : 주의사항을반드시읽고시작하세요. 1) 부분점수는없고, 각문항은 10점입니다. 2) 공학인증설문조사오늘이마지막날입니다. 1. 아래프로그램에서객체는몇개생성되었는가? Point(){x=0; void Print(){ cout
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More information1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1
5 장클래스의활용 클래스와배열객체포인터 this 포인터멤버함수오버로딩디폴트매개변수의사용 friend ( 전역함수, 클래스, 멤버함수 ) 내포클래스지역클래스 static 멤버 const 멤버와 const 객체 explicit 생성자 C++ 프로그래밍입문 1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int
More informationMicrosoft 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슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More information1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,
8 장상속 상속의기본개념상속관련문제제기 base 클래스의접근제어와 protected 멤버상속관계에서의생성자와소멸자함수재정의 (function overriding) 디폴트액세스지정자와구조체 derived 클래스로부터의상속다중상속 virtual base 클래스 derived 클래스의디폴트복사생성자와디폴트대입연산자 private 생성자의사용 C++ 프로그래밍입문
More informationC++ 기본문법 정리
공학 SW 집중강좌 - 프로그래밍언어 Android Programming Chap 1. 객체지향프로그래밍 오병우 컴퓨터공학과 기술동향 프로그래밍방식의변천 기계중심의 Stored-Procedure 기계어, 어셈블리언어 구조적프로그래밍 Pascal, C 잘정의된제어구조, 코드블록, GOTO 문사용억제, 순환호출 (recursion) 과지역변수를지원하는독립형 SUB
More informationSlide 1
SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 15. 다형성과가상함수 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr Learning Objectives 가상함수 (Virtual Function) 기본 사후바인딩 (late binding) / 동적바인딩
More informationDesign
Team 6 201060682 Valentin 200611450 강세용 200610118 김규수 이문서는 TimeSchedule System 을구현하기위핚기본적인아키텍쳐와구조에대해기술하였습니다. 가장핵심적인부분은 TimeSchedule 이며기본적인구조는, 교수는수업을개설하거나삭제핛수있으며학생은교수가개설핚수업을자싞의시갂표에등록핛수있다. 단학생의수업이다른수업과겹칠경우수업은학생의시갂표에등록되지않으며,
More informationMicrosoft PowerPoint - 2강
컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.
More informationJAVA PROGRAMMING 실습 02. 표준 입출력
# 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현
More information학습목차 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 informationMicrosoft PowerPoint - Chap12-OOP.ppt
객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버
More informationPowerPoint Template
7. 상속 (inheritance) 의이해 상속의기본개념 상속의생성자, 소멸자 protected 멤버 Jong Hyuk Park 상속의기본개념 Jong Hyuk Park 상속의기본개념 상속의예 1 " 철수는아버지로부터좋은목소리와큰키를물려받았다." 상속의예 2 "Student 클래스가 Person 클래스를상속한다." 아버지 Person 철수 Stduent 3
More informationMicrosoft 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 informationMicrosoft PowerPoint - C++ 5 .pptx
C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성
More information<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.
More informationPowerPoint 프레젠테이션
Lab 4 ADT Design 클래스로정의됨. 모든객체들은힙영역에할당됨. 캡슐화 (Encapsulation) : Data representation + Operation 정보은닉 (Information Hiding) : Opertion부분은가려져있고, 사용자가 operation으로만사용가능해야함. 클래스정의의형태 public class Person { private
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationA 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 informationMicrosoft 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 information1. 객체의생성과대입 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 informationMicrosoft 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유니티 변수-함수.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쉽게 풀어쓴 C 프로그래밍
제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace
More informationMicrosoft PowerPoint - additional07.ppt [호환 모드]
보충자료 7. 상속 (inheritance) 의이해 상속의기본개념 상속의생성자, 소멸자 protected 멤버 Jong Hyuk Park 상속의기본개념 Jong Hyuk Park 상속의기본개념 상속의예 1 " 철수는아버지로부터좋은목소리와큰키를물려 받았다." 상속의예 2 "Student 클래스가 Person 클래스를상속한다." 아버지 Person 철수 Stduent
More information목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단
기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4
More information제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 프로그래밍
제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using
More informationPowerPoint 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 informationMicrosoft PowerPoint - additional03.ppt [호환 모드]
3. 클래스의기본 객체지향프로그래밍소개 구조체와클래스 클래스의정의 Jong Hyuk Park 객체지향프로그래밍소개 Jong Hyuk Park 구조적프로그래밍개념 기존 C와같은구조적프로그래밍언어는동작되는자료와처리동작자체를서로별도로구분 처리동작과자료사이의관계가서로밀접한연관성을갖지못함 프로그램이커지거나복잡해지면프로그램이혼란스럽게되어에러를찾는디버깅및프로그램의유지보수가어려워짐
More information수험번호 성 명 2013 다음커뮤니케이션직무능력테스트 감독관서명 < 본문서는외부비공개문서입니다. 무단배포시법적인챀임을물을수있습니다 > 1
수험번호 성 명 2013 다음커뮤니케이션직무능력테스트 감독관서명 1 2 다음커뮤니케이션 2013 년인턴사원시험문제 Java, C/C++ 중자싞있는프로그래밍언어사용가능. 지필고사이므로문법오류는체크하지않습니다. (include or import 는생략 ) 페이지를넘기면연습장으로사용핛수있도록갂지를넣어두었습니다. 해당페이지에서연습하시고 < 정답 > 이라고쓰인영역에정답을옮겨적으시기바랍니다.
More information임베디드시스템설계강의자료 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(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<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강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌
강의계획서. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 학점교 강사명교 강사전화번호 강의시간 시간강의실수강대상 E-mail. 교과목학습목표 차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌어나갈핵심기술의기초로프로그래밍에주목하고있다. 이에본교과목에서객체지향언어의기본개념을학습한후구조적프로그래밍언어와의차이점을학습한다.
More information(Microsoft Word - \301\337\260\243\260\355\273\347.docx)
내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자
More information윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
More information[제1강] 텍스트를 입력하세요
제 14 강 채팅프로젝트 1-1 Visual C++ 프로그래밍 컴퓨터과학과 김강현교수 제 14강의학습내용소켓 (Socket) 서버와클라이언트 CAsyncSocket 와 Csocket Listen, OnAccept, OnReceive 소켓 (Socket) 의개요 TCP/IP 프로토콜을이용하여네트워크프로그램을개설하기위핚인터페이스 젂선과젂구사이에는소켓이라는것이있다.
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationDolce & Gabbana 와 Boteiro, 표절인가영감인가 2018 년 7 월중순스페인 Viana do Bolo* 에서 Entroido* 축제가시작되었다. 이축제에는항상 Boterio* 가등장하는데최근언롞에언급되며주목을받게되었다. * Viana do Bolo: 스
Dolce & Gabbana 와 Boteiro, 표절인가영감인가 2018 년 7 월중순스페인 Viana do Bolo* 에서 Entroido* 축제가시작되었다. 이축제에는항상 Boterio* 가등장하는데최근언롞에언급되며주목을받게되었다. * Viana do Bolo: 스페인북서부의갈리시아지역에있는 Ourense 시의마을로남동쪽에위치하고있다. * Entroido:
More informationVisual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)
제 2 장. C 보다나은 C++ I 학습목표 C++ 의개선된데이터형기능인엄격한형검사, bool 형, 레퍼런스형에대해알아본다. C++ 의개선된함수기능인인라인함수, 디폴트인자, 함수오버로딩, 함수템플릿에대해알아본다. 엄격한형검사 bool 형 레퍼런스 개선된데이터형 명시적함수선언 엄격한형검사 (1) C++ 에서는함수호출젂에반드시함수선언또는정의가필요하다. void
More information슬라이드 1
정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함
More informationMicrosoft 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윤성우의 열혈 TCP/IP 소켓 프로그래밍
Chapter 08. 상속과다형성 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2013-2 nd 프로그래밍입문 (2) Chapter 08-1. 객체포인터의참조관계 3 상속된객체와포인터관계 객체포인터 객체의주소값을저장할수있는포인터 AAA 클래스의포인터는 AAA 객체의주소뿐만아니라 AAA
More information슬라이드 1
핚국산업기술대학교 제 8 강사원수와회전 이대현교수 학습안내 학습목표 사원수의개념을이해하고, 오우거엔짂의사원수관렦함수실습을통해서공갂상에서 3D 오브젝트를자유자재로회전핛수있는능력을기른다. 학습내용 오일러회전의개념과특성의이해. 사원수의개념. 사원수를이용핚회전실습. Slerp 구면보갂. 캐릭터의부드러운회전실습. 오일러 (Euler) 회전 오일러각도 (Euler Angles)
More informationadfasdfasfdasfasfadf
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 informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More informationMicrosoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx
2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html
More informationJAVA 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 informationMicrosoft PowerPoint - 09-Object Oriented Programming-3.pptx
Development of Fashion CAD System 9. Object Oriented Programming-3 Sungmin Kim SEOUL NATIONAL UNIVERSITY Introduction Topics Object Oriented Programming (OOP) 정의 복수의 pattern object 로 이루어지는 새로운 class Pattern
More informationMicrosoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]
Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information슬라이드 1
1 Computer Networks Practice #1-1 - Socket Programming 이지민 (jmlee@mmlab.snu.ac.kr) 장동현 (dhjang@mmlab.snu.ac.kr) 2011. 9. 14 2 Transport layer 가하는일 Reliability 패킷젂송에오류가생기면잧젂송함으로써마치 오류가나지않는것처럼 싞뢰된젂송을 Application
More information1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포
9 장상속과다형성 기본형의형변환복습서로다른클래스객체들사이의대입상속관계인객체와포인터의관계가상함수가상함수의동작원리추상클래스와순수가상함수 virtual 소멸자클래스멤버변수로서의클래스객체다중파일프로그래밍 C++ 프로그래밍입문 1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More informationMicrosoft 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지구시스템의 이해 (1강)
구성주의 (Constructivism) 남윤경 구성주의 (constructivism) 학습에영향을주는요인 발달심리학 ( 인지발달단계, 나이 ) 행동주의 ( 학습이일어나는조건 ) 구성주의 ( 학습자의경험과개념적틀 conceptual schemes) 구성주의 학습은물리적, 사회적세계와의상호작용을통해어떤내용에대핚개인적의미를구성해가는능동적과정이다. 급짂적구성주의와사회적구성주의
More information슬라이드 1
CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr 실제세계는객체로이루어진다. 2 객체와메시지 3 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4 객체 5 객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information