'공부방'에 해당되는 글 6건
Objective C 2.0 Study Day #3
Posted at 2010/09/27 16:08// Posted in 공부방Foundation은 XCode 를 기반으로 Objective C를 사용할 때 사용하게 되는 개발 인터페이스들을 모아놓은 프레임워크
무조건 거치게 되지만 달달 외워야 할 이유는 전혀 없음.
그냥 책 읽으면서 바로바로 짧게짧게 정리해보겠음
숫자객체 NSNumber
NSNumber * myNum, * floatNum, * intNum;
NSInteger myInt;
intNum = [NSNumber numberWithInteger:100]; //정수
myInt = [intNum integerValue];
NSLog(@"%li", (long)[intNum integerValue]);
myNum = [NSNumber numberWithLong : 0xabcdef]; //long형 정수
NSLog(@"%lx", [myNum longValue]);
myNum = [NSNumber numberWithChar : 'X']; //char형 정수
NSLog(@"%c", [myNum charValue]);
myNum = [NSNumber numberWithDouble : 12345e+15]; //double형 변수
NSLog(@"%lg", [myNum doubleValue]);
floatNum = [NSNumber numberWithFloat : 100.00]; //double형 변수
NSLog(@"%g", [floatNum floatValue]);
뭐 이딴 식임..
스트링객체 NSString
NSString * str = @"Hello World!";
NSLog(@"%@", str);
배열객체 NSArray NSMutableArray
NSArray * monthName = [NSArray arrayWithObjects : @"Jan", @"Feb"
, @"Mar", @"Apr", @"May", @"Jun", @"Jul", @"Aug", @"Sep", @"Oct", @"Nov", @"Dec", nil];
for (int i=0; i<12; i++) {
NSLog(@"%2i %@", i+1, [monthName objectAtIndex : i]);
}
int p;
NSMutableArray * primes = [NSMutableArray arrayWithCapacity : 20];
for (p=1; p<=20; p+=1) {
[primes addObject : [NSNumber numberWithInteger : p]];
}
sortUsingSelector 메쏘드 : 비교할 때 사용할 메쏘드를 받아와서 자동 소팅해준다.
book이라는 NSMutableArray 객체가 들어있는 클래스안에 sort함수를 넣어준다면
-(void) sort
{
[book sortUsingSelector : @selector(compareNames:)];
}
이렇게 작성하고,
비교대상인 객체안에 비교인자를 내보낼 메쏘드를 하나 추가해준다.
이름은 compareName로 해야겠지?
-(NSComparisonResult) compareNames : (id) element
{
return [name compare : [element name]];
}
이러면 NSMutableArray객체인 book이 가지고 있는 객체들을 name인자를 중심으로 sort해서 재 정렬해준다.
쵝오!
파일과 디렉토리 다루기 NSFileManager NSData NSPathUtilities
이건 시간날 때 다시.
대충 이정도면 필요한 핵심은 다 훑은 듯 하다.
이제 사용하면서 익숙해지면 될 듯.
Objective C 2.0 Study Day #2
Posted at 2010/09/20 16:08// Posted in 공부방강의 자료로 만들 수도 있으니 정성스럽게 작성 중..
-----------------------------------------------------------------------------------------
클래스 자동 생성 접근자 메서드
@interface HelloClass : NSObject
{
int abc;
int def;
}
@property int abc, def;
-(void) print;
@end
@implemetation HelloClass
@synthesize abc, def;
-(void) print
{
NSLog(@"abc=%i def=%i", abc, def);
}
@end
일 경우에 main함수에서 abc와 def에 대한 권한이 약간 더 폭넓게 작동한다.
예를 들어 main 함수 내에서 abc와 def 변수를 불러올때나 변수에 어떤 값을 대입할 경우
HelloClass * hoho = [[HelloClass alloc] init];
hoho.abc = 30;
hoho.def = 24;
int helloAbc = hoho.abc;
NSLog(@"helloAbc = %i", helloAbc);
[hoho print];
와 같이 . 신텍스로 불러오거나 대입하기가 가능해진다. 2.0 버전부터 가능한 부분이라고 한다.
클래스 메서드에 여러인자 넘겨주기
@interface부분에 한줄 더 넣어준다.
-(void) setNumbers : (int) n andDEF : (int) k;
@implementation 부분에 함수 정의 추가
-(void) setNumbers : (int) n andDEF : (int) k
{
abc = n;
def = k;
}
이렇게 하면 메인 함수에서 사용할 때
[hoho setNumber : 35 andDEF : 93];
이렇게 객체에 숫자 두 개 이상을 인자로 넘겨줄 수 있다.
지역변수
-(float) minusThree : (int) n
{
float testNum = n;
testNum -= 3.0f;
return testNum;
}
이렇게 쓰면 float형 testNum이라는 변수는 지역변수. 중괄호 끝날 때 제거된다..
self & super
[self minusThree];
클래스 내부에서 쓰면 자기자신의 메소드를 호출해서 실행시킨다.
[super dealloc];
클래스가 상속받은 상위 클래스에서 나 자신의 메모리를 해제해주는 코드인데,
이렇게 자기자신에 대한 해제 전에는 필히 자신이 지닌 객체들이나 포인터들을 다 해제하고 행하도록 해야한다.
예를 들어 내가 rect라는 객체를 함께 가지고 있다면,
if (rect) {
[rect release];
}
[super dealloc];
release & dealloc
release 는 소유자가 있는 상태의 객체 메모리 해제를 의미하며
dealloc은 소유자가 유실되는 메모리 해제를 의미한다.
즉 dealloc은 자기자신의 메모리 해제 예를 들어 [super dealloc] 과 같은 형식으로만 쓰인다.
구글링하다 얻은 정보이기에 완전한 정보는 아니라고 생각함.
타(혹은 자신)클래스의 객체 (포인터) 넘겨받기
현재 보고 있는 책에서는 객체는 무조건 포인터로 선언하는데 이유는 모르겠고 원래 그런 듯 함.
-(Fraction * ) add : (Fraction * ) b
{
Fraction * c = [[Fraction alloc] init];
[c setNumber1 : (num1+b.num1) andNumber2 : (num2+b.num2)];
return c;
}
-(void) change : (Fraction * ) b
{
[b setNumber1 : 2 andNumber2 : 15];
}
@try { ... } @catch { ... }
예외처리
@try {
[hello tryError];
} catch (NSException * exeption) {
NSLog(@"error %@ | %@", [exception name], [exception reason]);
}
extern
이건 좀 모호해서 일단 두기로 함. 사용방식이 C나 C++과 좀 많이 다른 것 같아 이상하게 느껴짐..
초기에 extern int a; 다른곳에서 int a = 10; 이렇게 두번의 선언 과정이면 extern 구문을 가진 헤더를 포함한
파일 어디서든 a를 쓸 수 있을 것 같은데, int a; 하고서는 사용부에서 extern int a; a = 35; 뭐 이렇게 지속적으로
extern을 작성해준다. 이거 아주 이상하다.
#define
#define TRUE 1
상수나
#define PI2 3.141592654f/180.0f
산술표현이 들어가는 경우나
#define PLUS(x, y) (x+y)
매크로 정의를 하거나
#define TOUPPER (x)
typedef
typedef int Hihi;
Hihi abc = 30;
데이터형에 다른 이름을 부여하는 방법
-----------------------------------------------------------------------------------------
카테고리
카테고리는 현존하는 클래스에 전혀 영향을 안끼치고도 새로운 함수를 정의하고 싶을 때 사용한다.
예를 들어 붕어빵 만드는 클래스를 만들었고 호두를 넣는 옵션 메쏘드를 추가하고 싶지만
이걸 직접 수정하기 어려운 상황일 때 따로 메쏘드를 모아서 정의하는게 가능하다
#import <Foundation/Foundation.h>
@interface BoongeoPang : NSObject
{
int Angko;
int Milkaru;
int Hodu;
}
@property int Angko, Milkaru, Hodu;
-(void) addAngko: (int) n andAddMilkaru: (int) k;
-(void) print;
@end
라는 클래스가 있고, 사용 범위가 넓어 이걸 직접 건드리기가 어려운 경우
#import "BoongeoPang.h"
@interface BoongeoPang (Options)
-(void) addHodu : (int) hodu;
@end
@implementation BoongeoPang (Options)
-(void) addHodu : (int) hodu
{
Hodu = hodu;
}
@end
이런 식의 구성이 가능하다.
사용할 때는 그냥
[a addHodu : 35];
이렇게만 하면 된다.
-----------------------------------------------------------------------------------------
구조체
struct date
{
int year;
int month;
int day;
};
struct date dayUpdate (struct date hihi)
{
struct date hoho;
hoho.year = hihi.year;
hoho.month = hihi.month;
hoho.day = hihi.day;
}
함수 구현 부분은 조금 다르지만 대체로 C의 문법을 따르고 있음.
배열
int hihi[100];
int hoho[] = {0,1,2,3,4,5,6,7,8,9};
BabyPang * bbpang[100];
포인터
int bcd = 10;
int * abc;
int x;
abc = &bcd;
이러면 abc와 bcd가 같은 주소를 참조하는 것.
x = *abc;
이러면 x가 abc의 값을 참조하는 것. (대입하는 것)
포인터는 주소값을 참조하기 때문에 배열과 혼용되어 쓰이기도 한다.
예를 들어
int sumArray(int h[], int counts)
{
int * k, sum;
int * arrEnd = h + counts;
for (k=h; k<arrEnd; k++) {
sum += (*k);
}
NSLog(@"sum = %i", sum);
}
int main(int argc, char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int sumArray(int array[], int n);
int values[10] = {1,2,3,4,5,6,7,8,9,10};
sumArray(values, 10);
[pool drain];
return 0;
}
함수를 선언해 사용할 때는 사용하는 메인부에서 함수를 재 선언해준다는 점 잊지말도록 하자.
오브젝티브씨만의 특징인 듯 하다.
-----------------------------------------------------------------------------------------
Objective C 2.0 Study Day #1
Posted at 2010/09/18 17:57// Posted in 공부방으음~ 재미로 지난번에 봤을 때는 잘 못느꼈는데..
제대로 공부하려고 책을 읽어보니 생각보다 조금 다르군요.
결국 언어 공부 중 처음으로 날짜별 기억해야할 내용을 조금씩 정리해봐야겠습니다.
-----------------------------------------------------------------------------------------
변수
int 정수
float 실수
double (소수점 이하에 배정 공간이 큰) 실수 : 책내용에 따르면 크긴 같다는데 왜일까? 얜 64비트인게 나오지만 float이 32비트가 아니란 말인가? 모호하게 써놓은 듯.. 앞으로 클래스 부분에서도 약간 import 시키는 부분에 오해할만한 구석이 있지만, 이건 지금 맥북 전원을 학교에 두고와서 테스트 불가 상태.
char 문자
예시)
int abc; float abcd = 10.5f; double abcde = 0.95; char abcdef = 'W';
abc = 10;
-----------------------------------------------------------------------------------------
반복문
int i;
for (i=0; i<100; i++) {
NSLog(@"i=%i", i);
}
int g = 5;
while (g>=0) {
NSLog(@"g=%i", g);
--g;
}
int k=1;
do {
NSLog(@"k=%i", k);
k++;
} while (k<=5);
-----------------------------------------------------------------------------------------
조건문 등
int hello = 7;
if (hello<5) {
NSLog(@"hello(%i)는 5보다 작다", hello);
} else if (hello>=5 && hello<10) {
NSLog(@"hello(%i)는 5보다 크거나 같고 10보다 작다", hello);
} else {
NSLog(@"hello(%i)는 10보다 크다", hello);
}
int jojo = 2;
switch (jojo) {
case 1 :
NSLog(@"jojo(%i)는 1이다", jojo);
break;
case 2 :
NSLog(@"jojo(%i)는 2다", jojo);
break;
case 3 :
NSLog(@"jojo(%i)는 3이다", jojo);
break;
default :
NSLog(@"넌 뭘까?");
break;
}
-----------------------------------------------------------------------------------------
연산자
산술연산자 + - * / %
int a = 1925/25;
float b = (float)a/19762.29f;
비트연산자 & | ^ ~ << >>
& 논리곱
16진수 계산이라면,
int hello = 0x376 & 0x0f0; 이라면
hello는 0x070 의 값을 받는다.
| 논리합
이것도 16진수 논리합 계산이라고 가정하면
int hello = 0x2600 | 0x00ac; 이라면
hello는 합쳐져서 0x26ac 의 값이 된다.
<< 이건 간단히 말하면 2의 몇승인지 계산하는 연산자
int hello = (이진수로 보여줘서) 00001 << 2 이렇게 가는거라면
00001의 숫자들이 왼쪽으로 두칸 밀려나서 00100이 되고
결국 2진수를 10진수로 바꾸면 4가 나온다. 결국 2의 2승 값을 곱해주는 꼴.
>> 이건 반대
나머지는 몰라도 됨.
-----------------------------------------------------------------------------------------
클래스
클래스야 뭐 대충 붕어빵 틀이고 객체(인스턴스)는 붕어빵이려니..
메소드라고 해놨던데 이건 붕어빵에 앙꼬를 얼마나 넣을지, 밀가루는 얼마나 넣을지.. 혹은 설탕을 넣을지 말지 결정해서
인스턴스의 성격을 조금씩 바꿔놓는 행위자 정도로 보면 무방.
클래스를 정의하는 형식이 C++이나 JAVA와 조금 다른데, 이걸 중심으로 써보겠다.
클래스의 선언부 !
@interface FishPang : NSObject
{
int angkko;
int milgaru;
}
-(void) makeFishPang;
-(void) setAngkko : (int) n;
-(void) setMilgaru : (int) d;
@end
일단 선언은 @interface와 @end로 묶여 있다.
클래스의 기본 성격을 다 가지고 있는 NSObject에서 상속을 받아 클래스를 생성한다.
이 부분부터 마음에 들지 않았음. ㅎㅎ
함수 선언의 앞에는 -(void)라는 괴상한 형태의 메소드 출력 형태 정의가 있고,
그 뒤에는 메소드의 이름
그 바로 뒤에는 :을 찍은 후 (int) d; 처럼 넘겨받는 인자를 써줍니다. 없으면 : 이것부터 아예안써주면 됨.
이제 선언부 끝.
클래스의 구술(정의)부 !
@implementation FishPang
-(void) makeFishPang
{
NSLog(@"FishPang made!");
}
-(void) setAngkko : (int) n
{
angkko = n;
}
-(void) setMilgaru : (int) d
{
milgaru = d;
}
@end
정의부는 @inpremetation와 @end로 묶여 있음.
@implementation FishPang:NSObject 라고 써야하지만 실상 대부분 정의부에서는
NSObject는 삭제하는것이 일반적이라고 한다.
정의부 작성은 대강 선언부에 맞춰서 형식이 유사하기 때문에 쉽게 이해가 갈 것으로 사료됨.
클래스 사용 예시
int main(int argc, char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //1
FishPang * myPang; //2
myPang = [FishPang alloc]; //3
myPang = [myPang init];
[myPang setAngkko : 5]; //4
[myPang setMilgaru : 22];
[myPang makeFishPang]; //5
[myPang release]; //6
[pool drain]; //7
return 0;
}
클래스 쓰기 전에
#import <Foundation/Foundation.h>
를 써주시면 대부분 기능과 기본 함수들을 쓸 수 있게 된다.
main함수 쓰는 방식이야 거의 모든 언어가 유사하니 패스~
1 : 네임스페이스 및 메모리 공간을 얻어온다. 이건 main함수에 무조건 들어가는 부분
2 : FishPang이라는 클래스로 부터 myPang이라는 객체를 생성해준다.
3 : 일단 클래스로 생성한 객체의 함수를 불러오는 형식이 이렇다.
[인스턴스네임 메소드이름];
예를 들어
[hohoName addThree]; 혹은 [helloInstance plusThis : 1935];
이렇게 쓰게된다.
myPang에 FishPang이 쓸 수 있을 만큼의 메모리를 할당해준다.
init함수를 호출함으로써 myPang에서 쓸 변수등을 초기화 시켜준다.
(내가 본 책을 쓴 사람은 이걸 다르게 설명했는데.. 모호했음)
이 두 줄은
myPang = [[FishPang alloc] init]; 으로 줄여쓸 수도 있고, 동시에 2, 3번을 합쳐서
FishPang * myPang = [[FishPang alloc] init]; 의 한 줄로 바꿔써도 된다.
4 : 3의 예처럼 myPang에 있는 setAngkko 메소드를 불러오되 5라는 값을 인자에 넣어주면서 불러온다.
5 : 중복되는 예처럼 myPang에 있는 makeFishPang 메소드를 불러온다.
6 : myPang에 할당된 메모리 모두 없애준다.
가비지 콜렉션이 자동으로 되지 않는 언어들은 모두 메모리릭을 막기 위해 매번 할당받은 메모리를 지워주며,
이렇게 메모리 지워주는 과정을 release 한다고 얘기한다.
7 : 네임스페이스 제거.
이렇게 클래스를 활용한 커멘드라인 어플리케이션 완성.
오늘은 여기까지.
MAKE 21번째 볼륨 : Desktop Manufacturing
Posted at 2010/02/17 14:12// Posted in 공부방예전에 MAKEBOT이라는 애들을 포스팅 한 적이 있는 듯 한데, 그 유사 프로젝트들을 모아서 MAKE에서 이번에 출판을 했나보다. 동영상 중간에 창고 가득 쌓여있는 MAKEBOT의 CNC가 나오는데 전세계적으로 어마어마하게 팔리는 듯 하다. 아.. 부럽군.. 저렇게만 살아도 즐거울 것 같은데 말이지..
drawdio 가지고 놀기
Posted at 2010/02/09 15:16// Posted in 공부방

보통 회로나 동영상 보고 따라서 만드는 경우는 거의 없지만..
drawdio는 수업때 사용할 수 있을 것 같아 막간을 이용해 만들어 봤습니다.
위쪽 회로는 싸이트에서 본 회로를 좀 알아보기 쉽게 바꾼 것이고요,
10uF 짜리 콘덴서는 없어서 그냥 4.7uF 짜리로 바꿨습니다.
LM555는 좀 비싼 관계로 가지고 있는 대체품 HA17555를 썼고 가격차는 대충 4배정도 나네요.
저항과 컨덴서를 다 칩으로 써서 소켓까지의 가격은 1500원이 넘지 않을 듯 하고요,
9V아답타는 별도입니다.
좀 전에 다 만들긴 했지만 지금 카메라가 없어서 카메라 생기는 대로 동영상과 사진을 올리도록 하겠습니다.
