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.
Objective C? C++ C SW C C++? C++.
C++ Bjarne Stroustrup
Window Phone 7 MS OS Silverlight, XNA C++ C#
Android Java C++? Bada OS
Object Oriented Programming : Power C++,
객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 2010 인피니티북스 All rights reserved
객체지향의과정 2010 인피니티북스 All rights reserved
객체란? 객체 (object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작 9800km 2010 인피니티북스 All rights reserved
멤버변수와멤버함수 2010 인피니티북스 All rights reserved
메시지 소프트웨어객체는메시지 (message) 를통해다른소프트웨어객체와통신하고서로상호작용한다. 2010 인피니티북스 All rights reserved
중간점검문제 1. 객체들은 전달을통해서서로간에상호작용을한다. 2. 자동차객체에서생각할수있는메시지와매개변수에대하여나열하여보라. 2010 인피니티북스 All rights reserved
클래스 클래스 (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스 (instance) 라고도한다. 2010 인피니티북스 All rights reserved
절차지향과객체지향 절차지향프로그래밍 (Procedural Programming) 문제를해결하는절차를중요하게생각하는소프트웨어개발방법. 이들절차는모두함수라는단위로묶이게된다. 2010 인피니티북스 All rights reserved
절차지향과객체지향 객체지향프로그래밍 (Object-Oriented Programming) 데이터와함수를하나의덩어리로묶어서생각하는방법이다. 데이터와함수를객체로묶는것을캡슐화 (encapsulation) 라고부른다. 2010 인피니티북스 All rights reserved
객체지향의장점 객체들을조립하여서빠르게소프트웨어를만들수있다. 2010 인피니티북스 All rights reserved
자동차경주게임의예 struct Car { int speed; int gear; char *pcolor; }; void init(car& c, char *color); void start(car& c); void stop(car& c); int get_speed(car& c); void set_speed(car& c, int speed); class Car { int speed; int gear; char *pcolor; public: void init(char *color); void start(); void stop(); int get_speed(); void set_speed(int speed); }; int main() { Car car; init(car, "red"); start(car); set_speed(car, 60); stop(car); return 0; } 2010 인피니티북스 All rights reserved int main() { Car car; car.init("red"); car.start(); car.set_speed(60); car.stop(car); return 0; }
객체지향의개념들 캡슐화 (encapsulation) 정보은닉 (information-hiding) 상속 (inheritance) 다형성 (polymorphism) 2010 인피니티북스 All rights reserved
캡슐화 캡슐화 (encapsulation) 란데이터와연산들을객체안에넣어서묶는다는의미이다. 2010 인피니티북스 All rights reserved
정보은닉 객체내부의데이터와구현의세부사항을외부세계에게감추는것. 외부세계에영향을끼치지않으면서쉽게객체내부를업그레이드할수있다. 2010 인피니티북스 All rights reserved
상속 상속은기존의코드를재활용하기위한기법으로이미작성된클래스 ( 부모클래스 ) 를이어받아서새로운클래스 ( 자식클래스 ) 를생성하는기법이다. 2010 인피니티북스 All rights reserved
다형성 다형성이란객체가취하는동작이상황에따라서달라지는것을의미한다. -> 함수이름의재사용 2010 인피니티북스 All rights reserved
쉬운디버깅 예를들어서절차지향프로그램에서하나의변수를 1000 개의함수가사용하고있다고가정해보자. -> 하나의변수를 1000 개의함수에서변경할수있다. 객체지향프로그램에서 100 개의클래스가있고클래스당 10 개의멤버함수를가정해보자. -> 하나의변수를 10 개의함수에서변경할수있다. 어떤방법이디버깅이쉬울까? 2010 인피니티북스 All rights reserved
객체지향의장점 신뢰성있는소프트웨어를쉽게작성할수있다. 코드를재사용하기쉽다. 업그레이드가쉽다. 디버깅이쉽다. 2010 인피니티북스 All rights reserved
중간점검문제 1. 자바에서코드재사용이쉬운이유는관련된 와 이하나의덩어리로묶여있기때문이다. 2. 정보은닉이란 을외부로부터보호하는것이다. 3. 정보를은닉하면발생하는장점은무엇인가? 2010 인피니티북스 All rights reserved
QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 2010 All rights reserved
클래스의구성 클래스 (class) 는객체의설계도라할 수있다. 클래스는멤버변수와멤버함수로이루어진다. 멤버변수는객체의속성을나타낸다. 멤버함수는객체의동작을나타낸다. 2010 All rights reserved
클래스정의의예 class Car { public: // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상 // 멤버함수선언 void speedup() { // 속도증가멤버함수 speed += 10; }!! }; void speeddown() { // 속도감소멤버함수 speed -= 10; } 2010 All rights reserved
객체 int 타입의변수를선언하는경우 int i; 클래스도타입으로생각하면된다. Car 타입의변수를선언하면객체가생성된다. Car mycar; 2010 All rights reserved
객체의사용 객체를이용하여멤버에접근할수있다. 이들멤버변수에접근하기위해서는도트 (.) 연산자를사용한다. mycar.speed = 100; mycar.speedup(); mycar.speeddown(); 2010 All rights reserved
예제 #include <iostream> #include <string> using namespace std; class Car { public: // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상 // 멤버함수선언 void speedup() { // 속도증가멤버함수 speed += 10; } }; void speeddown() { // 속도감소멤버함수 speed -= 10; } 2010 All rights reserved
Car globalcar; int main() { Car localcar; // 전역객체 // 지역객체 globalcar.speed = 100;; localcar.speed = 60; localcar.color = "white"; cout << " 현재 global 차의속도는 " << globalcar.speed << endl; cout << " 현재 local 차의속도는 " << localcar.speed << endl; } return 0; 현재 global 차의속도는 100 현재 local 차의속도는 60 계속하려면아무키나누르십시오... 2010 All rights reserved
중간점검문제 1. 객체들을만드는설계도에해당되는것이 이다. 2. 같은종류의객체가여러개생성될때각객체의변수와멤버함수는공유되는가? 아니면각객체마다별도로만들어지는가? 3. 클래스선언시에클래스안에포함되는것은 과 이다. 4. 객체의멤버에접근하는데사용되는연산자는 이다. 5. 각객체마다별도로가지고있는것은클래스의 이다.. 2010 All rights reserved
접근제어 2010 All rights reserved
private 와 public 아무것도지정하지않으면디폴트로 private class Car { // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상 } int main() { Car mycar; mycar.speed = 100; // 오류! } 2010 All rights reserved
예제 #include <iostream> #include <string> using namespace std; class Employee { string name; // private 로선언 int salary; // private 로선언 int age; // private 로선언 // 직원의월급을반환 int getsalary() { return salary; } public: // 직원의나이를반환 int getage() { return age; } // 직원의이름을반환 string getname() { return name; } }; int main() { Employee e; e.salary = 300; // 오류! private 변수 e.age = 26; // 오류! private 변수 int sa = e.getsalary(); // 오류! private 멤버함수 string s = e.getname(); // OK! int a = e.getage(); // OK } 2010 All rights reserved
멤버변수 멤버변수 : 클래스안에서그러나멤버함수외부에서정의되는변수 class Date { public: void printdate() { } cout << year << "." << month << "." << day << endl; int getday() { return day; } } // 멤버변수선언 int year; string month; int day; 2010 All rights reserved
접근자와설정자 접근자 (accessor, getter): 멤버변수의값을반환 ( 예 ) getbalance() 설정자 (mutator, setter): 멤버변수의값을설정 ( 예 ) setbalance(); 2010 All rights reserved
예제 class Car { private: // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상... public: // 접근자선언 int getspeed() { return speed; } // 설정자선언 void setspeed(int s) { speed = s; } 2010 All rights reserved
예제 // 접근자선언 int getgear() { return gear; } // 변경자선언 void setgear(int g) { gear = g; } // 접근자선언 string getcolor() { return color; } // 변경자선언 void setcolor(string c) { color = c; } }; 2010 All rights reserved
접근자와설정자의장점 설정자의매개변수를통하여잘못된값이넘어오는경우, 이를사전에차단할수있다. 멤버변수값을필요할때마다계산하여반환할수있다. 접근자만을제공하면자동적으로읽기만가능한멤버변수를만들수있다. void setspeed(int s) { if( s < 0 ) speed = 0; else speed = s; } 2010 All rights reserved
멤버함수의외부정의 2010 All rights reserved
클래스선언과구현의분리 클래스의선언과구현을분리하는것이일반적 2010 All rights reserved
Coffee Break
C++ vs Obj C C++. friend function,,
Objective C C Objective-C++ C++...
Good Reference
: http://chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf
Objective-C 2.0 : Cocoa Touch @property Fast enumeration, @optional @required
function vs method function C Objective C method +,-,
scope
forward
instance class
Objective-C Grammar
매개변수에 대한태그
Smalltalk..
selector
.
C# partial.
Category
instance
id
(destructor) dealloc
AutoreleasePool autorelease
AutoreleasePool
접근자와설정자 접근자 (accessor, getter): 멤버변수의값을반환 ( 예 ) getbalance() 설정자 (mutator, setter): 멤버변수의값을설정 ( 예 ) setbalance(); 2010 All rights reserved : http://maclove.pe.kr/28
setter? -(void) setimage:(uiimage *)newimage { image = newimage; } newimage image image newimage. newimage image
@property @property (nonatomic, retain) UIImage* image; -(void)setimage:(uiimage *)newimage{ if(image!= newimage) { [image release]; image = [newimage retain]; } } newimage retain. newimage release retain count 1.
And more property, exception, delegate pattern
Objective C. Cocoa API Objective C. Objective C.
Object Oriented Programming. ios, Android, Windows Phone 7 C++. Objective C Java, C# OOP.
Q & A