[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
boost라이브러리 중에서 가장 많이 사용하는 기능인 BOOST_FOREACH()와 shared_ptr의 내부 구조를 분석합니다. 그리고 boost의 내부 구현에 사용된 이 기능을 프로그래밍에 응용하는 방법을 제시합니다.
* BOOST_FOREACH 구조 분석 및 응용
* shared_ptr 구조 분석 및 응용
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
C++11을 시작으로 모던 C++이 도입된 지도 어느새 6년이라는 시간이 흘렀습니다. 올해는 C++17 표준이 도입될 예정입니다. 그만큼 많이 개선되고 새로운 기능들이 많이 도입되었기에 실무에서 사용해보고 싶은 경우도 많습니다. 하지만 이미 서비스 중이라 기존 프로젝트를 새 버전의 VS로 마이그레이션하기 어려운 프로젝트가 많습니다. 그렇다고 아예 불가능한 일도 아닙니다. 이번 세미나에서는 기존 프로젝트를 새 버전의 VS로 마이그레이션하면서 발생했던 문제와 마이그레이션 이후 모던 C++을 사용하면서 발생했던 문제, 그리고 해결법을 설명하고자 합니다. 또한 새 버전의 VS에 생긴 유용한 기능들도 함께 알려드립니다.
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
C++11을 시작으로 모던 C++이 도입된 지도 어느새 6년이라는 시간이 흘렀습니다. 올해는 C++17 표준이 도입될 예정입니다. 그만큼 많이 개선되고 새로운 기능들이 많이 도입되었기에 실무에서 사용해보고 싶은 경우도 많습니다. 하지만 이미 서비스 중이라 기존 프로젝트를 새 버전의 VS로 마이그레이션하기 어려운 프로젝트가 많습니다. 그렇다고 아예 불가능한 일도 아닙니다. 이번 세미나에서는 기존 프로젝트를 새 버전의 VS로 마이그레이션하면서 발생했던 문제와 마이그레이션 이후 모던 C++을 사용하면서 발생했던 문제, 그리고 해결법을 설명하고자 합니다. 또한 새 버전의 VS에 생긴 유용한 기능들도 함께 알려드립니다.
C++은 10년 만에 C++11/14를 발표하면서 '모던 C++'이라는 이름으로 발전했습니다. 그만큼 새로운 기능들이 많이 추가되었습니다. 그리고 2017년, C++은 C++17이라는 이름으로 또 한 번의 발전을 준비하고 있습니다. 3년 주기로 빠르게 변화하는 모던 C++에 대비하기 위해, C++17에 추가될 주요 기능들을 살펴보고자 합니다.
이 발표는 이전에 발표했던 내용에서 일부 사례 추가 및 최신 내용으로 갱신한 버전입니다.
UNIST 프로그래밍 동아리 HeXA (http://www.hexa.pro) 내부 React 강의 프레젠테이션 자료의 공개버전
내용
- HTML, Javascript 속성 튜토리얼
- React 소개
- Node.js 설치
https://github.com/kimxogus/react-tutorial
React is a different way to write JavaScript apps. When it was introduced at JSConf US in May, the audience was shocked by some of its design principles. One sarcastic tweet from an audience member ended up describing React’s philosophy quite accurately: https://twitter.com/cowboy/status/339858717451362304
We’re trying to push the limits of what’s possible on the web with React. My talk will start with a brief introduction to the framework, and then dive into three controversial topics: Throwing out the notion of templates and building views with JavaScript, “re-rendering” your entire application when your data changes, and a lightweight implementation of the DOM and events.
The SlideShare 101 is a quick start guide if you want to walk through the main features that the platform offers. This will keep getting updated as new features are launched.
The SlideShare 101 replaces the earlier "SlideShare Quick Tour".
[KGC2014] 두 마리 토끼를 잡기 위한 C++ - C# 혼합 멀티플랫폼 게임 아키텍처 설계Sungkyun Kim
이미 많은 개발자들이 C#의 장점을 누리고 있으나, 본 PT에서는 높은 성능과 생산성을 동시에 달성하기 위해 C/C++로 개발된 native 게임 코드에 스크립트 언어로서 C#을 통합 할 수 있는 방법을 제시한다. 이를 위해 오픈소스 .Net 프레임웍인 Mono의 사용방법과 모바일 플랫폼에서의 특이사항들을 자세히 설명한다.
또한, C/C++언어에 C#을 비롯한 다양한 스크립트 언어를 효율적으로 혼합하여 게임을 구현할 수 있는 아키텍처를 제시한다. clang과 reflection을 이용하여 서로 다른 언어 간 인터페이스 노출을 자동화하고, 게임 내 오브젝트의 생명주기를 자동으로 관리할 수 있는 기법에 대해 설명한다.
기본적인 프로젝트 스캐폴딩 도구로 빠른개발을 위한 스프링 프레임워크 서브 프로젝트 중에 하나인 Spring Boot를 사용하겠습니다. 스프링 부트는 Convention over Configuration개념을 적용하여 개발자가 처리해야 하는 반복적인 성격의 설정작업을 대신 수행하여 개발자의 수고를 덜어주는 기술입니다.
최근 개발 초기단계에서부터 코드작성을 하지는 않습니다. 처음부터 코드를 작성하면 나중에 소스 코드 덩치가 커지거나 협업을 해야 하거나 배포를 해야 할 때 관리상의 문제가 많이 생긴다는 것을 개발자들은 이미 경험으로 알고 있기 때문입니다. 그러한 이유로 코드를 작성하기 전에 먼저 코드, 리소스, 디펜던시, 연동환경 및 테스트를 거친 후 배포작업을 미리 염두에 두고 구조적으로 프로젝트를 구분하는 스캐폴딩 작업을 선행합니다.
프로젝트 관점에서 살펴보면 실제 코드를 작성하기 전에 해야 할 여러 설정 작업들이 도출 됩니다. 스프링부트는 여러 설정작업들 중 개발자를 대신해 관습을 적용하여 자동화 할 수 있는 부분들을 제공하는 기술로써, 개발자의 수고를 덜어 보다 빠른 개발이 진행될 수 있도록 해줍니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
Angular2는 컴포넌트 중심의 개발 접근 방식에 대한 내용을 가집니다. 따라서 본 슬라이드도 컴포넌트 중심의 개발 접근 방식으로 Angular2를 바라보았습니다.
대략적인 내용은 다음과 같습니다.
- Angular2 History
- Angular2 핵심구성요소
- 컴포넌트 중심의 개발
- Angular2 주요개념
- Type Script에대한 설명
- 기타
필요하신 분에게 도움이 되었으면 좋겠습니다. 관련 코드는 다음 주소에 공유하였습니다.
https://github.com/DaeguDevGroup/angular2-bootstrap
- 내용이 업데이트되거나, 추가되면 설명에 이력을 남기겠습니다.
- 본 슬라이드에 오류가 있다면 코멘트 바랍니다.
*Change Log*
- 2016-05-14 : 슬라이드 첫 버전을 업로드
왜 프로그래머가 가독성을 향상시키는 수련을 평생 해야 하는지를 알려준다. 단지 상투적인 이유만 들먹이는 게 아니다. 좋은 가독성은 프로그래머를 프로로 만들어주고, 큰 기쁨을 주며, 성장할 기회를 준다고 역설한다. 가독성을 향상시키려면 눈에 보이는 것들부터 신경을 써야 하며, 코드 자체가 프로그램을 설명해야 하며, 흐름을 단순화하고 주석을 잘 쓰고 퇴고해야 한다는 간단한 원칙부터 지켜나가야 한다.
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일 목요일
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일 목요일
37. 기본 자료형
• 자료형 지정->필요한 메모리 용량 & 변수가 표현하는 값의 범위
• ex) int -> short int, unsigned int, long int ...
• ex) double, float..
• char a[ ]= “hello” // NSString * a= @“hello” objective-c의 문자
배열
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일 목요일
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일 목요일
78. 클래스 메서드와 인스턴스 메서드
Class method == JAVA’s static method
클래스 메서드는 객체의 생성 여부와 관계 없이 내부에 선언한
메서드를 사용할 수 있는 것이 클래스 메서드!
인스턴스 메서드는 객체에 의존함. 클래스의 인스턴스 변수와
구현부에서 생성하는 어떤 클래스의 객체를 인스턴스 메서드
내에서 사용 가능
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일 목요일