카테고리에 대한 전반적 설명 : http://soooprmx.com/wp/archives/2436

 

카테고리는 한 클래스를 확장할때 자식 클래스를 생성하지않고도 확장할수있는 방법이다.

 

다음과 같이 Fraction 클래스가 있을 때  add, mul, sub, div 메소드를 더 추가하고 싶다면 다음과 같이 하면된다.

 

아래 예제를 보면 앞쪽에 Fraction 클래스를 명시하고 (카테고리명)을 추가시켜주면 된다.

 

#import <Foundation/Foundation.h>

#import "Fraction.h"

 

@interface Fraction (MathOps)

-(Fraction *)add:(Fraction *)f;

-(Fraction *)mul:(Fraction *)f;

-(Fraction *)sub:(Fraction *)f;

-(Fraction *)div:(Fraction *)f;

@end

 

@implementation Fraction (MathOps)

-(Fraction *)add:(Fraction *)f{

    Fraction *result = [[Fraction alloc]init];

    

    result.numerator = (self.numerator * f.denominator) + (self.denominator * f.numerator);

    result.denominator = self.denominator * f.denominator;

    [result reduce];

    

    return result;

}

-(Fraction *)sub:(Fraction *)f{

    Fraction *result = [[Fraction alloc]init];

    

    result.numerator = (self.numerator * f.denominator) - (self.denominator * f.numerator);

    result.denominator = self.denominator * f.denominator;

    [result reduce];

    

    return result;

}

-(Fraction *)mul:(Fraction *)f{

    Fraction *result = [[Fraction alloc] init];

    

    result.numerator = self.numerator * f.numerator;

    result.denominator = self.denominator * f.denominator;

    [result reduce];

    

    return result;

}

 

-(Fraction *)div:(Fraction *)f{

    Fraction *result = [[Fraction alloc] init];

    result.numerator = self.numerator * f.denominator;

    result.denominator = self.denominator * f.numerator;

    [result reduce];

    

    return result;

}

@end

 

 

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

    @autoreleasepool {

        Fraction *a = [[Fraction alloc] init];

        Fraction *b = [[Fraction alloc] init];

        Fraction *result;

        

        [a setTo: 1 over: 3];

        [b setTo: 2 over: 5];

        

        [a print];

        NSLog(@" +");

        [b print];

        NSLog(@"-----");

        result = [a add:b];

        [result print];

        NSLog(@"\n");

        

        [a print];

        NSLog(@" -");

        [b print];

        NSLog(@"-----");

        result = [a sub:b];

        [result print];

        NSLog(@"\n");

        

        [a print];

        NSLog(@" *");

        [b print];

        NSLog(@"-----");

        result = [a mul:b];

        [result print];

        NSLog(@"\n");

        

        [a print];

        NSLog(@" /");

        [b print];

        NSLog(@"-----");

        result = [a div:b];

        [result print];

        NSLog(@"\n");

        

        

    }

    return 0;

}

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

C언어의 enum과 동일하다..

 

main.m

 

#import <Foundation/Foundation.h>

 

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

    @autoreleasepool {

        enum month {ja = 1, fe, ma, ap, may, ju, jul, au, se, oc ,no, de};

        enum month amonth;

        int days;

        

        NSLog(@"Enter month number: ");

        scanf("%i", &amonth);

        

        switch(amonth) {

            case ja:

            case ma:

            case may:

            case au:

            case oc:

            case de:

                days = 31;

                break;

            case ap:

            case ju:

            case se:

            case no:

                days = 30;

                break;

            case fe:

                days = 28;

                break;

            default:

                NSLog(@"Bad month number");

                days = 0;

                break;

                

        }

        

        if(days != 0)

            NSLog(@"Number of days is %i", days);

        

        if(amonth == fe)

            NSLog(@"... or 29 if it's a leap year");

    

    }

    return 0;

}

 

실행 화면 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

 

위와 같이 프로젝트를 구성한우 아래 소스를 입력한다.

 

Fraction.h

 

#import <Foundation/Foundation.h>

 

@interface Fraction : NSObject

 

//아래와 같이 하면 자동으로 세터(setter) 게터(getter) 생성된다.

@property int numerator, denominator;

 

-(void) print;

-(void) setTo: (int) n over: (int) d;

-(double) convertToNum;

-(Fraction *) add: (Fraction *) f;

-(void) reduce;

 

@end

 

Fraction.m

 

 

#import "Fraction.h"

 

@implementation Fraction

 

 

//세터(setter) 게터(getter) 생성시 반드시 아래와 같이 해줘야함

@synthesize numerator, denominator;

 

-(void) print{

    NSLog(@"%i/%i", numerator, denominator);

}

 

-(double) convertToNum{

    if(denominator != 0)

        return (double) numerator / denominator;

    else

        return NAN;

}

 

-(void) setTo: (int) n over:(int) d{

    numerator = n;

    denominator = d;

}

 

-(Fraction *) add: (Fraction *) f{

    Fraction *result = [[Fraction alloc] init];

    

    result.numerator = numerator * f.denominator + denominator * f.numerator;

    result.denominator = denominator * f.denominator;

 

    [result reduce];

    

    return result;

}

 

//최대 공약수를 구해서 numerator denominator 나눠주는 함수

-(void) reduce{

    int u = numerator;

    int v = denominator;

    int temp;

    

    while(v != 0){

        temp = u % v;

        u = v;

        v = temp;

    }

    

    numerator /= u;

    denominator /= u;

    

 

    

}

 

@end

 

Complex.h

#import <Foundation/Foundation.h>

 

@interface Complex : NSObject

 

@property double real, imaginary;

 

-(void) print;

-(void) setReal:(double)a andImaginary:(double)b;

-(Complex *) add:(Complex *)f;

 

@end

 

Complex.m

 

#import <Foundation/Foundation.h>

#import "Complex.h"

 

@implementation Complex : NSObject

 

@synthesize real, imaginary;

 

-(void) print{

    NSLog(@" %g + %gi ", real, imaginary);

}

 

-(void) setReal:(double)a andImaginary:(double) b{

    real = a;

    imaginary = b;

}

 

-(Complex *) add:(Complex *)f{

    Complex *result = [[Complex alloc] init];

    

    result.real = real + f.real;

    result.imaginary = imaginary + f.imaginary;

    

    return result;

}

 

@end

 

 

main.m

 

#import <Foundation/Foundation.h>

#import "Complex.h"

#import "Fraction.h"

 

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

    @autoreleasepool {

        id dataValue;//id형은 어떤 클래스의 객체든 저장할 있다.

        Fraction *f1 = [[Fraction alloc] init];

        Complex *c1 = [[Complex alloc] init];

        

        [f1 setTo:2 over:5];

        [c1 setReal:10.0andImaginary:2.5];

        

        //dataValue 분수를 대입한다.

        dataValue = f1;

        [dataValue print];

        

        //dataValue 복소수를 대입한다.

        dataValue = c1;

        [dataValue print];

        

    }

    return 0;

}

 

 

실행 화면

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

부모 메소드를 자식에서 재정의 할 수 있다.

 

 

#import <Foundation/Foundation.h>

 

//Class A 선언 정의

 

@interface ClassA: NSObject{

    int x;

}

 

-(void) initVar;

 

@end

 

@implementation ClassA

-(void) initVar{

    x = 100;

}

@end

 

//Class B 선언 정의

 

@interface ClassB: ClassA

-(void) initVar;

-(void) printVar;

@end

 

@implementation ClassB

-(void) initVar{

    x = 200;

}

 

-(void) printVar{

    NSLog(@"x = %i", x);

}

 

@end

 

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

    @autoreleasepool {

        ClassB *b = [[ClassB alloc] init];

        

        [b initVar];//ClassB에서 재정의한 메소드를 사용한다.

        

        [b printVar];//x값을표시

    

    

    }

    return 0;

}

 

실행 화면

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

@class지시어를 사용하면 그 클래스 형식의 인스턴스 변수를 만나게 될 때 컴파일러에게 그 클래스가 무엇인지 알려준다.

 

이것대신 헤더파일을 import해도 상관 없다.

 

Rectangle.h

#import <Foundation/Foundation.h>

 

@classXYPoint;//이러한 클래스가 쓰인다는 것만 알려줌 대신 import 헤더파일을 불러와도

 

@interface Rectangle: NSObject

 

@property int width, height;

 

-(XYPoint *) origin;//추가됨

-(void) setOrigin: (XYPoint *) pt;

-(int) area;

-(int) perimeter;

-(void) setWidth: (int) w andHeight: (int) h;

@end

 

Rectangle.m

#import "Rectangle.h"

 

@implementation Rectangle

{

    XYPoint *origin;

}

@synthesize width, height;

 

-(void) setWidth: (int) w andHeight: (int)h{

    width = w;

    height = h;

}

 

-(void) setOrigin:(XYPoint *)pt{//origin 초기화메소드

    origin = pt;

}

 

-(int) area{

    returnwidth*height;

}

 

-(int) perimeter{

    return (width + height) * 2;

}

-(XYPoint *) origin{

    return origin;

}

@end

 

XYPoint.h

#import <Foundation/Foundation.h>

 

@interface XYPoint: NSObject

 

@propertyint x, y;

//setX xVal 저장됨 andY yVal 저장됨

-(void) setX: (int) xVal andY: (int) yVal;

 

@end

 

XYPoint.m

#import "XYPoint.h"

 

@implementation XYPoint

 

@synthesize x, y;

 

-(void) setX:(int)xVal andY:(int)yVal{

    x = xVal;

    y = yVal;

}

 

@end

 

main.m

 

#import <Foundation/Foundation.h>

#import "Rectangle.h"

#import "XYPoint.h"

 

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

    @autoreleasepool {

        Rectangle *myRect = [[Rectangle alloc] init];

        XYPoint *myPoint = [[XYPoint alloc] init];

        

        [myPoint setX: 100 andY: 200];

        

        [myRect setWidth: 5 andHeight: 8];

        myRect.origin = myPoint;

        

        NSLog(@"Rectangle w = %i, h = %i", myRect.width, myRect.height);

        NSLog(@"Origin at (%i, %i)", myRect.origin.x, myRect.origin.y);

        

        NSLog(@"Area = %i, Perimeter = %i", [myRect area], [myRect perimeter]);

        

    }

    return 0;

}

 

실행 화면

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

상속을 이해하기 위한 간단한 예제를 만들어 봅시다.

 

먼저 Rectangle클래스는 NSObject 클래스를 상속받고 Square클래스는 Rectangle클래스를 상속받습니다.

 

그리고 Rectangle클래스에서는 멤버변수들을 @property 지정을 해서 자동으로 게터와 세터 메소드를 생성시킵니다.

 

그런뒤 Square클래스에서는 self.width 를 통해 부모클래스의 width값을 접근할 수 있습니다.(게터 메소드에 의해서)

 

Rectangle.h

#import <Foundation/Foundation.h>

 

@interface Rectangle: NSObject

 

@property int width, height;

-(int) area;

-(int) perimeter;

-(void) setWidth: (int) w andHeight: (int) h;

@end

 

Rectangle.m

#import "Rectangle.h"

 

@implementation Rectangle : NSObject

 

@synthesize width, height;

 

-(void) setWidth: (int) w andHeight: (int)h{

    width = w;

    height = h;

}

 

-(int) area{

    returnwidth*height;

}

 

-(int) perimeter{

    return (width + height) * 2;

}

 

@end

 

Square.h

#import "Rectangle.h"

 

@interface Square : Rectangle

-(void) setSide: (int) s;

-(int) side;

@end

 

Square.m

#import "Square.h"

 

@implementation Square: Rectangle

 

-(void) setSide: (int) s{

    //기존의메소드를활용함

    [selfsetWidth: s andHeight: s];

}

 

-(int) side{

    returnself.width;//게터 메소드를 활용

}

 

@end

 

main.m

#import <Foundation/Foundation.h>

#import "Rectangle.h"

#import "Square.h"

 

 

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

    @autoreleasepool {

        Rectangle *myRect = [[Rectangle alloc] init];

        Square *mySquare = [[Square alloc] init];

        

        [myRect setWidth:5 andHeight: 8];

        [mySquare setSide: 5];

        

        NSLog(@"Rectangle: w = %i, h = %i", myRect.width, myRect.height);

        NSLog(@"Area = %i, Perimeter = %i", [myRect area], [myRect perimeter]);

        

        

        NSLog(@"Square s = %i", [mySquare side]);//Square클래스의 side 메소드이용

        NSLog(@"Area = %i, Perimeter = %i", [mySquare area], [mySquare perimeter]);//상속받은메소드이용

        

    }

    return 0;

}

 

출력 화면

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

기본적으로 모든 클래스는 NSObject를 상속받는다. 

 

이것만 유의하고 다음 예제를 보면 쉽게 상속을 이해할 수 있다.

 

 

#import <Foundation/Foundation.h>

 

//ClassA 선언과 정의

@interface ClassA: NSObject{

    int x;

}

 

 

-(void) initVar;

@end

 

@implementation ClassA

-(void) initVar{

    x = 100;

}

@end

 

//ClassB 선언과 정의 ClassA로부터 상속 받음

@interface ClassB : ClassA

-(void) printVar;//ClassB만의 고유 함수

@end

 

@implementation ClassB

-(void) printVar{

    NSLog(@"x = %i", x);

}

@end

 

 

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

    

    @autoreleasepool {

        ClassB *b = [[ClassB alloc] init];

        

        [b initVar];//상속받은메소드사용

        [b printVar];//x값을표시

        

        

    }

    return 0;

}

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

 

Fraction.h 파일에서 멤버 변수에 @property를 지정해주면 자동으로

 

세터 함수와 게터 함수가 생성된다. Fraction.m파일에서는 @synthesize 를 멤버변수에 해줘야함..

 

Fraction.h

 

 

#import <Foundation/Foundation.h>

 

@interface Fraction : NSObject

 

//아래와 같이 하면 자동으로 세터(setter) 게터(getter) 생성된다.

@property int numerator, denominator;

 

-(void) print;

-(void) setTo: (int) n over: (int) d;

-(double) convertToNum;

-(void) add: (Fraction *) f;

-(void) reduce;

 

@end

 

 

Fraction.m

 

 

 

#import "Fraction.h"

 

@implementation Fraction

 

 

//세터(setter) 게터(getter) 생성시 반드시 아래와 같이 해줘야함

@synthesize numerator, denominator;

 

-(void) print{

    NSLog(@"%i/%i", numerator, denominator);

}

 

-(double) convertToNum{

    if(denominator != 0)

        return (double) numerator / denominator;

    else

        return NAN;

}

 

-(void) setTo: (int) n over:(int) d{

    numerator = n;

    denominator = d;

}

 

-(void) add: (Fraction *) f{

    numerator = numerator * f.denominator + denominator * f.numerator;

    denominator = denominator * f.denominator;

}

 

//최대 공약수를 구해서 numerator denominator 나눠주는 함수

-(void) reduce{

    int u = numerator;

    int v = denominator;

    int temp;

    

    while(v != 0){

        temp = u % v;

        u = v;

        v = temp;

    }

    

    numerator /= u;

    denominator /= u;

    

}

 

@end

 

main.m

 

 

#import <Foundation/Foundation.h>

#import "Fraction.h"

 

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

    @autoreleasepool {

        Fraction *aFraction = [[Fraction alloc] init];

        Fraction *bFraction = [[Fraction alloc] init];

        

        [aFraction setTo: 1 over: 4];//첫번째인자는 1 두번째인자는 4설정

        [bFraction setTo: 1 over: 2];

        

        [aFraction print];

        NSLog(@"+");

        [bFraction print];

        NSLog(@"=");

        

        [aFraction add:bFraction];

        

        //덧셈 결과를 약분하고 표시한다.

        

        [aFraction reduce];

        [aFraction print];

    }

    return 0;

}

 

 

실행 화면

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

 

위와 같이 Fraction 클래스부분과 메인 부분을 나눈다.

다음은 인터페이스부분인 Fraction.h 이다.

 

 

 

#import <Foundation/Foundation.h>

 

//Fraction 클래스

@interface Fraction : NSObject

 

-(void) print;

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

-(int) numerator;

-(int) denominator;

-(double) convertToNum;

 

@end

 

다음은 구현부분인 Fraction.m이다.

 

 

#import "Fraction.h"

 

@implementation Fraction{

    int numerator;

    int denominator;

}

 

-(void) print{

    NSLog(@"%i%i", numerator, denominator);

}

 

-(void) setNumerator:(int)n{

    numerator = n;

}

 

-(void) setDenominator:(int)d{

    denominator = d;

}

 

-(int) numerator{

    returnnumerator;

}

 

-(int) denominator{

    returndenominator;

}

 

-(double) convertToNum{

    if(denominator != 0)

        return (double) numerator / denominator;

    else

        return NAN;

}

 

@end

 

마지막으로 메인함수 부분이다.

#import <Foundation/Foundation.h>

#import "Fraction.h"

 

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

    @autoreleasepool {

        Fraction *myFraction = [[Fraction alloc] init];

        

        [myFraction setNumerator: 1];

        [myFraction setDenominator: 3];

        

        NSLog(@"The value of myFraction is:");

        [myFraction print];

        

    

    }

    return 0;

}

 

결과 화면

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

이름이 Cocoa Touch Class로 바꼈네요..






출처 : https://teamtreehouse.com/community/where-in-xcode-61-is-the-objectivec-class


블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

 

for문은 C언어와 사용법이 같다. 

 

 

#import <Foundation/Foundation.h>

 

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

    @autoreleasepool {

        int n, number, triangularNumber;

        

        NSLog(@"Whata&number);

        

        triangularNumber = 0;

        

        for(n=1; n <= number; ++n)

            triangularNumber += n;

        

        NSLog(@"NUMBER %i is %i\n", number, triangularNumber);

        

    }

    return 0;

}

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

클래스 사용법을 위한 간단한 예제소스입니다.

 

다음 예제를 이해하여서 클래스 및 메소드 정의법을 알아봅시다.

 

 

#import <Foundation/Foundation.h>

 

 

    

    @interface Calculator : NSObject

    

    //누산기 메소드

    -(void) setAccumulator : (double) value;

    -(void) clear;

    -(double) accumulator;

    

    //산술 연산 메소드

    -(void) add: (double) value;

    -(void) subtract: (double) value;

    -(void) multiply: (double) value;

    -(void) divide: (double) value;

    @end

    

    @implementation Calculator{

        double accumulator;

    }

    

    -(void) setAccumulator: (double) value {

        accumulator = value;

    }

 

    -(double) accumulator{

        returnaccumulator;

    }

 

    -(void) clear{

        accumulator = 0;

    }

    

    -(void) add: (double) value {

        accumulator += value;

    }

    

    -(void) subtract: (double) value{

        accumulator -= value;

    }

    

    -(void) multiply: (double) value {

        accumulator *= value;

    }

    

    -(void) divide: (double) value {

        accumulator /= value;

    }

    

    @end

 

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

    @autoreleasepool {

        Calculator *deskCalc = [[Calculator alloc] init];

        

        [deskCalc setAccumulator: 100.0];

        [deskCalc add: 200.];

        [deskCalc divide: 15.0];

        [deskCalc subtract: 10.0];

        [deskCalc multiply: 5];

        NSLog(@"The result is %g", [deskCalc accumulator]);

    }

    return 0;

}

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

Objective C에서는 크게 3부분으로 나뉘는데

1. @interface : 클래스, 메소드 선언

2. @implementation : 메소드 구현

3. 프로그램 : 실행 프로그램 코드

예제를 보면

//클래스 이름을 Fraction 부모는 NSObject 한다.

@interface Fraction : NSObject

 

//클래스안에메소드를선언함

-(void) print;

-(void) setNumerator: (int) n;//n넘겨주는파라미터임

-(void) setDenominator: (int) d;

 

@end

 

여기서는 Fraction이라는 클래스는 3개의 메소드를 가지고있다.

Fraction클래스는 NSObject라는 클래스를 상속받고 있다.

 

그리고

 

//@implementation 부분

@implementation Fraction{

    int numerator;

    int denominator;

    

}

-(void) print//결과값을 출력하는 메소드

{

    NSLog(@"%i/%i"numeratordenominator);//변수를출력함

}

 

-(void) setNumerator:(int)n

{

    numerator = n;

}

 

-(void)setDenominator:(int)d

{

    denominator = d;

}

@end

 

여기서는 실제 메소드를 작성하고있다.

메소드 작성시 -로 시작해야되며 그다음 반환값을 쓴다.

반환값이 int면 -(int) function_name 이런식으로 작성하게 된다.

그리고 :(int) n은 하나의 정수인수가 메소드로 넘겨진다는 뜻이다. 인수가 없다면

-(void) function_name{} 로 콜론이 없다.

 

//프로그램부분

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

    @autoreleasepool {

        Fraction *myFraction;

        

        //Fraction 인스턴스를 생성한다

        myFraction = [Fraction alloc];

        myFraction = [myFraction init];

        

        //1/3 분수의 값을 설정한다.

        [myFraction setNumerator : 1];

        [myFraction setDenominator3];

        

        //print메서드로 분수의 값을 표시한다.

        NSLog(@"값은?");

        [myFraction print];

        

    }

    return 0;

}

 

여기는 실제 메인 함수부분이다.

Fraction 형 객체인 myFraction을 선언하였다.

그리고 아래 부분은  실제 메소드를 호출하는 부분이다.

       //1/3 분수의 값을 설정한다.

        [myFraction setNumerator : 1];

        [myFraction setDenominator3];

        

이로써 간단한 클래스 및 메소드 구현후 호출방법을 알아보았다.

 

예제 전체 파일.

 


#import <Foundation/Foundation.h>

 

//@interface 부분

 

//클래스 이름을 Fraction 부모는 NSObject 한다.

@interface Fraction : NSObject

 

//클래스안에메소드를선언함

-(void) print;

-(void) setNumerator: (int) n;//n넘겨주는파라미터임

-(void) setDenominator: (int) d;

 

@end

 

//@implementation 부분

@implementation Fraction{

    int numerator;

    int denominator;

    

}

-(void) print//결과값을 출력하는 메소드

{

    NSLog(@"%i/%i"numeratordenominator);//변수를출력함

}

 

-(void) setNumerator:(int)n

{

    numerator = n;

}

 

-(void)setDenominator:(int)d

{

    denominator = d;

}

@end

 

//프로그램부분

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

    @autoreleasepool {

        Fraction *myFraction;

        

        //Fraction 인스턴스를 생성한다

        myFraction = [Fraction alloc];//메모리 공간 할당 NSObject에서 상속받은 함수

        myFraction = [myFraction init];//초기화부분

        //두줄을 myFraction = [[Fraction alloc] init];으로 결합가능

        

        //1/3 분수의 값을 설정한다.

        [myFraction setNumerator : 1];//아래 1 3파라미터값임

        [myFraction setDenominator3];

        

        //print메서드로 분수의 값을 표시한다.

        NSLog(@"값은?");

        [myFraction print];//print 메소드호출함

        

    }

    return 0;

}

 

실행화면

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그