SlideShare a Scribd company logo
1 of 86
OBJECTIVE - C
1장 ~ 4장
13년 5월 23일 목요일
XCODE 4.6.2 기준으로 작성
13년 5월 23일 목요일
들어가기 앞서서...
13년 5월 23일 목요일
OBJECTIVE C를 하는 (개인적) 이유
• 아이폰 앺 개발 짜응!
• ...포팅을 위하여! - 개발자라면 MAC, PC, LINUX 쯤은....???
• 언어는 언어일뿐... 애플 망하지 마라!
13년 5월 23일 목요일
진실은...
13년 5월 23일 목요일
그래도 나는 OBJECTIVE C를 한다
어헣허허허허허헣헣
13년 5월 23일 목요일
OBJECTIVE C 차례
1장 iOS SDK 소개 및 프로그래밍 기본
2장 기본 자료형과 연산자
3장 제어문, 배열 및 구조체
4장 클래스, 객체 및 메시징
13년 5월 23일 목요일
1장 IOS SDK 소개 및 프로그래밍 기본
13년 5월 23일 목요일
1장 IOS SDK 소개 및 프로그래밍 기본
• 개발을 위한 iOS SDK 다운로드
• 개발자 문서 및 포럼 소개
• 기본개념
• Xcode 기본
13년 5월 23일 목요일
IOS SDK 다운로드
http://developer.apple.com
13년 5월 23일 목요일
IOS SDK 다운로드
http://developer.apple.com
13년 5월 23일 목요일
IOS SDK 다운로드
http://developer.apple.com
13년 5월 23일 목요일
IOS SDK 다운로드
http://developer.apple.com
개발 프로그램은 무료!
개발 프로그램 판매하고 싶으면 연99$
연99$... (날강도여)
13년 5월 23일 목요일
IOS SDK 다운로드
• 참고 사이트라해
• developer.apple.com/library/ios/navigation/index.html(개발자 문서)
• 개발자 문서에서 아이폰 앱 개발 필요한 모든 내용 찾을 수 있다해 -
사실 개발자 문서만 보면 다------ 된다해
13년 5월 23일 목요일
개발자 포럼
Apple Developer Forums
http://devforums.apple.com/community/iOS - 돈 내야 됨+양키꺼
http://cafe.naver.com/mcbugi - 국내
http://www.iphoneos.co.kr - 국내
13년 5월 23일 목요일
프로그래밍 기본 개념
• Objective - C의 기반이 되는 프로그래밍 언어는 C
13년 5월 23일 목요일
프로그래밍 기본 개념
#include <stdio.h>
int main(void)
{
printf(“Hello Worldn”);
return 0;
}
13년 5월 23일 목요일
프로그래밍 기본 개념
#include <stdio.h>
int main(void)
{
int c=10; // 변수
printf(“Hello Worldn”);
return 0;
}
13년 5월 23일 목요일
프로그래밍 기본 개념
#include <stdio.h>
int main(void)
{
int c=10; // 변수
printf(“Hello Worldn”);
return 0;
}
void hello(void) // 함수
{ printf(“hellon”); }
13년 5월 23일 목요일
프로그래밍 기본 개념
13년 5월 23일 목요일
프로그래밍 기본 개념
13년 5월 23일 목요일
프로그래밍 기본 개념
체크 해제
13년 5월 23일 목요일
프로그래밍 기본 개념
13년 5월 23일 목요일
프로그래밍 기본 개념
13년 5월 23일 목요일
프로그래밍 기본 개념
//
// main.m
// HelloWorld
//
// Created by cho dong heon on 13. 4. 30..
// Copyright (c) 2013년 cho dong heon. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
! // HelloWorld의 실행 과정을 디버그 콘솔에 기록(Log hello world to the debugger console)
NSLog(@"Hello World"); //Hello World 문자 출력
! int retVal = UIApplicationMain(argc, argv, nil, nil);
! [pool release];
! return retVal; // 보통은 0, 0이 아니면 에러
}
13년 5월 23일 목요일
프로그래밍 기본 개념
NSLog 함수는 printf 함수처럼 문자열 출력
- printf는 c의 문자열, NSString은 NSString 클래스를 참조하는 객체
의 문자열 출력(자세한 것은 나중에)
- NSLog는 디버거 콘솔에 문자열 출력 때 사용(아이폰 화면 ㄴㄴ)
13년 5월 23일 목요일
프로그래밍 기본 개념
#import <Foundation/Foundation.h>
int main(int argc, char *argv[])
{
	 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];//메모리 참조 수 계산 방식 ARC(Automatic Reference Count)
	 [pool release];
	
	 @autoreleasepool //메모리 참조 수 계산 방식 ARC(Automatic Reference Count)
	 {
	 	 NSLog(@"Hello World!"); // 출력
	 	 NSLog(@"int : %i",10); // 정수 출력
	 	 NSLog(@"float : %.2f",0.1); // float 출력
	 	 NSLog(@"double : %f",3.14258); // double 출력
	 	
	 	 NSLog(@"c문자열 : %s","c hello"); // c문자열 출력 char a[10]=”hello”
	 	 NSLog(@"NSString 오브젝트 문자열 : %@",@"objective hello"); // NSString 오브젝트 문자열 출력 NSString *string=@”hello”
	 }
	
	 printf("Hi! This is printf!");
	
	 return 0;
}
13년 5월 23일 목요일
프로그래밍 기본 개념
헤더 파일은 함수 혹은 메서드 원형들과 변수 선언을 포함
- 확장자 ‘.h’
소스 파일은 함수 혹은 메서드와 변수를 구현
- 확장자 ‘.m’
자세한 것은... 4장에서.
13년 5월 23일 목요일
전처리기 지시자와 컴파일러 지시자
지시자?
13년 5월 23일 목요일
전처리기 지시자와 컴파일러 지시자
지시자!
#include
#import
#define
etc..
13년 5월 23일 목요일
전처리기 지시자와 컴파일러 지시자
전처리기 지시자는 명령어 ‘#‘키워드로 시작!
- #import, #define
컴파일러 지시자는 명령어 ‘@‘키워드로 시작!
- @interface, @implementation
13년 5월 23일 목요일
전처리기 지시자와 컴파일러 지시자
Objective C는 #include ㄴㄴ #import !
13년 5월 23일 목요일
전처리기 지시자와 컴파일러 지시자
@interface, @implementation -> 컴파일러 지시자
- 나중에 이해하자...
#import <Foundation/Foundation.h>
#define GREETING @"Dawg"
#define AGE 40
@interface SayHello : NSObject
{
	 NSString *test;
}
- (void) sayHello: (NSString *) name;
@end
<SayHello.h>
#import "SayHello.h"
@implementation SayHello
- (void) sayHello: (NSString *) name // 함수 정의-name을 argument로 받는 함수
{
	 NSLog(@"Hello %@, %@. Your are %i years old.",name,GREETING,AGE);
}
@end
<SayHello.m>
13년 5월 23일 목요일
주석 & 포인터
<주석 쓰기>
// 한줄짜리
/* 여러
줄
짜리*/
<포인터 쓰기>
int cubby=32;
int *pointer=&cubby;
NSLog(“%i”,*pointer);
//NSLog(“%i”,pointer); ㄴㄴ해
13년 5월 23일 목요일
XCODE 기본
Xcode는 애플 Mac OS X에서 사용하는 IDE(통합 개발 환경)
- iphone, ipad시뮬레이터도 있으예
13년 5월 23일 목요일
2장 기본 자료형과 연산자
13년 5월 23일 목요일
기본 자료형
• 자료형 지정->필요한 메모리 용량 & 변수가 표현하는 값의 범위
• ex) int -> short int, unsigned int, long int ...
• ex) double, float..
• char a[ ]= “hello” // NSString * a= @“hello” objective-c의 문자
배열
13년 5월 23일 목요일
기본 자료형
• BOOL 자료형
• YES(1) 또는 NO(0)
13년 5월 23일 목요일
기본 자료형
• TIP!
• 어떤 변수가 특정 자료형이 지원하는 범위를 벗어나면 그 변
수의 값은 무한대 또는 #INF00로 나타냄
13년 5월 23일 목요일
연산자
• +, -, ++, --, *, /, % (산술 연산자)
• <, >, ==, <=, >=, !=, &&, ||, ! (관계 및 논리 연산자)
• =, +=, -=, /=, *=, %= (대입 연산자)
13년 5월 23일 목요일
연산자
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
	 @autoreleasepool {
	 	 int a=0xF0; // 이진수 : 11110000
	 	 int b=0x0F; // 이진수 : 00001111
	 	
	 	 NSLog(@"~a : %x",~a);
	 	 NSLog(@"!a : %x",!a);
	 	
	 	 NSLog(@"~b : %x",~b);
	 	 NSLog(@"~b : %x",!b);
	 }
	
	 return 0;
}
~연산자와 !연산자 차이
~는 각 비트의 값을 확인!
!는 변수가 0인지 아닌지 확인!
13년 5월 23일 목요일
3장 제어문, 배열 및 구조체
13년 5월 23일 목요일
TRUE, FALSE, BOOL
typedef int bool;
#define FALSE 0
#defineTRUE (1)
BOOL 자료형은 0은 false, 1은 true를 나타내는 typedef
13년 5월 23일 목요일
반복문
• for(int i=0;i<5;i++) { }
• while (r<33) { }
• do { }while(r<33);
13년 5월 23일 목요일
반복문 써보긔
Info button이 기본적으로 삽입되어 있다!
13년 5월 23일 목요일
반복문 써보긔
13년 5월 23일 목요일
반복문 써보기
UIViewContorller 클래스의 수명 주기 관리 클래스 메소드들
- viewDidLoad : 뷰라는 템플릿을 처음 불러올 때 실행해야 할 동작 구성
- viewWillAppear : 뷰라는 템플릿에 보여질 내용을 구성
- viewDidAppear : 뷰 내용 보인 후 뷰에서 실행할 동작을 구성
- viewWillDisappear : 뷰 내용을 더 이상 사용 안할 때 실행하는 동작
- viewDidDisappear : 뷰 내용을 없을 때 실행하는 동작
-ViewDidUnload : 뷰라는 템플릿을 사용하지 않을 때 실행하는 동작
UIViewController::method
13년 5월 23일 목요일
반복문 써보긔
- (void)viewDidLoad
{
// 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄
[super viewDidLoad];
for (int i=0; i<5; i++)
{
NSLog(@"i's value:%i",i);
}
int i=5;
while (i++<8)
{
NSLog(@"i's value: %i",i);
}
i=3;
do
{
NSLog(@"i's value : %i",i);
i++;
} while (i<3);
}
app실행시 바로 뜸!
MainViewController.m
13년 5월 23일 목요일
반복문 써보긔
app실행시 바로 뜸!
- (void)viewDidLoad
{
// 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄
[super viewDidLoad];
// <Done> 버튼이 있는 있는 Flipside 뷰의 배경색을 지정
self.view.backgroundColor=[UIColor
viewFlipsideBackgroundColor];
int r=9;
//9가 할당된 r값을 출력하고 이를 3으로 나눈 나머지 값을 대입한 후
while 문의 논리적 조건을 확인하는 do문
do
{
NSLog(@"R's value:%i",r);
r/=3;
} while (r!=3);
}
MainViewController.m
13년 5월 23일 목요일
반복문 써보긔
- (void)viewDidAppear:(BOOL)animated
{
//부모 클래스에 애니메이션 효과를 넣은 viewDidAppear 실행한다는 메
시지 전송
[super viewDidAppear:animated];
//Flipside 창을 종료하지 않음
BOOL quit = NO;
for(int i=0;!quit;i++)
{
NSLog(@"an endless loop without break...%i",i);
quit=YES;
}
}
FlipsideViewController.m
*참고!*
<info>버튼은
FlipsideViewController.h의 -
(IBAction)showinfo:(id)sender
리턴값(void)
인풋값 (BOOL타입)
13년 5월 23일 목요일
조건문
• if (condition) { }
• if (condition) { } else if (condition) else { }
• switch (n) { case 1: break; case 2: break; default: break;}
13년 5월 23일 목요일
배열 및 구조체
• type array_name[ count ];
• array_name==&array_name[0];
• type array_name[ count1 ][ count2 ]; //다차원 배열
13년 5월 23일 목요일
배열 및 구조체
• struct 구조체이름 { ...; };
• struct hello { int hi; }; // 구조체 선언
• hello hi; // hello타입 hi 구조체 변수 선언
hi.hi=1; //hi구조체 내의 hi변수 접근
13년 5월 23일 목요일
4장 클래스, 객체 및 메시징
13년 5월 23일 목요일
객체 지향 프로그래밍 &
절차 지향 프로그래밍
• 1990년대 전 : 절차적 프로그래밍 style
• 1990년대 후 : Smalltalk와 C++ 등 객체 지향 프로그래밍 style
13년 5월 23일 목요일
절차 지향 프로그래밍
void main
케이크
만들기
재료섞기
재료모으기
오븐에 굽기
재료
케이크 반죽
데이터 흐름 단계 진행
1
2
3
4케이크
케이크
절차 데이터
13년 5월 23일 목요일
객체 지향 프로그래밍
<객체 지향 분석>
절차 지향 분석과 마찬가지로 작업 단위와 데이터 흐름을 검토
-> 작업 단위를 구성하는 객체를 먼저 검토(절차는 문제를 정의한 후 작업 단
위를 함수로 구현) -> CLASS로 단위별로 묶는 것!..... 일까요...
13년 5월 23일 목요일
객체 지향 프로그래밍
클래스와 객체
- 클래스는 객체를 나타내기 위한 template
- 객체는 클래스의 패턴을 실제로 구현
ex) 클래스 선언
typedef struct stockstruct
{
char *symbol;
char * name;
char * lastdate;
float price;
} stock;
ex) 객체 선언
stock astock; // stock의 인스턴스
stock mystock; // stock의 인스턴스
13년 5월 23일 목요일
OBJECTIVE-C 클래스
C 구조체>
클래스 이해에 도움
- real Class ㄴㄴ
Objective -c 구조체>
real 클래스는 데이터와 동작을 캡슐화
interface인 헤더 파일
implementation인 소스 파일
참고! 클래스 선언시 NSObject를 부모 클래스로 선언!
- 런타임 시스템 사용 위해서! -> NSObject에 포함
- 런타임 시스템은 메모리 관리와 메소드 탐색 등을 자동으로
해줌!
13년 5월 23일 목요일
OBJECTIVE-C 클래스
#import 헤더 파일 선언
@class 클래스 이름;
//@interface는 클래스 선언 시작 알림 - 헤더파일! 선언만 함. 구현이 아님
@interface 클래스 이름:부모 클래스 이름
{//인스턴스 변수는 기본적으로 @protected로 선언( C++로 private:)
	 <인스턴스 변수>
}
프로퍼티 지시자 (프로퍼티 속성) 프로퍼티 이름;
:
- (반환되는 자료형) 메서드 이름:매개변수
:
//@end는 지시자의 종료 알림
@end
#import <UIKit/UIKit.h>
#import "stockquote.h"
@interface StockQuoteWrapper: NSObject
{
	 NSMutableString * stockURL;
	 NSMutableData * recivedData;
	 NSURLConnection * theConnection;
	 NSURL * theURL;
	 NSURLRequest * theRequest;
}
@property (nomatomic, retain) NSURL * theURL;
-(void)buildURL: (NSString *)symbol;
-(void)doStockQuote: (NSDictionary *)dictionary;
@end
피피티 28쪽 ㄱㄱ싱
<선언부>
“stockquote.h”
“stockquote.m”
13년 5월 23일 목요일
OBJECTIVE-C 클래스
#import 헤더 파일 선언
@implementation 클래스 이름;
@synthesize 프로퍼티 이름;
-(반환되는 자료형)메서드 이름:매개변수
{
	 <메서드 동작 구현>
}
:
@end
#import "StockQuoteWrapper.h"
@implementation StockQuoteWrapper;
@synthesize theURL;
-(void)doStockQuote:(NSDictionary *)dictionary
{
	 -- 생략 --
}
-(void)buildURL:(NSString *)symbol
{
	 -- 생략 --
}
@end
피피티 28쪽 ㄱㄱ싱
<구현부>
“StockQuoteWrapper.m”
“StockQuoteWrapper.m”
13년 5월 23일 목요일
OBJECTIVE-C 클래스
<Bar.h>
#import <Foundation/Foundation.h>
@interface Bar: NSObject
{
	 int myAge;
	 NSString * myName;
}
-(void) myAge;
-(void) myName;
@end
<Bar.m>
#import "Bar.h"
@implementation Bar
-(void) myAge
{
	 myAge=1; // 인스턴스 변수(매개 변수)에 접근
	 NSLog(@"%i",myAge);
}
-(void) myName
{
	 myName=@"Hello";
	 NSLog(myName); //NSLog(@"%@",myName);
}
@end
example
13년 5월 23일 목요일
OBJECTIVE-C 클래스
#import "Bar.h"
@implementation Bar
myAge=1; // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능
myName=@”"hello" // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능
-(void) myAge
{
	 NSLog(@"%i",myAge);
}
-(void) myName
{
	 NSLog(myName); //NSLog(@"%@",myName);
}
@end
인스턴스 변수(멤버 변수)는 메서드(멤버 함수) 밖에서 접근 불가
example
13년 5월 23일 목요일
OBJECTIVE-C 클래스
#import <Foundation/Foundation.h>
#import "Bar.h"
int main(int argc, char *argv[]) {
	 @autoreleasepool //NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];[pool release];과 같다.
메모리 자동 관리
	 {
	 	 Bar * myAge = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myAge 객체 선언
	 	 Bar * myName = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myName 객체선언
	 	 [myAge myAge]; //myAge 객체에서 myAge 메서드(멤버 함수) 호출(메세징) -> C스타일 myAge->myAge()
	 	 [myName myName]; //myName 객체에서 myName 메서드(멤버 함수) 호출 (메세징) -> C스타일 myName->myName()
	 } //autoreleasepool 나오면서 동적 메모리 해제
	
	 return 0;
}
example
<참고>
@protected - 메서드에서 인스턴스 변수 선언 때, 해당 클래스 및 서브 클래스에 선언된 인스턴스 메
서드가 인스턴스 변수에 접근 가능
@public - 클래스 메서드 제외하고 어떤 메서드에서든 인스턴스 변수에 접근 가능(public:)
@package - 클래스를 구현하는 이미지 안에서 64비트 이미지를 대상으로 인스턴스 변수에 접근 가능
@private - 클래스에서 선언된 메서드만 인스턴스 변수에 접근가능. 서브 클래스의 메서드 접근 불가
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
So... 클래스 vs 인간
클래스==인간
객체==우리들(너, 나)
클래스가 가지는 데이터(인스턴스 변수==멤버 변수)==심장, 폐, 뼈, 근육 등
클래스가 가지는 행동(메서드==멤버 함수)==달리고, 뛰고, 걷고, 건너뛰기
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example
주식 구매 프로그램을 구현해 보자.jongbo
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example 1. 프로젝트를 만들어보자
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example 2. 클래스 추가
Model 폴더 추가
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example 2. 클래스 추가
TradingSystem.m만 추가해도
TradingSystem.h까지!
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example 2. 클래스 추가
클래스 파일 추가하시오
Stock.h & Stock.m
Storage.h & Storage.m
TradingSystem.h &TradingSystem.m
Purchase.h & Purchase.m
13년 5월 23일 목요일
객체 지향 프로그래밍 - 동작
example 2. 클래스 추가
<storage.h>#import <Foundation/Foundation.h>
@class Stock; //Stock 클래스 참조
@interface Storage : NSObject
{
}
@end
<TradingSystem.h>#import <Foundation/Foundation.h>
@class Stock; // Stock 클래스 참조
@interface TradingSystem : NSObject
{
}
@end
<Purchase.h>#import <Foundation/Foundation.h>
#import "Stock.h" // 앱 실행 시 Stock 클래스 사용
#import "Storage.h" // 앱 실행 시 Storage 클래스
사용
@class TradingSystem; // 앱 실행 시
TradingSystem 클래스 참조
@interface Purchase : NSObject
{
Stock * myStock; //Stock 클래스에서 참조할 수
있는 인스턴스 변수
Storage * myStorage; // Storage 클래스에서
참조할 수 있는 인스턴스 변수
TradingSystem * myTradingSystem; //
TradingSystem 클래스에서 참조할 수 있는 인스턴스 변수
}
@end
storage.h TradingSystem.hPurchase.h
(점선) 참조
(실선) 사용
Stock.h
<storage.m>#import "Storage.h"
#import "Stock.h"
@implementation Storage
@end
13년 5월 23일 목요일
참고...보자 (@CLASS VS #IMPORT)
@class는 단순 참조로서 @interface로 함수 선언부에서는 참조 가능하나
@implementation함수 구현부에서는 참조 불가
#import는 클래스 참조와 구현이 모두 가능하게 한다.
다음 페이지 <클래스 지시자>에서 자세히 알아보자.jungbo
@class와 #import 구분의 실질적 이유는 순환 종속성을 완화시키기 위하여!
13년 5월 23일 목요일
클래스 지시자
Foo.h Bar.h
myFoo myBar
두 클래스는 서로에 대해 알아야 함
모두 #import로 서로를 참조시 에러 발생! (무한 참조와 같아!)
Bar.h Foo.h
Foo.h Bar.h
... ...
#import #import
13년 5월 23일 목요일
클래스 지시자
Foo.h Bar.h
myFoo myBar
해결 방법! 헤더파일(선언부 @interface)에서는 @class로 참조
구동파일(구현부 @implementation)에서 #import로 삽입!
Foo.m
Bar.h
Foo.m
Foo.hBar.h Foo.h
#import #import@class @class
13년 5월 23일 목요일
클래스 지시자 - 전처리기와 지시자
지시자는 ‘@’
전처리기는 ‘#’
지시자는 컴파일러에게 지시해주는 것!
전처리기는 필요한 기능의 소스 코드를 컴파일 하기 전에 먼저
컴파일 해서 소스 코드에 붙여 넣기
13년 5월 23일 목요일
메서드와 메시징
- (NSMutableString *) buildHelloString: (NSString *)personName;
return type
클래스 메서드는 +,
인스턴스 메서드는 - 부호
method name
중요! 매개 변수를 가지는
메서드의 경우 이름 바로
뒤에 콜론을 사용하며 매
개변수를 가지지 않는 메
서드는 콜론을 생략
(buildHelloString: 이 이름!
- 콜론도 이름의 부분)
Argument type and name
메서드를 사용할 때 사용하는 매
개변수의 자료형과 이름
메서드 선언
13년 5월 23일 목요일
메서드와 메시징
[myHelloSayer buildHelloString:@“Bob” ]
Receiver : 객체 혹은 클래
스의 이름
실행되는 메서드
Parameter value : 매개변수의 값.
메서드의 이름은 콜론과 매개변수 값을 포함
메서드 실행
13년 5월 23일 목요일
클래스 메서드와 인스턴스 메서드
Class method == JAVA’s static method
클래스 메서드는 객체의 생성 여부와 관계 없이 내부에 선언한
메서드를 사용할 수 있는 것이 클래스 메서드!
인스턴스 메서드는 객체에 의존함. 클래스의 인스턴스 변수와
구현부에서 생성하는 어떤 클래스의 객체를 인스턴스 메서드
내에서 사용 가능
13년 5월 23일 목요일
클래스 메서드와 인스턴스 메서드
<main.m>#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[]) {
! NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
!
! // MyClass * objMyClass = [MyClass alloc] init];
!
! MyClass * objMyClass = [[MyClass alloc] initWithString:@"This is hello."];
! [objMyClass sayHelloInstance]; // 인스턴스 메서드 호출
! [MyClass sayHelloClass]; // 클래스 메서드 호출
! [objMyClass release]; // 객체 해제
!
! int retVal = UIApplicationMain(argc, argv, nil, nil);
! [pool release];
! return retVal;
}
<MyClass.h>#import <Foundation/Foundation.h>
@interface MyClass : NSObject {
! NSString * myName; // 인스턴스 변수 선언
}
-(void) sayHelloInstance; // 인스턴스 메서드 선언
+(void) sayHelloClass; // 클래스 메서드 선언
@end
<MyClass.m>#import "MyClass.h"
@implementation MyClass
- (id) initWithString: (NSString *) inputString { // 인스턴스 메서드 구현
! self = [super init];
! if(self != nil) {
! ! myName = inputString;
! ! [myName retain];
! }
! return self;
}
- (void) sayHelloInstance { // 인스턴스 메서드 구현
! NSLog(myName);
}
+ (void) sayHelloClass { // 클래스 메서드 구현
! // NSLog(myName);
! NSLog(@"hello");
}
- (void) dealloc { // 인스턴스 메서드 구현
! [myName release];
! [super dealloc];
}
@end
13년 5월 23일 목요일
클래스 메서드와 인스턴스 메서드
id 자료형
id 자료형은 Objective-C의 어떤 클래스나 객체든 저장할 수 있는 자료형
#import <Foundation/Foundation.h>
//중간 생략
int main(int argc, char *argv[])
{
	 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
	 Foo *myFoo = [[Foo alloc] init]; // Foo *myFoo=[Foo alloc]도 가능. init을 붙
이면 객체 초기화
	 Bar *myBar = [[Bar alloc] init];
	 id varData; // id형
	 //생략...
	 varData=myFoo;
	 [varData printData];
	 varData=myBar;
	 [varData printData];
	
	 [myFoo release];
	 [myBar release];
	 [pool drain];
	 return 0;
}
/****생략*****/
- (id) init //메모리 초기화시 사용하는 init 메서드
{
	 if([super init]==nil) //super는 부모클래스를 나타냄, nil은 NULL 인스턴스
	 	 return nil;
}
13년 5월 23일 목요일
객체 생성과 초기화
객체 생성! -> 메모리 공간 할당
JAVA style~
Foo myFoo = new Foo();
C++ style~
Foo *myFoo = new Foo();
Objective-C style!
Foo *myFoo=[[Foo alloc]init];//Foo *myFoo =[Foo alloc]; [myFoo init]; //객체 초기화
or
Foo *myFoo=[Foo alloc];
13년 5월 23일 목요일
객체 생성과 초기화
객체 초기화! -> 인스턴스 변수에 대한 초기값 할당
C++ style~
생성자! -> 클래스 이름 그대로!
Foo::Foo()
{
	 // 생략
}
Foo::Foo(int a,int b)
{
	 //생략
}
...
Objective-C style!
MyClass * objMyClass = [[MyClass alloc] initWithString:@"This
is hello."];
- (id) initWithString: (NSString *) inputString { // 인스턴스
메서드 구현
! self = [super init];
! if(self != nil) {
! ! myName = inputString;
! ! [myName retain];
! }
! return self;
}
13년 5월 23일 목요일
편의 초기화 메서드
convenience initializer method
initWith<수식어>
example>
#import <UIKit/UIKit.h>
#import "MyCalss.h"
int int main(int argc, char *argv[])
{
	 @autoreleasepool {
	 	 MyClass *objMyClass = [[MyClass alloc] initWithString:@"This is Hello"];
	 	 [objMyClass sayHelloInstance];
	 	 [objMyClass release];
	 	
	 	 int retVal = UIApplicationMain(argc,argv,nil,nil);
	 	 return retVal;
	 }
}
initWithString: 메서드는 self를 init메서도로 초기화 후
메서드의 매개변수에 해당하는 문자 값을 반환
13년 5월 23일 목요일
편의 초기화 메서드
convenience initializer method
<MyClass.h>
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
{
	 NSString *myName;
}
-(void) sayHelloInstacne;
+(void) sayHelloClass;
@end
<MyClass.h>
#import "MyClass.h"
@implementation MyClass
-(id)initWithString: (NSString *) inputString
{
	 self = [super init];
	 if(self != nil)
	 {
	 	 myName=inputString;
	 	 [myName retain];
	 }
	 return self;
}
-(void)sayHelloInstance
{
	 NSLog(myName);
}
+(void)sayHelloClass
{
	 //NSLog(@"hello");
}
-(void)dealloc
{
	 [myName release];
	 [super dealloc];
}
@end
13년 5월 23일 목요일
복수의 매개변수를 갖는 메서드
<C style>
doIt("Billy Cosby","Leonard Part 6",37);
<Objective-C style>
[myMultiple doIt:@"Billy Cosby" movieName:@"Leonard Part 6" timesSeen:37];
-----------------------------------------------------------------------------------------------
-(void)doIt:(NSString *)actorName movieName:(NSString *)value timesSeen;(int)times
{
	 NSLog(@"%@ is my favorite actor in the movie %@, I saw it %i times",actorName, value,times);
}
13년 5월 23일 목요일
13년 5월 23일 목요일

More Related Content

What's hot

파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장SeongHyun Ahn
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기sung ki choi
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초Circulus
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차HyunJoon Park
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3david nc
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차HyunJoon Park
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 

What's hot (20)

WTL 소개
WTL 소개WTL 소개
WTL 소개
 
Boost
BoostBoost
Boost
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
 
100511 boost&tips 최성기
100511 boost&tips 최성기100511 boost&tips 최성기
100511 boost&tips 최성기
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
Introduce php7
Introduce php7Introduce php7
Introduce php7
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
C++ Advanced 강의 4주차
 C++ Advanced 강의 4주차 C++ Advanced 강의 4주차
C++ Advanced 강의 4주차
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
C++11
C++11C++11
C++11
 
8 swift 중첩함수
8 swift 중첩함수8 swift 중첩함수
8 swift 중첩함수
 

Viewers also liked

Meteor에서 flow-router / react 사용기
Meteor에서 flow-router / react 사용기Meteor에서 flow-router / react 사용기
Meteor에서 flow-router / react 사용기Haydn Kim
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스WebFrameworks
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기NAVER D2
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시태현 김
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhereNAVER D2
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시태현 김
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesomeAndrew Hull
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practicesfloydophone
 

Viewers also liked (11)

Meteor에서 flow-router / react 사용기
Meteor에서 flow-router / react 사용기Meteor에서 flow-router / react 사용기
Meteor에서 flow-router / react 사용기
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기[D2 campus]착 하면 척! chak 서비스 개발기
[D2 campus]착 하면 척! chak 서비스 개발기
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhere
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practices
 
SlideShare 101
SlideShare 101SlideShare 101
SlideShare 101
 

Similar to Object C - RIP

Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++KyeongWon Koo
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약Tae wook kang
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
Multithread programming 20151206_서진택
Multithread programming 20151206_서진택Multithread programming 20151206_서진택
Multithread programming 20151206_서진택JinTaek Seo
 
초보 프로그래머
초보 프로그래머초보 프로그래머
초보 프로그래머Yong Heui Cho
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)YoungSu Son
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나Astin Choi
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowSang Jun Lee
 

Similar to Object C - RIP (20)

C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C#  혼합 멀티플랫폼 게임 아키텍처 설계
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
Objective-C에서의 OOP
Objective-C에서의 OOPObjective-C에서의 OOP
Objective-C에서의 OOP
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
Multithread programming 20151206_서진택
Multithread programming 20151206_서진택Multithread programming 20151206_서진택
Multithread programming 20151206_서진택
 
초보 프로그래머
초보 프로그래머초보 프로그래머
초보 프로그래머
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
Javascript
JavascriptJavascript
Javascript
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlow
 

More from Dong Heon Cho

Forward-Forward Algorithm
Forward-Forward AlgorithmForward-Forward Algorithm
Forward-Forward AlgorithmDong Heon Cho
 
Neural Radiance Field
Neural Radiance FieldNeural Radiance Field
Neural Radiance FieldDong Heon Cho
 
2020 > Self supervised learning
2020 > Self supervised learning2020 > Self supervised learning
2020 > Self supervised learningDong Heon Cho
 
All about that pooling
All about that poolingAll about that pooling
All about that poolingDong Heon Cho
 
Background elimination review
Background elimination reviewBackground elimination review
Background elimination reviewDong Heon Cho
 
Transparent Latent GAN
Transparent Latent GANTransparent Latent GAN
Transparent Latent GANDong Heon Cho
 
Multi object Deep reinforcement learning
Multi object Deep reinforcement learningMulti object Deep reinforcement learning
Multi object Deep reinforcement learningDong Heon Cho
 
Multi agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmasMulti agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmasDong Heon Cho
 
Hybrid reward architecture
Hybrid reward architectureHybrid reward architecture
Hybrid reward architectureDong Heon Cho
 
Use Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutesUse Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutesDong Heon Cho
 
AlexNet and so on...
AlexNet and so on...AlexNet and so on...
AlexNet and so on...Dong Heon Cho
 
Deep Learning AtoC with Image Perspective
Deep Learning AtoC with Image PerspectiveDeep Learning AtoC with Image Perspective
Deep Learning AtoC with Image PerspectiveDong Heon Cho
 
How can we train with few data
How can we train with few dataHow can we train with few data
How can we train with few dataDong Heon Cho
 
Domain adaptation gan
Domain adaptation ganDomain adaptation gan
Domain adaptation ganDong Heon Cho
 
Dense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other ModelsDense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other ModelsDong Heon Cho
 

More from Dong Heon Cho (20)

Forward-Forward Algorithm
Forward-Forward AlgorithmForward-Forward Algorithm
Forward-Forward Algorithm
 
What is Texture.pdf
What is Texture.pdfWhat is Texture.pdf
What is Texture.pdf
 
BADGE
BADGEBADGE
BADGE
 
Neural Radiance Field
Neural Radiance FieldNeural Radiance Field
Neural Radiance Field
 
2020 > Self supervised learning
2020 > Self supervised learning2020 > Self supervised learning
2020 > Self supervised learning
 
All about that pooling
All about that poolingAll about that pooling
All about that pooling
 
Background elimination review
Background elimination reviewBackground elimination review
Background elimination review
 
Transparent Latent GAN
Transparent Latent GANTransparent Latent GAN
Transparent Latent GAN
 
Image matting atoc
Image matting atocImage matting atoc
Image matting atoc
 
Multi object Deep reinforcement learning
Multi object Deep reinforcement learningMulti object Deep reinforcement learning
Multi object Deep reinforcement learning
 
Multi agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmasMulti agent reinforcement learning for sequential social dilemmas
Multi agent reinforcement learning for sequential social dilemmas
 
Multi agent System
Multi agent SystemMulti agent System
Multi agent System
 
Hybrid reward architecture
Hybrid reward architectureHybrid reward architecture
Hybrid reward architecture
 
Use Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutesUse Jupyter notebook guide in 5 minutes
Use Jupyter notebook guide in 5 minutes
 
AlexNet and so on...
AlexNet and so on...AlexNet and so on...
AlexNet and so on...
 
Deep Learning AtoC with Image Perspective
Deep Learning AtoC with Image PerspectiveDeep Learning AtoC with Image Perspective
Deep Learning AtoC with Image Perspective
 
LOL win prediction
LOL win predictionLOL win prediction
LOL win prediction
 
How can we train with few data
How can we train with few dataHow can we train with few data
How can we train with few data
 
Domain adaptation gan
Domain adaptation ganDomain adaptation gan
Domain adaptation gan
 
Dense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other ModelsDense sparse-dense training for dnn and Other Models
Dense sparse-dense training for dnn and Other Models
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 

Object C - RIP

  • 1. OBJECTIVE - C 1장 ~ 4장 13년 5월 23일 목요일
  • 2. XCODE 4.6.2 기준으로 작성 13년 5월 23일 목요일
  • 4. OBJECTIVE C를 하는 (개인적) 이유 • 아이폰 앺 개발 짜응! • ...포팅을 위하여! - 개발자라면 MAC, PC, LINUX 쯤은....??? • 언어는 언어일뿐... 애플 망하지 마라! 13년 5월 23일 목요일
  • 6. 그래도 나는 OBJECTIVE C를 한다 어헣허허허허허헣헣 13년 5월 23일 목요일
  • 7. OBJECTIVE C 차례 1장 iOS SDK 소개 및 프로그래밍 기본 2장 기본 자료형과 연산자 3장 제어문, 배열 및 구조체 4장 클래스, 객체 및 메시징 13년 5월 23일 목요일
  • 8. 1장 IOS SDK 소개 및 프로그래밍 기본 13년 5월 23일 목요일
  • 9. 1장 IOS SDK 소개 및 프로그래밍 기본 • 개발을 위한 iOS SDK 다운로드 • 개발자 문서 및 포럼 소개 • 기본개념 • Xcode 기본 13년 5월 23일 목요일
  • 13. IOS SDK 다운로드 http://developer.apple.com 개발 프로그램은 무료! 개발 프로그램 판매하고 싶으면 연99$ 연99$... (날강도여) 13년 5월 23일 목요일
  • 14. IOS SDK 다운로드 • 참고 사이트라해 • developer.apple.com/library/ios/navigation/index.html(개발자 문서) • 개발자 문서에서 아이폰 앱 개발 필요한 모든 내용 찾을 수 있다해 - 사실 개발자 문서만 보면 다------ 된다해 13년 5월 23일 목요일
  • 15. 개발자 포럼 Apple Developer Forums http://devforums.apple.com/community/iOS - 돈 내야 됨+양키꺼 http://cafe.naver.com/mcbugi - 국내 http://www.iphoneos.co.kr - 국내 13년 5월 23일 목요일
  • 16. 프로그래밍 기본 개념 • Objective - C의 기반이 되는 프로그래밍 언어는 C 13년 5월 23일 목요일
  • 17. 프로그래밍 기본 개념 #include <stdio.h> int main(void) { printf(“Hello Worldn”); return 0; } 13년 5월 23일 목요일
  • 18. 프로그래밍 기본 개념 #include <stdio.h> int main(void) { int c=10; // 변수 printf(“Hello Worldn”); return 0; } 13년 5월 23일 목요일
  • 19. 프로그래밍 기본 개념 #include <stdio.h> int main(void) { int c=10; // 변수 printf(“Hello Worldn”); return 0; } void hello(void) // 함수 { printf(“hellon”); } 13년 5월 23일 목요일
  • 20. 프로그래밍 기본 개념 13년 5월 23일 목요일
  • 21. 프로그래밍 기본 개념 13년 5월 23일 목요일
  • 22. 프로그래밍 기본 개념 체크 해제 13년 5월 23일 목요일
  • 23. 프로그래밍 기본 개념 13년 5월 23일 목요일
  • 24. 프로그래밍 기본 개념 13년 5월 23일 목요일
  • 25. 프로그래밍 기본 개념 // // main.m // HelloWorld // // Created by cho dong heon on 13. 4. 30.. // Copyright (c) 2013년 cho dong heon. All rights reserved. // #import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ! // HelloWorld의 실행 과정을 디버그 콘솔에 기록(Log hello world to the debugger console) NSLog(@"Hello World"); //Hello World 문자 출력 ! int retVal = UIApplicationMain(argc, argv, nil, nil); ! [pool release]; ! return retVal; // 보통은 0, 0이 아니면 에러 } 13년 5월 23일 목요일
  • 26. 프로그래밍 기본 개념 NSLog 함수는 printf 함수처럼 문자열 출력 - printf는 c의 문자열, NSString은 NSString 클래스를 참조하는 객체 의 문자열 출력(자세한 것은 나중에) - NSLog는 디버거 콘솔에 문자열 출력 때 사용(아이폰 화면 ㄴㄴ) 13년 5월 23일 목요일
  • 27. 프로그래밍 기본 개념 #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];//메모리 참조 수 계산 방식 ARC(Automatic Reference Count) [pool release]; @autoreleasepool //메모리 참조 수 계산 방식 ARC(Automatic Reference Count) { NSLog(@"Hello World!"); // 출력 NSLog(@"int : %i",10); // 정수 출력 NSLog(@"float : %.2f",0.1); // float 출력 NSLog(@"double : %f",3.14258); // double 출력 NSLog(@"c문자열 : %s","c hello"); // c문자열 출력 char a[10]=”hello” NSLog(@"NSString 오브젝트 문자열 : %@",@"objective hello"); // NSString 오브젝트 문자열 출력 NSString *string=@”hello” } printf("Hi! This is printf!"); return 0; } 13년 5월 23일 목요일
  • 28. 프로그래밍 기본 개념 헤더 파일은 함수 혹은 메서드 원형들과 변수 선언을 포함 - 확장자 ‘.h’ 소스 파일은 함수 혹은 메서드와 변수를 구현 - 확장자 ‘.m’ 자세한 것은... 4장에서. 13년 5월 23일 목요일
  • 29. 전처리기 지시자와 컴파일러 지시자 지시자? 13년 5월 23일 목요일
  • 30. 전처리기 지시자와 컴파일러 지시자 지시자! #include #import #define etc.. 13년 5월 23일 목요일
  • 31. 전처리기 지시자와 컴파일러 지시자 전처리기 지시자는 명령어 ‘#‘키워드로 시작! - #import, #define 컴파일러 지시자는 명령어 ‘@‘키워드로 시작! - @interface, @implementation 13년 5월 23일 목요일
  • 32. 전처리기 지시자와 컴파일러 지시자 Objective C는 #include ㄴㄴ #import ! 13년 5월 23일 목요일
  • 33. 전처리기 지시자와 컴파일러 지시자 @interface, @implementation -> 컴파일러 지시자 - 나중에 이해하자... #import <Foundation/Foundation.h> #define GREETING @"Dawg" #define AGE 40 @interface SayHello : NSObject { NSString *test; } - (void) sayHello: (NSString *) name; @end <SayHello.h> #import "SayHello.h" @implementation SayHello - (void) sayHello: (NSString *) name // 함수 정의-name을 argument로 받는 함수 { NSLog(@"Hello %@, %@. Your are %i years old.",name,GREETING,AGE); } @end <SayHello.m> 13년 5월 23일 목요일
  • 34. 주석 & 포인터 <주석 쓰기> // 한줄짜리 /* 여러 줄 짜리*/ <포인터 쓰기> int cubby=32; int *pointer=&cubby; NSLog(“%i”,*pointer); //NSLog(“%i”,pointer); ㄴㄴ해 13년 5월 23일 목요일
  • 35. XCODE 기본 Xcode는 애플 Mac OS X에서 사용하는 IDE(통합 개발 환경) - iphone, ipad시뮬레이터도 있으예 13년 5월 23일 목요일
  • 36. 2장 기본 자료형과 연산자 13년 5월 23일 목요일
  • 37. 기본 자료형 • 자료형 지정->필요한 메모리 용량 & 변수가 표현하는 값의 범위 • ex) int -> short int, unsigned int, long int ... • ex) double, float.. • char a[ ]= “hello” // NSString * a= @“hello” objective-c의 문자 배열 13년 5월 23일 목요일
  • 38. 기본 자료형 • BOOL 자료형 • YES(1) 또는 NO(0) 13년 5월 23일 목요일
  • 39. 기본 자료형 • TIP! • 어떤 변수가 특정 자료형이 지원하는 범위를 벗어나면 그 변 수의 값은 무한대 또는 #INF00로 나타냄 13년 5월 23일 목요일
  • 40. 연산자 • +, -, ++, --, *, /, % (산술 연산자) • <, >, ==, <=, >=, !=, &&, ||, ! (관계 및 논리 연산자) • =, +=, -=, /=, *=, %= (대입 연산자) 13년 5월 23일 목요일
  • 41. 연산자 #import <Foundation/Foundation.h> int main(int argc, char *argv[]) { @autoreleasepool { int a=0xF0; // 이진수 : 11110000 int b=0x0F; // 이진수 : 00001111 NSLog(@"~a : %x",~a); NSLog(@"!a : %x",!a); NSLog(@"~b : %x",~b); NSLog(@"~b : %x",!b); } return 0; } ~연산자와 !연산자 차이 ~는 각 비트의 값을 확인! !는 변수가 0인지 아닌지 확인! 13년 5월 23일 목요일
  • 42. 3장 제어문, 배열 및 구조체 13년 5월 23일 목요일
  • 43. TRUE, FALSE, BOOL typedef int bool; #define FALSE 0 #defineTRUE (1) BOOL 자료형은 0은 false, 1은 true를 나타내는 typedef 13년 5월 23일 목요일
  • 44. 반복문 • for(int i=0;i<5;i++) { } • while (r<33) { } • do { }while(r<33); 13년 5월 23일 목요일
  • 45. 반복문 써보긔 Info button이 기본적으로 삽입되어 있다! 13년 5월 23일 목요일
  • 47. 반복문 써보기 UIViewContorller 클래스의 수명 주기 관리 클래스 메소드들 - viewDidLoad : 뷰라는 템플릿을 처음 불러올 때 실행해야 할 동작 구성 - viewWillAppear : 뷰라는 템플릿에 보여질 내용을 구성 - viewDidAppear : 뷰 내용 보인 후 뷰에서 실행할 동작을 구성 - viewWillDisappear : 뷰 내용을 더 이상 사용 안할 때 실행하는 동작 - viewDidDisappear : 뷰 내용을 없을 때 실행하는 동작 -ViewDidUnload : 뷰라는 템플릿을 사용하지 않을 때 실행하는 동작 UIViewController::method 13년 5월 23일 목요일
  • 48. 반복문 써보긔 - (void)viewDidLoad { // 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄 [super viewDidLoad]; for (int i=0; i<5; i++) { NSLog(@"i's value:%i",i); } int i=5; while (i++<8) { NSLog(@"i's value: %i",i); } i=3; do { NSLog(@"i's value : %i",i); i++; } while (i<3); } app실행시 바로 뜸! MainViewController.m 13년 5월 23일 목요일
  • 49. 반복문 써보긔 app실행시 바로 뜸! - (void)viewDidLoad { // 부모 클래스에 veiwDidLoad 메서드를 실행한다는 메시지를 보냄 [super viewDidLoad]; // <Done> 버튼이 있는 있는 Flipside 뷰의 배경색을 지정 self.view.backgroundColor=[UIColor viewFlipsideBackgroundColor]; int r=9; //9가 할당된 r값을 출력하고 이를 3으로 나눈 나머지 값을 대입한 후 while 문의 논리적 조건을 확인하는 do문 do { NSLog(@"R's value:%i",r); r/=3; } while (r!=3); } MainViewController.m 13년 5월 23일 목요일
  • 50. 반복문 써보긔 - (void)viewDidAppear:(BOOL)animated { //부모 클래스에 애니메이션 효과를 넣은 viewDidAppear 실행한다는 메 시지 전송 [super viewDidAppear:animated]; //Flipside 창을 종료하지 않음 BOOL quit = NO; for(int i=0;!quit;i++) { NSLog(@"an endless loop without break...%i",i); quit=YES; } } FlipsideViewController.m *참고!* <info>버튼은 FlipsideViewController.h의 - (IBAction)showinfo:(id)sender 리턴값(void) 인풋값 (BOOL타입) 13년 5월 23일 목요일
  • 51. 조건문 • if (condition) { } • if (condition) { } else if (condition) else { } • switch (n) { case 1: break; case 2: break; default: break;} 13년 5월 23일 목요일
  • 52. 배열 및 구조체 • type array_name[ count ]; • array_name==&array_name[0]; • type array_name[ count1 ][ count2 ]; //다차원 배열 13년 5월 23일 목요일
  • 53. 배열 및 구조체 • struct 구조체이름 { ...; }; • struct hello { int hi; }; // 구조체 선언 • hello hi; // hello타입 hi 구조체 변수 선언 hi.hi=1; //hi구조체 내의 hi변수 접근 13년 5월 23일 목요일
  • 54. 4장 클래스, 객체 및 메시징 13년 5월 23일 목요일
  • 55. 객체 지향 프로그래밍 & 절차 지향 프로그래밍 • 1990년대 전 : 절차적 프로그래밍 style • 1990년대 후 : Smalltalk와 C++ 등 객체 지향 프로그래밍 style 13년 5월 23일 목요일
  • 56. 절차 지향 프로그래밍 void main 케이크 만들기 재료섞기 재료모으기 오븐에 굽기 재료 케이크 반죽 데이터 흐름 단계 진행 1 2 3 4케이크 케이크 절차 데이터 13년 5월 23일 목요일
  • 57. 객체 지향 프로그래밍 <객체 지향 분석> 절차 지향 분석과 마찬가지로 작업 단위와 데이터 흐름을 검토 -> 작업 단위를 구성하는 객체를 먼저 검토(절차는 문제를 정의한 후 작업 단 위를 함수로 구현) -> CLASS로 단위별로 묶는 것!..... 일까요... 13년 5월 23일 목요일
  • 58. 객체 지향 프로그래밍 클래스와 객체 - 클래스는 객체를 나타내기 위한 template - 객체는 클래스의 패턴을 실제로 구현 ex) 클래스 선언 typedef struct stockstruct { char *symbol; char * name; char * lastdate; float price; } stock; ex) 객체 선언 stock astock; // stock의 인스턴스 stock mystock; // stock의 인스턴스 13년 5월 23일 목요일
  • 59. OBJECTIVE-C 클래스 C 구조체> 클래스 이해에 도움 - real Class ㄴㄴ Objective -c 구조체> real 클래스는 데이터와 동작을 캡슐화 interface인 헤더 파일 implementation인 소스 파일 참고! 클래스 선언시 NSObject를 부모 클래스로 선언! - 런타임 시스템 사용 위해서! -> NSObject에 포함 - 런타임 시스템은 메모리 관리와 메소드 탐색 등을 자동으로 해줌! 13년 5월 23일 목요일
  • 60. OBJECTIVE-C 클래스 #import 헤더 파일 선언 @class 클래스 이름; //@interface는 클래스 선언 시작 알림 - 헤더파일! 선언만 함. 구현이 아님 @interface 클래스 이름:부모 클래스 이름 {//인스턴스 변수는 기본적으로 @protected로 선언( C++로 private:) <인스턴스 변수> } 프로퍼티 지시자 (프로퍼티 속성) 프로퍼티 이름; : - (반환되는 자료형) 메서드 이름:매개변수 : //@end는 지시자의 종료 알림 @end #import <UIKit/UIKit.h> #import "stockquote.h" @interface StockQuoteWrapper: NSObject { NSMutableString * stockURL; NSMutableData * recivedData; NSURLConnection * theConnection; NSURL * theURL; NSURLRequest * theRequest; } @property (nomatomic, retain) NSURL * theURL; -(void)buildURL: (NSString *)symbol; -(void)doStockQuote: (NSDictionary *)dictionary; @end 피피티 28쪽 ㄱㄱ싱 <선언부> “stockquote.h” “stockquote.m” 13년 5월 23일 목요일
  • 61. OBJECTIVE-C 클래스 #import 헤더 파일 선언 @implementation 클래스 이름; @synthesize 프로퍼티 이름; -(반환되는 자료형)메서드 이름:매개변수 { <메서드 동작 구현> } : @end #import "StockQuoteWrapper.h" @implementation StockQuoteWrapper; @synthesize theURL; -(void)doStockQuote:(NSDictionary *)dictionary { -- 생략 -- } -(void)buildURL:(NSString *)symbol { -- 생략 -- } @end 피피티 28쪽 ㄱㄱ싱 <구현부> “StockQuoteWrapper.m” “StockQuoteWrapper.m” 13년 5월 23일 목요일
  • 62. OBJECTIVE-C 클래스 <Bar.h> #import <Foundation/Foundation.h> @interface Bar: NSObject { int myAge; NSString * myName; } -(void) myAge; -(void) myName; @end <Bar.m> #import "Bar.h" @implementation Bar -(void) myAge { myAge=1; // 인스턴스 변수(매개 변수)에 접근 NSLog(@"%i",myAge); } -(void) myName { myName=@"Hello"; NSLog(myName); //NSLog(@"%@",myName); } @end example 13년 5월 23일 목요일
  • 63. OBJECTIVE-C 클래스 #import "Bar.h" @implementation Bar myAge=1; // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능 myName=@”"hello" // error! 인스턴스 변수(멤버 변수)는 메서드 안에서만 접근 가능 -(void) myAge { NSLog(@"%i",myAge); } -(void) myName { NSLog(myName); //NSLog(@"%@",myName); } @end 인스턴스 변수(멤버 변수)는 메서드(멤버 함수) 밖에서 접근 불가 example 13년 5월 23일 목요일
  • 64. OBJECTIVE-C 클래스 #import <Foundation/Foundation.h> #import "Bar.h" int main(int argc, char *argv[]) { @autoreleasepool //NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];[pool release];과 같다. 메모리 자동 관리 { Bar * myAge = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myAge 객체 선언 Bar * myName = [[Bar alloc] init]; //동적 메모리 할당하며 Bar타입 myName 객체선언 [myAge myAge]; //myAge 객체에서 myAge 메서드(멤버 함수) 호출(메세징) -> C스타일 myAge->myAge() [myName myName]; //myName 객체에서 myName 메서드(멤버 함수) 호출 (메세징) -> C스타일 myName->myName() } //autoreleasepool 나오면서 동적 메모리 해제 return 0; } example <참고> @protected - 메서드에서 인스턴스 변수 선언 때, 해당 클래스 및 서브 클래스에 선언된 인스턴스 메 서드가 인스턴스 변수에 접근 가능 @public - 클래스 메서드 제외하고 어떤 메서드에서든 인스턴스 변수에 접근 가능(public:) @package - 클래스를 구현하는 이미지 안에서 64비트 이미지를 대상으로 인스턴스 변수에 접근 가능 @private - 클래스에서 선언된 메서드만 인스턴스 변수에 접근가능. 서브 클래스의 메서드 접근 불가 13년 5월 23일 목요일
  • 65. 객체 지향 프로그래밍 - 동작 So... 클래스 vs 인간 클래스==인간 객체==우리들(너, 나) 클래스가 가지는 데이터(인스턴스 변수==멤버 변수)==심장, 폐, 뼈, 근육 등 클래스가 가지는 행동(메서드==멤버 함수)==달리고, 뛰고, 걷고, 건너뛰기 13년 5월 23일 목요일
  • 66. 객체 지향 프로그래밍 - 동작 example 주식 구매 프로그램을 구현해 보자.jongbo 13년 5월 23일 목요일
  • 67. 객체 지향 프로그래밍 - 동작 example 1. 프로젝트를 만들어보자 13년 5월 23일 목요일
  • 68. 객체 지향 프로그래밍 - 동작 example 2. 클래스 추가 Model 폴더 추가 13년 5월 23일 목요일
  • 69. 객체 지향 프로그래밍 - 동작 example 2. 클래스 추가 TradingSystem.m만 추가해도 TradingSystem.h까지! 13년 5월 23일 목요일
  • 70. 객체 지향 프로그래밍 - 동작 example 2. 클래스 추가 클래스 파일 추가하시오 Stock.h & Stock.m Storage.h & Storage.m TradingSystem.h &TradingSystem.m Purchase.h & Purchase.m 13년 5월 23일 목요일
  • 71. 객체 지향 프로그래밍 - 동작 example 2. 클래스 추가 <storage.h>#import <Foundation/Foundation.h> @class Stock; //Stock 클래스 참조 @interface Storage : NSObject { } @end <TradingSystem.h>#import <Foundation/Foundation.h> @class Stock; // Stock 클래스 참조 @interface TradingSystem : NSObject { } @end <Purchase.h>#import <Foundation/Foundation.h> #import "Stock.h" // 앱 실행 시 Stock 클래스 사용 #import "Storage.h" // 앱 실행 시 Storage 클래스 사용 @class TradingSystem; // 앱 실행 시 TradingSystem 클래스 참조 @interface Purchase : NSObject { Stock * myStock; //Stock 클래스에서 참조할 수 있는 인스턴스 변수 Storage * myStorage; // Storage 클래스에서 참조할 수 있는 인스턴스 변수 TradingSystem * myTradingSystem; // TradingSystem 클래스에서 참조할 수 있는 인스턴스 변수 } @end storage.h TradingSystem.hPurchase.h (점선) 참조 (실선) 사용 Stock.h <storage.m>#import "Storage.h" #import "Stock.h" @implementation Storage @end 13년 5월 23일 목요일
  • 72. 참고...보자 (@CLASS VS #IMPORT) @class는 단순 참조로서 @interface로 함수 선언부에서는 참조 가능하나 @implementation함수 구현부에서는 참조 불가 #import는 클래스 참조와 구현이 모두 가능하게 한다. 다음 페이지 <클래스 지시자>에서 자세히 알아보자.jungbo @class와 #import 구분의 실질적 이유는 순환 종속성을 완화시키기 위하여! 13년 5월 23일 목요일
  • 73. 클래스 지시자 Foo.h Bar.h myFoo myBar 두 클래스는 서로에 대해 알아야 함 모두 #import로 서로를 참조시 에러 발생! (무한 참조와 같아!) Bar.h Foo.h Foo.h Bar.h ... ... #import #import 13년 5월 23일 목요일
  • 74. 클래스 지시자 Foo.h Bar.h myFoo myBar 해결 방법! 헤더파일(선언부 @interface)에서는 @class로 참조 구동파일(구현부 @implementation)에서 #import로 삽입! Foo.m Bar.h Foo.m Foo.hBar.h Foo.h #import #import@class @class 13년 5월 23일 목요일
  • 75. 클래스 지시자 - 전처리기와 지시자 지시자는 ‘@’ 전처리기는 ‘#’ 지시자는 컴파일러에게 지시해주는 것! 전처리기는 필요한 기능의 소스 코드를 컴파일 하기 전에 먼저 컴파일 해서 소스 코드에 붙여 넣기 13년 5월 23일 목요일
  • 76. 메서드와 메시징 - (NSMutableString *) buildHelloString: (NSString *)personName; return type 클래스 메서드는 +, 인스턴스 메서드는 - 부호 method name 중요! 매개 변수를 가지는 메서드의 경우 이름 바로 뒤에 콜론을 사용하며 매 개변수를 가지지 않는 메 서드는 콜론을 생략 (buildHelloString: 이 이름! - 콜론도 이름의 부분) Argument type and name 메서드를 사용할 때 사용하는 매 개변수의 자료형과 이름 메서드 선언 13년 5월 23일 목요일
  • 77. 메서드와 메시징 [myHelloSayer buildHelloString:@“Bob” ] Receiver : 객체 혹은 클래 스의 이름 실행되는 메서드 Parameter value : 매개변수의 값. 메서드의 이름은 콜론과 매개변수 값을 포함 메서드 실행 13년 5월 23일 목요일
  • 78. 클래스 메서드와 인스턴스 메서드 Class method == JAVA’s static method 클래스 메서드는 객체의 생성 여부와 관계 없이 내부에 선언한 메서드를 사용할 수 있는 것이 클래스 메서드! 인스턴스 메서드는 객체에 의존함. 클래스의 인스턴스 변수와 구현부에서 생성하는 어떤 클래스의 객체를 인스턴스 메서드 내에서 사용 가능 13년 5월 23일 목요일
  • 79. 클래스 메서드와 인스턴스 메서드 <main.m>#import <UIKit/UIKit.h> #import "MyClass.h" int main(int argc, char *argv[]) { ! NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ! ! // MyClass * objMyClass = [MyClass alloc] init]; ! ! MyClass * objMyClass = [[MyClass alloc] initWithString:@"This is hello."]; ! [objMyClass sayHelloInstance]; // 인스턴스 메서드 호출 ! [MyClass sayHelloClass]; // 클래스 메서드 호출 ! [objMyClass release]; // 객체 해제 ! ! int retVal = UIApplicationMain(argc, argv, nil, nil); ! [pool release]; ! return retVal; } <MyClass.h>#import <Foundation/Foundation.h> @interface MyClass : NSObject { ! NSString * myName; // 인스턴스 변수 선언 } -(void) sayHelloInstance; // 인스턴스 메서드 선언 +(void) sayHelloClass; // 클래스 메서드 선언 @end <MyClass.m>#import "MyClass.h" @implementation MyClass - (id) initWithString: (NSString *) inputString { // 인스턴스 메서드 구현 ! self = [super init]; ! if(self != nil) { ! ! myName = inputString; ! ! [myName retain]; ! } ! return self; } - (void) sayHelloInstance { // 인스턴스 메서드 구현 ! NSLog(myName); } + (void) sayHelloClass { // 클래스 메서드 구현 ! // NSLog(myName); ! NSLog(@"hello"); } - (void) dealloc { // 인스턴스 메서드 구현 ! [myName release]; ! [super dealloc]; } @end 13년 5월 23일 목요일
  • 80. 클래스 메서드와 인스턴스 메서드 id 자료형 id 자료형은 Objective-C의 어떤 클래스나 객체든 저장할 수 있는 자료형 #import <Foundation/Foundation.h> //중간 생략 int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; Foo *myFoo = [[Foo alloc] init]; // Foo *myFoo=[Foo alloc]도 가능. init을 붙 이면 객체 초기화 Bar *myBar = [[Bar alloc] init]; id varData; // id형 //생략... varData=myFoo; [varData printData]; varData=myBar; [varData printData]; [myFoo release]; [myBar release]; [pool drain]; return 0; } /****생략*****/ - (id) init //메모리 초기화시 사용하는 init 메서드 { if([super init]==nil) //super는 부모클래스를 나타냄, nil은 NULL 인스턴스 return nil; } 13년 5월 23일 목요일
  • 81. 객체 생성과 초기화 객체 생성! -> 메모리 공간 할당 JAVA style~ Foo myFoo = new Foo(); C++ style~ Foo *myFoo = new Foo(); Objective-C style! Foo *myFoo=[[Foo alloc]init];//Foo *myFoo =[Foo alloc]; [myFoo init]; //객체 초기화 or Foo *myFoo=[Foo alloc]; 13년 5월 23일 목요일
  • 82. 객체 생성과 초기화 객체 초기화! -> 인스턴스 변수에 대한 초기값 할당 C++ style~ 생성자! -> 클래스 이름 그대로! Foo::Foo() { // 생략 } Foo::Foo(int a,int b) { //생략 } ... Objective-C style! MyClass * objMyClass = [[MyClass alloc] initWithString:@"This is hello."]; - (id) initWithString: (NSString *) inputString { // 인스턴스 메서드 구현 ! self = [super init]; ! if(self != nil) { ! ! myName = inputString; ! ! [myName retain]; ! } ! return self; } 13년 5월 23일 목요일
  • 83. 편의 초기화 메서드 convenience initializer method initWith<수식어> example> #import <UIKit/UIKit.h> #import "MyCalss.h" int int main(int argc, char *argv[]) { @autoreleasepool { MyClass *objMyClass = [[MyClass alloc] initWithString:@"This is Hello"]; [objMyClass sayHelloInstance]; [objMyClass release]; int retVal = UIApplicationMain(argc,argv,nil,nil); return retVal; } } initWithString: 메서드는 self를 init메서도로 초기화 후 메서드의 매개변수에 해당하는 문자 값을 반환 13년 5월 23일 목요일
  • 84. 편의 초기화 메서드 convenience initializer method <MyClass.h> #import <Foundation/Foundation.h> @interface MyClass : NSObject { NSString *myName; } -(void) sayHelloInstacne; +(void) sayHelloClass; @end <MyClass.h> #import "MyClass.h" @implementation MyClass -(id)initWithString: (NSString *) inputString { self = [super init]; if(self != nil) { myName=inputString; [myName retain]; } return self; } -(void)sayHelloInstance { NSLog(myName); } +(void)sayHelloClass { //NSLog(@"hello"); } -(void)dealloc { [myName release]; [super dealloc]; } @end 13년 5월 23일 목요일
  • 85. 복수의 매개변수를 갖는 메서드 <C style> doIt("Billy Cosby","Leonard Part 6",37); <Objective-C style> [myMultiple doIt:@"Billy Cosby" movieName:@"Leonard Part 6" timesSeen:37]; ----------------------------------------------------------------------------------------------- -(void)doIt:(NSString *)actorName movieName:(NSString *)value timesSeen;(int)times { NSLog(@"%@ is my favorite actor in the movie %@, I saw it %i times",actorName, value,times); } 13년 5월 23일 목요일
  • 86. 13년 5월 23일 목요일