[Objective C] 04 Exceptions

프로그래밍/iPhone Dev 2009. 10. 28. 11:28 Posted by galad
Exceptions

CupWarningException.h
#import <Foundation/NSException.h>

@interface CupWarningException: NSException
@end


CupWarningException.m
#import "CupWarningException.h"

@implementation CupWarningException
@end


CupOverflowException.h
#import <Foundation/NSException.h>

@interface CupOverflowException: NSException
@end


CupOverflowException.m
#import "CupOverflowException.h"

@implementation CupOverflowException
@end


Cup.h
#import <Foundation/NSObject.h>

@interface Cup: NSObject {
    int level;
}

-(int) level;
-(void) setLevel: (int) i;
-(void) fill;
-(void) empty;
-(void) print;
@end


Cup.m
#import "Cup.h"
#import "CupWarningException.h"
#import "CupOverflowException.h"
#import <Foundation/NSException.h>
#import <Foundation/NSString.h>

@implementation Cup
-(id) init {
    self = [super init];
   
    if(self) {
        [self setLevel: 0];
    }
   
    return self;
}

-(int) level {
    return level;
}

-(void) setLevel: (int) i {
    level = i;
   
    if(level > 100) {
        // throw overflow
        NSException* e =
            [CupOverflowException
                exceptionWithName: @"CupOverflowException"
                reason: @"The level is above 100"
                userInfo: nil
            ];
       
        @throw e;
    }
    else if(level >= 50) {
        // throw warning
        NSException* e =
            [CupWarningException
                exceptionWithName: @"CupWarningException"
                reason: @"The level is above or at 50"
                userInfo: nil
            ];
           
        @throw e;
    }
    else if(level < 0) {
        // throw exception
        NSException* e =
            [NSException
                exceptionWithName: @"CupUnderflowException"
                reason: @"The level is below 0"
                userInfo: nil
            ];
       
        @throw e;
    }
}

-(void) fill {
    [self setLevel: level + 10];
}

-(void) empty {
    [self setLevel: level - 10];
}

-(void) print {
    printf("Cup level is: %i\n", level);
}
@end


main.m
#import "Cup.h"
#import "CupOverflowException.h"
#import "CupWarningException.h"
#import <Foundation/NSString.h>
#import <Foundation/NSException.h>
#import <Foundation/NSAutoreleasePool.h>
#import <stdio.h>

int main(int argc, const char* argv[]) {

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
   
    Cup* cup = [[Cup alloc] init];
    int i;
   
    // this will work
    for(i = 0; i < 4; i++) {
        [cup fill];
        [cup print];
    }
   
    // this will throw exceptions
    for(i = 0; i < 7; i++) {
        @try {
            [cup fill];
        }
        @catch(CupWarningException* e) {
            printf("%s: ", [[e name] cString]);
        }
        @catch(CupOverflowException* e) {
            printf("%s: ", [[e name] cString]);
        }
        @finally {
            [cup print];
        }
    }
   
    // throw a generic exception
    @try {
        [cup setLevel: -1];
    }
    @catch(NSException* e) {
        printf("%s: %s\n", [[e name] cString], [[e reason] cString]);
    }
   
    // free memory
    [cup release];
    [pool release];

    system("PAUSE");
    return 0;
}


컴파일 시 -fobjc-exceptions 옵션을 추가하라고 해서 붙였더니 @throw 에서 컴파일러가 죽는 바람에 결과 확인 못함.
minGW의 gcc 컴파일러 문제인 듯.

Compiler: Default compiler
Building Makefile: "D:\Workspaces\ObjectiveC\05_Exceptions\Makefile.win"
Executing  make...
make.exe -f "D:\Workspaces\ObjectiveC\05_Exceptions\Makefile.win" all
gcc.exe -c Cup.m -o Cup.o -I"C:/GNUstep/GNUstep/System/Library/Headers"    -lobjc -fobjc-exceptions -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
Cup.m: In function `-[Cup setLevel:]':
Cup.m:34: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.mingw.org/bugs.shtml> for instructions.

make.exe: *** [Cup.o] Error 1
Execution terminated

위는 컴파일 로그.

예제에 따르면 결과는 다음과 같다.
Cup level is: 10
Cup level is: 20
Cup level is: 30
Cup level is: 40
CupWarningException: Cup level is: 50
CupWarningException: Cup level is: 60
CupWarningException: Cup level is: 70
CupWarningException: Cup level is: 80
CupWarningException: Cup level is: 90
CupWarningException: Cup level is: 100
CupOverflowException: Cup level is: 110
CupUnderflowException: The level is below 0

- exception 생성 방식을 제외하면 던지고 잡는 것은 자바와 비슷. finally도 마찬가지.
- NSException을 반드시 상속해서 사용할 필요는 없다고. @catch ( id e ){..} 으로 해도 된다.
 근데 이 경우 예외끼리의 구분은 catch 안에서 클래스를 구분해야 할 듯.

Type Introspection
Type introspection이란 runtime시에 해당 인스턴스가 어떤 클래스의 인스턴스인지 등을 알아내는 것을 의미합니다. 좀더 일반적으로 말하자면 runtime시에 어떤 타입인지, 무엇을 할 수 있는지 등, 실행중에 변할 수 있는 부분을 알아낼 수 있는 메커니즘을 말합니다. NSObject에는 이런 용도로 isMemberOfClass와 같은 메소드가 정의되어 있습니다.
if( [anObject isMemberOfClass:someClass] )

라고 한다면 anObject라는 인스턴스가 someClass라는 클래스 타입인지 아닌지를 알 수 있습니다. 즉 return 값이 YES이면 someClass의 타입이란 것입니다.
좀더 포괄적인 것으로는 isKindOfClass가 있습니다.
if( [anObject isKindOfClass:someClass] )

이것은 anObject의 수퍼클래스중 someClass가 있는가를 알아낼 수있게 합니다. 즉 someClass의 한 종류인지를 알 수있게 해준다는 것입니다. isMemberOfClass 경우는 직접적인 parent class, 다른 말로는 superclass의 형인지 아닌지를 알려주는데 반해, 이것은 직접적인 superclass가 아니어도 된다는 것입니다.
이외에도 주어진 객체가 특정 메시지에 반응하는지 아닌지를 알아내는 것등 introspection의 예는 많습니다.

- @"CupOverflowException"와 같은 것들은 constant NSString object란다. cString은 String constant로 char* .
즉 예외 생성 시 @"XXX"로 넣은 constant String을 cString 메소드로 가져다가 출력. 주소참조해서 문자가져온 듯.

'프로그래밍 > iPhone Dev' 카테고리의 다른 글

[Objective C] 06 Inheritance  (1) 2009.10.30
[Objective C] 05 The Id Type  (1) 2009.10.29
[Objective C] 03 Class Level Access  (0) 2009.10.27
[Objective C] 02 Access Privledges  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27

[재테크] 펀드 운용하기

사는 얘기 2009. 10. 28. 10:43 Posted by galad
출처: http://www.nbamania.com/board/zboard.php?id=jabdamboard&page=1&sn1=&divpage=15&sn=off&ss=on&sc=on&tm=off&select_arrange=headnum&desc=asc&no=84576

제 투자 방식이요?

저는  Fund로 10 퍼센트 먹으면 환매합니다. (시점에 관계 없이)

자산의 절반은 무조건 안전 자산에 들어 있습니다. (예적금, 채권형 Fund 또는 회사채)

위험 자산은 진짜 위험하게 놉니다. 단 자산의 절반이며

위험 자산이 불어나서 자산의 절반이 넘게 되면 위험 자산과 안전 자산의 비율을 다시 5:5 로

맞추기 위해서 위험 자산을 환매하고 안전 자산을 더 매입합니다. (주로 Fund 로 조정)

이렇게 투자하다 보니 투자 Fund 중 적립식이 없습니다. 거치식/임의식이 전부네요.

 

보너스로 Fund 를 고르는 몇 가지 Tip 을 알려드리겠습니다. 

1. MSCI 를 추종하는 Fund 들이 괜찮습니다. 최소한 시장의 움직임에 따라 솔직하게 움직여 주거든요.

2. 해외 Fund 가입 시 될 수 있으면 환Risk 를 Hedge 하는 해외 Fund 를 가입하시기 바랍니다.

    가격Risk 만 해도 골치아픈데 환Risk 까지 관리하려면 머리 터집니다.

3. 설정액이 최소 50억 이상인 펀드로 하시기 바랍니다. 너무 금액이 작으면 펀드가 벤치마크 지수를
   
    제대로 추종하지 못하고 운신의 폭이 작아집니다.

4. 창구에서 추천하는 펀드 가입하면 그 직원한테 수당 제일 많이 떨어지거나 실적 제일 잘 평가해 주는

    펀드 가입하는 겁니다. 직접 투자설명서랑 운용보고서 다 읽어 보고 나서 납득이 될 때 투자하십시오.


** 펀드 투자는 쇼핑이 아닙니다. 공부를 좀 하셔야 됩니다.

     업무에 지장 받을 정도로 공부할 필요도 없습니다. 그냥 투자설명서 읽어 보고 운용보고서 읽어 보고

     평소에 경제 Trend 에 대해서 좀 관심을 갖고 지켜보시면 됩니다.

     WTI 가 얼마인지, 미국 다우 랑 Nasdaq, S&P 500 지수가 얼마고 최근 변동폭이 얼마인지,

     최근 걸려 있는 굵직굵직한 경제지수 관련 발표가 뭐가 있는지,

     각 국가 (특히 미국) 의 중앙은행 (미국의 경우 FRB) 에서 어떤 정책을 쓰려고 하고 있는지 정도는

     상식 선에서 알아 두시는 게 좋습니다.

 

이상입니다. 도움이 좀 되셨으면 좋겠네요.


관련 설명은 Objective‐C Language Reference 박종암 jongampark@gmail.com 을 참고했음.
문제 있으면 알려주시길...

Class Level Access

클래스 변수와 인스턴스 변수 관련

ClassA.h
#import <Foundation/NSObject.h>

static int count;

@interface ClassA: NSObject
+(int) initCount;
+(void) initialize;
@end


ClassA.m
#import "ClassA.h"

@implementation ClassA
-(id) init {
    self = [super init];
    count++;
    return self;
}

+(int) initCount {
    return count;
}

+(void) initialize {
    count = 0;
}
@end


main.m
#import "ClassA.h"
#import <stdio.h>

int main(int argc, const char* argv[]) {
    ClassA* c1 = [[ClassA alloc] init];
    ClassA* c2 = [[ClassA alloc] init];
   
    // print count
    printf("ClassA count: %i\n", [ClassA initCount]);
   
    ClassA* c3 = [[ClassA alloc] init];

    // print count again
    printf("ClassA count: %i\n", [ClassA initCount]);
   
    [ClassA initialize];
    printf("ClassA count: %i\n", [ClassA initCount]);
   
    [c1 release];
    [c2 release];
    [c3 release];
   
    system("PAUSE");
    return 0;
}


결과
ClassA count: 2
ClassA count: 3
ClassA count: 0
계속하려면 아무 키나 누르십시오 . . .

init 메소드가 id 타입을 반환하는 것에 주의
static int count = 0; 클래스 변수 선언 방식. 좋은 위치는 아님. 자바의 static class variables 구현하는 것처럼 하는 것이 더 나음.
The + denotes a class level function.
+(void) initialize 메소드는 Objective-C가 프로그램 시작 시 콜함. 또한 모든 클래스에 대해서 콜함. 클래스 레벨 변수를 초기화하기에 좋은 위치.

id
Objective-C는 동적인 언어입니다. 이 말은 runtime시에 객체가 변할 수 있다는 것을 의미하며, 또한 해당 객체에 대한 method도 변할 수 있습니다.. 이것은 Apple에서 만들던 Dylan의 설명서를 보면 쉽게 이해할 수 있을것입니다. 아무튼 이렇게 동적이다보니, 기존의 static typing을 하던 방식으로 객체에 대한 포인터를 사용하면 불편한 면이 있을 수 있겠습니다. 그래서인지 Objective-C 에는 모든 객체를 두루 포인팅할 수 있는 타입을 새로 정의해 놓았는데 바로 id입니다. 다음의 예를 봅시다.

id mySong = [[Song alloc] init];

이렇게 하면 mySong은 Song이라는 타입의 객체를 가르키게 됩니다.
물론 static typing을 써서 다음과 같이 할 수도 있습니다.

Song mySong = …

이것은 흡사 C/C++의 void *와 비슷합니다.
만약 아무것도 안가르키고 있다면 nil 이라는 이미 정의된 keyword를 null 객체를 가르키기 위해서 사용할 수 있습니다.

id mySong = nil;

id 타입은 객체에 대해서 어떤 정보도 가지고 있지 않습니다. 단지 가르키고 있는게 객체라는 것만을 의미할 뿐입니다. 그러므로 id 로 선언된 변수는 어떤 객체라도 가르킬 수 있습니다. 이것은 C/C++ 관점에서 보자면 문제를 일으킬 수 있습니다. 즉 가르키고 있는 객체가 어떤 형태인줄 알아야 뭔가를 할 수 있을텐데, 이것만으로는 알아낼 방도가 없기 때문입니다. 그래서 isa 라는 instance variable을 묵시적으로 가지고 있게 됩니다. 이것은 실제 그 객체가 어떤 형인지를 기록해 놓는 것인데, 이것을 이용해서 runtime시에 알아낼 수 있게 됩니다.
이런 메커니즘을 이용해서 dynamic typing이 가능해 집니다.

즉, init 메소드에서 id 타입으로 반환하고 동적으로 typing해서 사용.

'프로그래밍 > iPhone Dev' 카테고리의 다른 글

[Objective C] 05 The Id Type  (1) 2009.10.29
[Objective C] 04 Exceptions  (0) 2009.10.28
[Objective C] 02 Access Privledges  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27
[Objective C] 환경설정  (0) 2009.10.27
Access Privledges

Access.h
#import <Foundation/NSObject.h>

@interface Access: NSObject {
    @public
        int publicVar;
    @private
        int privateVar;
        int privateVar2;
    @protected
        int protectedVar;
}
@end


Access.m
#import "Access.h"

@implementation Access
@end


main.m
#import "Access.h"
#import <stdio.h>

int main(int argc, const char* argv[]) {
    Access* a = [[Access alloc] init];
   
    // Works
    a->publicVar = 5;
    printf("public var: %i\n", a->publicVar);
   
    // doesn't compile
//    a->privateVar = 10;
//    printf("private var: %i\n", a->privateVar);
   
    [a release];
   
    system("PAUSE");
    return 0;
}


인스턴스 내의 변수에 직접 접근 시에는 -> 사용

'프로그래밍 > iPhone Dev' 카테고리의 다른 글

[Objective C] 04 Exceptions  (0) 2009.10.28
[Objective C] 03 Class Level Access  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27
[Objective C] 환경설정  (0) 2009.10.27
[Objective C] 튜토리얼  (0) 2009.10.14
이후 관련 소스는 http://www.otierney.net/objective-c.html 를 참고했음.

Creating Classes

Fraction.h
#import <Foundation/NSObject.h>

@interface Fraction: NSObject {
    int numerator;
    int denominator;
}

-(Fraction*) initWithNumerator: (int) n andDenominator: (int) d;
-(void) print;
-(void) setNumerator: (int) n;
-(void) setNumerator: (int) n andDenominator: (int) d;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;
@end


Fraction.m
#import "Fraction.h"
#import <stdio.h>

@implementation Fraction
-(Fraction*) initWithNumerator: (int) n andDenominator: (int) d {
    self = [super init];
   
    if(self) {
        [self setNumerator: n andDenominator: d];
    }
   
    return self;
}

-(void) print {
    printf( "%i/%i", numerator, denominator );
}

-(void) setNumerator: (int) n {
    numerator = n;
}

-(void) setNumerator: (int) n andDenominator: (int) d {
    numerator = n;
    denominator = d;
}

-(void) setDenominator: (int) d {
    denominator = d;
}

-(int) denominator {
    return denominator;
}

-(int) numerator {
    return numerator;
}
@end


main.m
#import <stdio.h>
#import "Fraction.h"

int main( int argc, const char *argv[] ) {
    // create a new instance
    Fraction *frac = [[Fraction alloc] init];
    Fraction *frac2 = [[Fraction alloc] init];
    Fraction *frac3 = [[Fraction alloc] initWithNumerator: 3 andDenominator: 10];

    // set the values
    [frac setNumerator: 1];
    [frac setDenominator: 3];
   
    // combined set
    [frac2 setNumerator: 1 andDenominator: 5];

    // print it
    printf( "The fraction is: " );
    [frac print];
    printf( "\n" );
   
    // print it
    printf("Fraction 2 is: ");
    [frac2 print];
    printf( "\n" );
   
    // print it
    printf("Fraction 3 is: ");
    [frac3 print];
    printf( "\n" );

    // free memory
    [frac release];
    [frac2 release];
    [frac3 release];
   
    system("PAUSE");

    return 0;
}


[클래스 메소드명]의 메소드 호출 방식
객체 할당 후 초기화 잊지말기
메소드 호출 시에 인자 넘기는 경우, 인자에 이름 붙이기 가능

Objective-C 다운 표현으로는 [receiver message]. 리시버에게 메시지를 보낸다고 표현

메소드 정의 시의 +/-
- Instance method
+ Class method

[Objective C] 환경설정

프로그래밍/iPhone Dev 2009. 10. 27. 14:26 Posted by galad
공부할 환경을 설정.

출처: http://umaking.tistory.com/45

위 블로그 참고할 것

참고로 Dev-C는 영문버전으로 설정할 것. 한글로 할 경우 프로젝트에 .m 파일이 인식 안되는 버그 있음.

[eclipse] 이클립스 + Mantis

프로그래밍/Library 2009. 10. 27. 11:02 Posted by galad

'프로그래밍 > Library' 카테고리의 다른 글

[Eclipse] Aptana Studio  (0) 2009.11.30
[Eclipse] 형상관리 plug-in  (0) 2009.11.30
[Utils] Paros 사용법  (0) 2009.09.06
[Subversion] 오리지널 서브버젼 이클립스 플러그인  (0) 2009.08.28
[Subclipse] ignore  (0) 2009.04.02

[뉴스] 2008년도판이랑 비교해서...

사는 얘기 2009. 10. 27. 10:49 Posted by galad
http://media.daum.net/foreign/view.html?cateid=1007&newsid=20091027015706989&p=nocut

http://www.docstoc.com/docs/7716625/Legatum-Prosperity-Index-Table-2008

리포트 작성 방식이 바뀐 건지 암튼 데이타가 좀 다른데 비슷한 항목인 freedom of choice만 비교하면 우리나라(-4점)보다 낮은 점수의 국가는 전체 103개국 중 32개국 밖에 없다는. 대략 71위.
2008년 토탈 랭킹은 26위.

http://www.docstoc.com/docs/7717035/Legatum-Prosperity-Index-2007

2007년은 토탈 랭킹은 22위.
아시아에선 싱가폴 다음... 일본 28위.
freedom of choice 5점!!
우리보다 높은 나라가 전체 50개국 가운데 22개. 공동 23위 정도.

3년간 토탈랭킹 22->26->28. 개인의 자유 23->71->70.
랭킹 떨어진 이유가 보인다..

위대하신 가카의 힘..
출처: http://www.viper.pe.kr/docs/make-ko/make-ko_2.html#SEC5

SRC=Fraction.m main.m
OBJ=$(SRC:.m=.o)
EXE=hello.exe

CC=gcc
#-Wall -O3
DEBUG= `gnustep-config --objc-flags`
FLAGS= -I /home/uclick/GNUstep/Local/Library/Headers -L /home/uclick/GNUstep/Local/Library/Libraries
LDFLAGS= -lobjc -lgnustep-base
EFLAGS= -enable-auto-import -fconstant-string-class=NSConstantString
RM=rm

%.o: %.m
    $(CC) $(DEBUG) $(FLAGS) $(LDFLAGS) $(EFLAGS) -o $@ -c $<

$(EXE): $(OBJ)
    $(CC)  -o $@ $(OBJ)  $(FLAGS) $(LDFLAGS) $(EFLAGS)

all: $(EXE)
    

clean:
    -$ $(RM) $(OBJ)

make 로 실행.

SRC에 입력한 파일 목록에 해당하는 *.o 를 먼저 컴파일하고
exe를 생성.

make clean 하면 .o파일 삭제

'프로그래밍 > Server' 카테고리의 다른 글

[unix] ftp 사용법  (0) 2010.04.21
[unix] find 명령어 사용하기  (0) 2010.02.08
[Shell Script] Shell Script 문법  (0) 2009.10.14
[Shell Script] PATH추가  (0) 2009.10.14
[Tomcat] 톰캣에 https 설정하기  (0) 2009.09.02

[ORACLE] 특수문자 입력

프로그래밍/DB 2009. 10. 21. 16:59 Posted by galad
출처: http://munduki.tomeii.com/darkhorse/entry/ORACLE-%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90-%EC%9E%85%EB%A0%A5

set escape on

UPDATE TBL_US_MEMBER_BPINFO SET BP_EMAIL_AUTH_URL = 'http://idp.nate.com/web/JC.mail?q=64adff31fc80c86f8991a90bf0cad011c5e364370f1b45a4b2bca822d7683c3135628ec969ef57352f3e9b0e429db66b1c7ff0d7adeef4d42f6bcedbc96b63d3085d0fcef961826ed2a963f304d4efbb3af99ad07da28057c835683cdf48ad219de23d21376576530539089db264d3602fdc44908d3e98e45c9c03ec7e67e1d82c0c91a0ed61366508ffd5fb4acba40dce8400621d77af8ca051a7d5a28144e33bf10b78dcf3a79384f7365a47d49fdc3f25466e6e5d360544d4e472c3da8ac9\&\&resp_url=http%3A%2F%2Fbp.tstore.co.kr%2Fbppoc%2Fmember%2FidpEmailAuth.omp'

set escape off

'프로그래밍 > DB' 카테고리의 다른 글

[oracle] 제약조건 확인하기  (0) 2010.02.25
[Toad] tab 간격 조정하기  (0) 2010.02.02
[Oracle] Toad 단축키  (0) 2009.08.22
[oracle10g] 페이징 시 rownum 사용하기  (0) 2009.04.06
[Oracle] [펌] sqlplus 사용법  (0) 2009.03.24

[Objective C] 튜토리얼

프로그래밍/iPhone Dev 2009. 10. 14. 15:11 Posted by galad
http://blog.lyxite.com/2008/01/compile-objective-c-programs-using-gcc.html
http://www.otierney.net/objective-c.html

http://umaking.tistory.com/45

compile

$ gcc Fraction.m main.m  -I /home/uclick/GNUstep/Local/Library/Headers -L /home/uclick/GNUstep/Local/Library/Libraries/
 -lobjc -lgnustep-base -enable-auto-import

[Shell Script] Shell Script 문법

프로그래밍/Server 2009. 10. 14. 13:01 Posted by galad
출처: http://www.2apes.com/~chack/htdocs/unix/script/


if문 사용관련
 if test $1  // 첫번째 인자가 있으면
then
        echo "Filename: $1"
else
        echo "Input Filename!!!"
        exit 1
fi
gcc -v -o $1 $1.m -lobjc


'프로그래밍 > Server' 카테고리의 다른 글

[unix] find 명령어 사용하기  (0) 2010.02.08
[Makefile] Makefile 소개(An Introduction to Makefiles)  (0) 2009.10.23
[Shell Script] PATH추가  (0) 2009.10.14
[Tomcat] 톰캣에 https 설정하기  (0) 2009.09.02
[unix] vi명령어  (0) 2009.04.16

[Shell Script] PATH추가

프로그래밍/Server 2009. 10. 14. 13:00 Posted by galad
출처: http://mwultong.blogspot.com/2006/07/cygwin-path-linux.html

PATH=${PATH}:추가할디렉토리경로
출처: http://mitan.tistory.com/553

좋네..

행복을 느낄 수는 있어도 붙잡을 수는 없으리라. 
순간순간을 맘껏 호흡하되 연연하지 말자.
행복을 껴안기만 하고 매달리지는 않는 거야.

이렇게 살 수 있기를.
이렇게 살게 되기를.
이렇게 살아야지~ ^^;;;

[html] html 특수기호

프로그래밍/Web 2009. 9. 8. 10:13 Posted by galad
출처: http://blog.eloitcube.co.kr/35

HTML 특수문자코드표

표현문자

숫자표현

문자표현

설명

-

&#00;-&#08;

-

사용하지 않음

space

&#09;

-

수평탭

space

&#10;

-

줄 삽입

-

&#11;-&#31;

-

사용하지 않음

space

&#32;

-

여백

!

&#33;

-

느낌표

"

&#34;

&quot;

따옴표

#

&#35;

-

숫자기호

$

&#36;

-

달러

%

&#37;

-

백분율 기호

&

&#38;

&amp;

Ampersand

'

&#39;

-

작은 따옴표

(

&#40;

-

왼쪽 괄호

)

&#41;

-

오른쪽 괄호

*

&#42;

-

아스트릭

+

&#43;

-

더하기 기호

,

&#44;

-

쉼표

-

&#45;

-

Hyphen

.

&#46;

-

마침표

/

&#47;

-

Solidus (slash)

0 - 9

&#48;-&#57;

-

0부터 9까지

:

&#58;

-

콜론

;

&#59;

-

세미콜론

<

&#60;

&lt;

보다 작은

=

&#61;

-

등호

>

&#62;

&gt;

보다 큰

?

&#63;

-

물음표

@

&#64;

-

Commercial at

A - Z

&#65;-&#90;

-

A부터 Z까지

[

&#91;

-

왼쪽 대괄호

\

&#92;

-

역슬래쉬

]

&#93;

-

오른쪽 대괄호

^

&#94;

-

탈자부호

_

&#95;

-

수평선

`

&#96;

-

Acute accent

a - z

&#97;-&#122;

-

a부터 z까지

{

&#123;

-

왼쪽 중괄호

|

&#124;

-

수직선

}

&#125;

-

오른쪽 중괄호

~

&#126;

-

꼬리표

-

&#127;-&#159;

-

사용하지 않음


&#160;

&nbsp;

Non-breaking space

¡

&#161;

&iexcl;

거꾸로된 느낌표

&#162;

&cent;

센트 기호

&#163;

&pound;

파운드

¤

&#164;

&curren;

현재 환율

&#165;

&yen;

|

&#166;

&brvbar;

끊어진 수직선

§

&#167;

&sect;

섹션 기호

¨

&#168;

&uml;

움라우트

&#169;

&copy;

저작권

ª

&#170;

&ordf;

Feminine ordinal

&#171;

&laquo;

왼쪽 꺾인 괄호

&#172;

&not;

부정


&#173;

&shy;

Soft hyphen

?

&#174;

&reg;

등록상표

&hibar;

&#175;

&macr;

Macron accent

°

&#176;

&deg;

Degree sign

±

&#177;

&plusmn;

Plus or minus

²

&#178;

&sup2;

Superscript two

³

&#179;

&sup3;

Superscript three

´

&#180;

&acute;

Acute accent

μ

&#181;

&micro;

Micro sign (Mu)

&#182;

&para;

문단기호

·

&#183;

&middot;

Middle dot

¸

&#184;

&cedil;

Cedilla

¹

&#185;

&sup1;

Superscript one

º

&#186;

&ordm;

Masculine ordinal

&#187;

&raquo;

오른쪽 꺾인 괄호

¼

&#188;

&frac14;

4분의 1

½

&#189;

&frac12;

2분의 1

¾

&#190;

&frac34;

4분의 3

¿

&#191;

&iquest;

거꾸로된 물음표

A

&#192;

&Agrave;

Capital A, grave accent

A

&#193;

&Aacute;

Capital A, acute accent

A

&#194;

&Acirc;

Capital A, circumflex accent

A

&#195;

&Atilde;

Capital A, tilde

A

&#196;

&Auml;

Capital A, dieresis or umlaut mark

A

&#197;

&Aring;

Capital A, ring (Angstrom)

Æ

&#198;

&AElig;

Capital AE diphthong (ligature)

C

&#199;

&Ccedil;

Capital C, cedilla

E

&#200;

&Egrave;

Capital E, grave accent

E

&#201;

&Eacute;

Capital E, acute accent

E

&#202;

&Ecirc;

Capital E, circumflex accent

E

&#203;

&Euml;

Capital E, dieresis or umlaut mark

I

&#204;

&Igrave;

Capital I, grave accent

I

&#205;

&Iacute;

Capital I, acute accent

I

&#206;

&Icirc;

Capital I, circumflex accent

I

&#207;

&Iuml;

Capital I, dieresis or umlaut mark

Ð

&#208;

&ETH;

Capital Eth, Icelandic

N

&#209;

&Ntilde;

Capital N, tilde

O

&#210;

&Ograve;

Capital O, grave accent

O

&#211;

&Oacute;

Capital O, acute accent

O

&#212;

&Ocirc;

Capital O, circumflex accent

O

&#213;

&Otilde;

Capital O, tilde

O

&#214;

&Ouml;

Capital O, dieresis or umlaut mark

×

&#215;

&times;

Multiply sign

Ø

&#216;

&Oslash;

width="130"Capital O, slash

U

&#217;

&Ugrave;

Capital U, grave accent

U

&#218;

&Uacute;

Capital U, acute accent

U

&#219;

&Ucirc;

Capital U, circumflex accent

U

&#220;

&Uuml;

Capital U, dieresis or umlaut mark

Y

&#221;

&Yacute;

Capital Y, acute accent

Þ

&#222;

&THORN;

Capital Thorn, Icelandic

ß

&#223;

&szlig;

Small sharp s, German (sz ligature)

a

&#224;

&agrave;

Small a, grave accent

a

&#225;

&aacute;

Small a, acute accent

a

&#226;

&acirc;

Small a, circumflex accent

a

&#227;

&atilde;

Small a, tilde

a

&#228;

&auml;

Small a, dieresis or umlaut mark

a

&#229;

&aring;

Small a, ring

æ

&#230;

&aelig;

Small ae diphthong (ligature)

c

&#231;

&ccedil;

Small c, cedilla

e

&#232;

&egrave;

Small e, grave accent

e

&#233;

&eacute;

Small e, acute accent

e

&#234;

&ecirc;

Small e, circumflex accent

e

&#235;

&euml;

Small e, dieresis or umlaut mark

i

&#236;

&igrave;

Small i, grave accent

i

&#237;

&iacute;

Small i, acute accent

i

&#238;

&icirc;

Small i, circumflex accent

i

&#239;

&iuml;

Small i, dieresis or umlaut mark

ð

&#240;

&eth;

Small eth, Icelandic

n

&#241;

&ntilde;

Small n, tilde

o

&#242;

&ograve;

Small o, grave accent

o

&#243;

&oacute;

Small o, acute accent

o

&#244;

&ocirc;

Small o, circumflex accent

o

&#245;

&otilde;

Small o, tilde

o

&#246;

&ouml;

Small o, dieresis or umlaut mark

÷

&#247;

&divide;

Division sign

ø

&#248;

&oslash;

Small o, slash

u

&#249;

&ugrave;

Small u, grave accent

u

&#250;

&uacute;

Small u, acute accent

u

&#251;

&ucirc;

Small u, circumflex accent

u

&#252;

&uuml;

Small u, dieresis or umlaut mark

y

&#253;

&yacute;

Small y, acute accent

þ

&#254;

&thorn;

Small thorn, Icelandic

y

&#255;

&yuml;

Small y, dieresis or umlaut mark


'프로그래밍 > Web' 카테고리의 다른 글

[jQuery] jQuery를 이용한 팝업. div, layer  (0) 2009.12.16
[json] json 사용법  (0) 2009.12.15
[servlet] servlet  (0) 2009.09.04
[jQuery] jQuery 예제 02  (0) 2009.09.04
[javascript] IE6.0 프레임 - 가로 스크롤바 버그  (0) 2009.08.21
출처: http://khie74.tistory.com/1169521335

일단 windows에서 유닉스 환경을 사용하기 위해 cygwin을 설치.

다음은 출처의 내용을 따른다.

설치할 때 다음의 패키지를 추가한다.

gcc-core:C compiler
gcc-g++:C++ compiler(C++도 함께 사용하는 경우에)
gcc-objc:ObjC compiler

테스트해보기

에디터로 다음의 hello.h와 hello.m을 작성한다.

// hello.h
#import <objc/Object.h>

@interface Hello : Object
-(void)print;
@end

// hello.m
#import <stdio.h>
#import "hello.h"

@implementation Hello
-(void)print
{
  printf("Hello world\n");
}
@end

int main()
{
  id obj = [Hello alloc];
  [obj print];
  return 0;
}

자~ 이제 컴파일을 해보자~

gcc -v -o hello hello.m -lobjc
(옵션 -v는 컴파일 과정 출력  -0는 출력파일명지정 -lobjc는 Objective-C라이브러리 사용)

컴파일이 성공한 후, 생성된 실행파일을 실행하면 아래와 같이 "Hello world"가 콘솔에 출력된다.


http://wisdom.sakura.ne.jp/programming/objc/index.html
http://cocoadev.tistory.com/10

'프로그래밍 > iPhone Dev' 카테고리의 다른 글

[Objective C] 03 Class Level Access  (0) 2009.10.27
[Objective C] 02 Access Privledges  (0) 2009.10.27
[Objective C] 01 Creating Classes  (0) 2009.10.27
[Objective C] 환경설정  (0) 2009.10.27
[Objective C] 튜토리얼  (0) 2009.10.14

[Utils] Paros 사용법

프로그래밍/Library 2009. 9. 6. 15:20 Posted by galad

[java] 소스 분석

프로그래밍/Java 2009. 9. 6. 15:19 Posted by galad
public static void setAllowedTypes(FileUploadInfo info, SubContentInfo sinfo) throws ContentException {
        log.debug("<< setAllowedTypes >> START");
       
        Class cls = info.getClass();
        Class scls = sinfo.getClass();
        Method[] mtd = cls.getDeclaredMethods();
        Pattern p = Pattern.compile("get_fileUpload_(\\d+)FileName");
        Matcher m = null;
        String mStr = null;
        String mType = null;
        String defExt = null;
        int i;
       
        for(i = 0; i < mtd.length; i++) {
            m = p.matcher(mtd[i].getName());
            if(m.find()) {
                try {
                    // 파일명이 존재하는 경우만
                    mStr = FileUploadInfo.getValueOfMethod(info, m.group());
                    if(mStr != null) {
                        mType = FileUploadInfo.getValueOfMethod(info, "get_fileUpload_" + m.group(1) + "ContentType");
                        // 기본 확장자 지정
                        defExt = "";
                        if(mType != null) {
                            defExt = mStr.substring(mStr.lastIndexOf(".") + 1);
                            defExt = defExt.toLowerCase().trim();
                           
                            log.debug("defExt = " + defExt);
                           
                            if("jpg".equals(defExt) ||
                               "gif".equals(defExt) ||
                               "xml".equals(defExt) ||
                               "xmp".equals(defExt) ||
                               "png".equals(defExt) ||
                               "zip".equals(defExt) ) {
                                // 진행
                            }else {
                                // 오류 발생
                                throw new ContentException("지원하지 않는 파일입니다.");
                            }
                        }
                       
                        Class[] cParam = new Class[]{String.class};
                        Method cMtd = cls.getMethod("set_fileUpload_" + m.group(1) + "FileName", cParam);
                        Object[] oParam = new Object[]{mStr};
                        // FileUploadInfo에 등록
                        cMtd.invoke(info, oParam); // 마찬가지로 첫번째 인자는 실행시킬 메소드를 갖고 있는 obj, 두번째는 실제 메소드의 파라미터
                        // SubContentInfo에 등록
                        // 1. FileUPloadInfo의 FieldName을 찾는다.
                        cMtd = cls.getMethod("get_fileUpload_" + m.group(1) + "FieldName", null);
                        String tmpFieldName = (String)cMtd.invoke(info, null);
                        // 2. SubContentInfo의 의 1번의 Method에 등록한다.
                        cMtd = scls.getMethod("set" + tmpFieldName.substring(0, 1).toUpperCase() + tmpFieldName.substring(1)  , cParam);
                        cMtd.invoke(sinfo, oParam);

                    }
                }
                catch (ContentException e) {
                    log.debug("지원하지 않는 파일 예외 발생", e);
                    throw e;
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
       
    }
   
public static String getValueOfMethod(Object obj, String methodName) throws SecurityException, NoSuchMethodException,                               IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        String str = "";
        Class cls = obj.getClass(); // obj의 클래스 종류를 얻고
        Method mtd = cls.getMethod(methodName, null); // 위에서 얻은 클래스의 어떤 메소드를 얻는데, 메소드명을 인자로 받음
        str = (String)mtd.invoke(obj, null); // 위에서 얻은 메소드를 실행하는데, 그 메소드를 갖고 있는 obj를 인자로 받음?
        return str;
    }

[servlet] servlet

프로그래밍/Web 2009. 9. 4. 14:22 Posted by galad

'프로그래밍 > Web' 카테고리의 다른 글

[json] json 사용법  (0) 2009.12.15
[html] html 특수기호  (3) 2009.09.08
[jQuery] jQuery 예제 02  (0) 2009.09.04
[javascript] IE6.0 프레임 - 가로 스크롤바 버그  (0) 2009.08.21
[ajax] 소스  (0) 2009.08.19

[jQuery] jQuery 예제 02

프로그래밍/Web 2009. 9. 4. 14:22 Posted by galad