Chapter 00. 강의소개 Chapter 01. Mobile Application Chapter 02. 기본프로그래밍
강의내용최근큰인기를끌고있는 Mobile Application 에관한소개및실제이를위한개발방법을소개하며, Application 개발에관한프로그래밍을간략히진행 강의목표 - 프로그래밍의기본흐름이해 - 창의 SW 설계에서프로그래밍을이용한프로젝트진행에도움을주기위함 강사소개 - 정명범 : 010-6771-1061, nzin@ssu.ac.kr
Mobile Application = 모바일응용소프트웨어스마트폰, 태블릿 PC 등 Mobile 에서실행되는응용소프트웨어 - 구글플레이 : 안드로이드앱, App Store : 아이폰앱 Mobile Application 분류 (Apple Store 기준 ) 건강및피트니스, 게임, 금융, 교육, 날씨, 내비게이션, 뉴스, 도서, 라이프스타일, 비즈니스, 사진및비디오, 생산성, 쇼핑, 소셜네트워킹, 스포츠, 어린이, 엔터테인먼트, 여행, 유틸리티, 음식및음료, 음악, 의학, 잡지및신문, 참고, 카탈로그
사용기술에따른분류 Data 저장소에따른분류 Local Data 사용 Network Data 사용 Sensor 사용에따른분류 * Ambient light, Proximity, Dual Cameras, GPS, Accelerometer Dual microphones, Compass, Gyroscope 등 * A Survey of Mobile Phone Sensing
Android Java 언어, Windows & Mac 에서개발 eclipse JDK Android SDK ios Objective C & Swift 언어, Mac 에서개발 Xcode - Class Level - 20: beginner level 10: medium 6: upper medium 4: no experience
Objective C 아이폰과맥 os x 개발을위한 objective-c 2.0 프로그래밍의기본을익힘 객체지향언어 Class, 상속, 컴포지션, 소스파일구성등 Application 개발방법소개 윈도우에서 Objective C 프로그래밍을하기위한웹 http://www.tutorialspoint.com/compile_objective-c_online.php 윈도우에서 Objective C 프로그래밍을하기위한 Dev-C++ http://www.evernote.com/l/ahjak0k9x0zahkhoih64pert6llzmwltacg/
절차지향 s 구조체 ShapeRect Shape 함수 drawshapes drawcircle drawrectangle drawegg colorname Main: 실행
절차지향 함수 drawshapes void drawshapes (Shape shapes[], int count) { int i; for (i=0; i<count; i++) { switch (shapes[i].type) { case kcircle: drawcircle (shapes[i].bounds, shapes[i].fillcolor); break; case krectangle: drawrectangle (shapes[i].bounds, shapes[i].fillcolor); break; case koblatespheroid: drawegg (shapes[i].bounds, shapes[i].fillcolor); break; } } }
객체지향 void drawshapes (id shapes[], int count) { int i; for (i=0; i<count; i++) { id shape = shapes[i]; [shape draw]; } } Circle fillcolor bounds setfillcolor: setbounds: draw Rectangle fillcolor bounds setfillcolor: setbounds: draw OblateSphereoid fillcolor bounds setfillcolor: setbounds: draw
객체지향
객체지향 main 함수내코드 Shape shapes[3]; ShapeRect rect0 = {0,0,10,30}; shapes[0].type = kcircle; shapes[0].fillcolor = kredcolor; shapes[0].bounds = rect0; ShapeRect rect1 = {30,40,50,60}; shapes[1].type = krectangle; shapes[1].fillcolor = kgreencolor; shapes[1].bounds = rect1; ShapeRect rect2 = {15,18,37,29}; shapes[2].type = koblatespheroid; shapes[2].fillcolor = kbluecolor; shapes[2].bounds = rect2; drawshapes (shapes, 3); id shapes[3]; ShapeRect rect0 = {0,0,10,30}; shapes[0] = [Circle new]; [shapes[0] setfillcolor:kredcolor]; [shapes[0] setbounds:rect0]; ShapeRect rect1 = {30,40,50,60}; shapes[1] = [Rectangle new]; [shapes[1] setfillcolor:kgreencolor]; [shapes[1] setbounds:rect1]; ShapeRect rect2 = {15,18,37,29}; shapes[2] = [OblateSphereoid new]; [shapes[2] setfillcolor:kbluecolor]; [shapes[2] setbounds:rect2]; drawshapes (shapes, 3);
상속 s Circle Rectangle OblateSphereoid Shape fillcolor bounds fillcolor bounds fillcolor bounds fillcolor Bounds setfillcolor: setbounds: draw setfillcolor: setbounds: draw setfillcolor: setbounds: draw setfillcolor: setbounds: draw Circle Rectangle OblateSphereoid draw draw draw
상속 @interface Shape: NSObject { ShapeColor fillcolor; ShapeRect bounds; } - (void) setfillcolor: (ShapeColor) fillcolor; - (void) setbounds: (ShapeRect) bounds; - (void) draw; @end @implementation Shape - (void) setfillcolor:(shapecolor) c { fillcolor = c; } - (void) setbounds:(shaperect) b { bounds = b; } - (void) draw { } @end
상속시함수의실행 (1)
상속시함수의실행 (2)
상속시함수의실행 (3) 슈퍼클래스의호출
컴포지션 s 각컴포넌트를모아서더큰것을만드는작업 Car 엔진 1 개, 바퀴 4 개로구성된프로그램자동차만들기 Engine, Tire, Car 클래스필요 Car 는 Engine 1 개, Tire 4 개를갖는변수필요함 @interface Tire : NSObject @end @implementation Tire - (NSString *) description { return (@"I am a tire. I last a while"); } @end @interface Engine : NSObject @end @implementation Engine - (NSString *) description { return (@"I am an engine. Vroom!"); } @end
컴포지션 Car, Main 그러나일반적으로 Car 에서엔진과타이어를만드는것이아니라, 엔진과타이어는 Car 를만들때생성해서붙이는방식이되어야함
접근자메소드 int main(int argc, const char * argv[]) { Car *car; car = [Car new]; Engine *engine = [Engine new]; [car setengine:engine]; int i; for (i=0; i < 4; i++) { Tire *tire = [Tire new]; [car settire:tire atindex:i]; } [car print]; } return 0;
CarParts 확장 : 현재만든파일에구현실습 Slant 6 ( 엔진을상속받음 ) I am a slant-6. VROOOM! 출력 AllWeatherRadial ( 타이어를상속받음 ) I am a tire for rain or shine. 출력
파일구성 유지보수를위해자동차, 엔진, 타이어에따른파일분리필요 인터페이스 (interface) 와구현 (implementation) 을나누어야함.h : 인터페이스,.m : 구현
파일구성 Engine.h, Engine.m Tire.h, Tire.m Car.h : 엔진과타이어를변수선언및사용해야함 #import Engine.h #import Tire.h main.m : 차를생성해야하며, 엔진과타이어생성함 #import Car.h Car.h 에서 Engine 과 Tire 를불러왔기때문에별도로추가안함 추가적으로 Slant 6, AllWeatherRadial 도적용
Foundation Kit 소개 Foundation Kit : 데이터조작클래스, 자료타입 Application Kit : 사용자인터페이스객체 ( 버튼, 이미지박스등 ) 데이터를조작하기위해반드시필요한부분 #import <Foundation/Foundation.h>
Foundation Kit 소개 유용한타입 NSRange (location, length) NSMakeRange ( ) NSPoint (x, y), NSSize (width, height) - NSMakePoint( ), NSMakeSize( ) NSRect (NSPoint origin, NSSize size) NSMakeRect( ) 문자열처리클래스 NSString NSString *height = [NSString stringwithformat:@ Height: %d, 5]; 팩토리메소드 : 위와같이새객체를생성하는데사용하는메소드 [height length]; // 위 NSString의길이를알아올때사용
Foundation Kit 소개 NSString
Foundation Kit 소개 컬렉션 NSArray, NSMutableArray NSDictionary, NSMutableDictionary 여러가지값 NSNumber NSValue
객체초기화 s Initialization 초기화를실행하는메소드 : init 차를만들때기본엔진, 기본타이어만드는기본옵션초기화 많은클래스들이편리한이니셜라이저 (initializer) 를가지고있음 NSString *emptystring = [[NSString alloc] init]; string = [[NSString alloc] initwithformat: @ %d or %d, 25, 624]; string = [[NSString alloc] initwithcontentsoffile:@ /tmp/word.txt ]; 타이어를만들때도공기압, 마모상태를초기화 & 설정하는메소드구현가능
타이어초기화및설정코드 #import <Foundation/Foundation.h> @interface Tire : NSObject { float pressure; float treaddepth; } - (void) setpressure:(float) pressure; - (float) pressure; - (void) settreaddepth:(float) treaddepth; - (float) treaddepth; @end
타이어를불러오는곳 (Car.h) 과실제사용하는곳 (main.h) 수정
객체초기화 초기화하면서바로설정하는편리한이니셜라이저작성 - (id) initwithpressure: (float) pressure treaddepth: (float) treaddepth; 초기화하면서타이어공기압만설정하는이니셜라이저 - (id) initwithpressure: (float) pressure; 초기화하면서타이어마모상태만설정하는이니셜라이저 - (id) initwithtreaddepth: (float) treaddepth;
프로그램시연