2013년 1월 31일 목요일

Objective-C Chapter 4.2


#import <Foundation/Foundation.h>
//import 부분 : 파일에 있는 정보를 그대로 가져오라는 명령어
//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;
}
-(void) clear
{
    accumulator = 0;
}
-(double) accumulator
{
    return accumulator;
}
-(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, char *argv[])
{
    @autoreleasepool {
        Calculator *deskCalc = [[Calculator alloc] init];
        [deskCalc setAccumulator : 100.0];
        [deskCalc add : 200.0];
        [deskCalc divide : 15.0];
        [deskCalc subtract : 10.0];
        [deskCalc multiply : 5];
        NSLog(@"The result is %g", [deskCalc accumulator]);
    }
    return 0;
}

Objective-C Chapter 4.1


#import <Foundation/Foundation.h> 
//import 부분 : 파일에 있는 정보를 그대로 가져오라는 명령어
//Foundation.h 파일을 불러온 이유는 프로그램에서 사용할 다른 클래스와 함수에 대한 정보가 들어있기 때문


int main(int argc, char *argv[])
{
    @autoreleasepool {
        int integerVar = 100;
        float floatingVar = 331.79;
        double doubleVar = 8.44e+11;
        char charVar = 'w';
        
        NSLog(@"integerVar = %i", integerVar);
        NSLog(@"floatingVar = %f", floatingVar);
        NSLog(@"doubleVar = %e", doubleVar);
        NSLog(@"doubleVar = %g", doubleVar);
        NSLog(@"charVar = %c", charVar);
        
        int a1 = 100;
        int b1 = 2;
        int c1 = 25;
        int d1 = 4;
        // 위에것을 한번에 표현가능
        // int a1 = 100, b1 = 2, c1 = 25, d1 = 4;
        int result;
        
        result = a1 - b1;
        NSLog(@"a1 - b1 = %i", result);
        result = b1 * c1;
        NSLog(@"b1 * c1 = %i", result);
        result = a1 / c1;
        NSLog(@"a1 / c1 = %i", result);
        result = a1 + b1* c1;
        NSLog(@"a1 + b1 * c1 = %i", result);
        result = (a1 + b1) * c1;
        NSLog(@"(a1 + b1) * c1 = %i", result);
        // 대수의 기본규칙과 동일한 순서로 계산됨
        NSLog(@"a1 + b1 + c1 * d1 = %i", a1 * b1 + c1 * d1);
        // 변수의 할당 없이 NSLog에 인수로 넘겨도 유효
        
        int a2 = 25;
        int b2 = 2;
        float c2 = 25.0;
        float d2 = 2.0;
        
        NSLog(@"6 + a2 / 5 * b2 = %i", 6 + a2 / 5 * b2);
        NSLog(@"a2 / b2 * b2 = %i", a2 / b2 * b2);
        // 결과값이 24가 나오는 이유는 정수계산떄문이다 25 / 2 = 12(12.5로 저장되지 않음, 정수이기때문) 그리고 곱하기 2 그래서 24
        NSLog(@"c2 / d2 * d2 = %f", c2 / d2 * d2);
        NSLog(@"-a2 = %i", -a2);
        // 음수 인식
        NSLog(@"b2 * -a2 + b2 = %i", b2 * -a2 + b2);
        
        // 나머지 값 구할때 % 연산자 이용
        int a3 = 25, b3 = 5, c3 = 10, d3 = 7;
        NSLog(@"a3 %% b3 = %i", a3 % b3); // 나머지가 0
        NSLog(@"a3 %% c3 = %i", a3 % c3); // 나머지가 5
        NSLog(@"a3 %% d3 = %i", a3 % d3); // 나머지가 4
        NSLog(@"a3 / d3 * d3 + a3 %% d3 = %i", a3 / d3 * d3 + a3 % d3);
        
        // % 연산자도 곱하기와 나누기처럼 더하기뺴기 연산자보다 먼저 사용
        NSLog(@"a3 + c3 %% d3 = %i", a3 + c3 % d3);
        // 계산결과가 2로 나오지 않고 28로 나옴
        
        float f1 = 123.125, f2;
        int i1, i2 = -150;
        
        i1 = f1;
        NSLog(@"%f assigned to an int produces %i", f1, i1);
        f1 = i2;
        NSLog(@"%i assigned to an int produces %f", i2, f1);
        f1 = i2 / 100
        NSLog(@"%i divided by 100 produces %f", i2, f1);  // 예상값은 -1.50000 아니라 -1.0000
        f2 = i2 / 100.0;
        NSLog(@"%i divided by 100.0 produces %f", i2, f2); // 100.0 으로 나누었기때문에 -1.50000
        f2 = (float) i2 / 100;
        NSLog(@"(float) %i divided by 100 produces %f", i2, f2);
        // 연산중 둘중 하나의 수가 부동소수점 상수의 수라면 연산은 부동소수점 연산을 따름
        
        // 대입연산자
        a3 += 10// a3 = a3 + 10 동일의미
        NSLog(@"%i", a3);
        b3 -= 10// b3 = b3
        NSLog(@"%i", b3);
        c3 /= (a3 + b3)/15;
        NSLog(@"%i", c3);
    }
    return 0;
}

Objective-C Chapter 3.2

#import <Foundation/Foundation.h> 
//import 부분 : 파일에 있는 정보를 그대로 가져오라는 명령어
//Foundation.h 파일을 불러온 이유는 프로그램에서 사용할 다른 클래스와 함수에 대한 정보가 들어있기 때문



// 3.9 연습문제 7번
// 1. interface 부분
@interface Coordi : NSObject
-(void) print;
-(void) setXcoordi : (int) x;
-(void) setYcoordi : (int) y;
////////////////////////////////// 추가부분
-(int) xCoordi;
-(int) yCoordi;
@end

// 2. implementation 부분
@implementation Coordi
{
    int xCoordi;
    int yCoordi;
}
-(void) print
{
    NSLog(@"(%i,%i)",xCoordi,yCoordi);
}
-(void) setXcoordi : (int) x
{
    xCoordi = x;
}
-(void) setYcoordi : (int) y
{
    yCoordi = y;
}
/////////////////////////////////// 추가부분
-(int) xCoordi
{
    return xCoordi;
}
-(int) yCoordi
{
    return yCoordi;
}
@end

// 3. Programing 부분
int main (int argc, char *argv[])
{
    @autoreleasepool {
        Coordi *myCoordi = [[Coordi alloc] init];
        [myCoordi setXcoordi:5];
        [myCoordi setYcoordi:7];
        NSLog(@"Coordination is");
        [myCoordi print];
        // 다음 명령어가 들어가려면 interface 부분과 implementation 부분에 myCoordi 와 yCoordi 변수를 선언해줘야함
        NSLog(@"Coordination is (%i,%i)",[myCoordi xCoordi],[myCoordi yCoordi]);
    }
    return 0;
}

Objective-C Chapter 3.1


#import <Foundation/Foundation.h> 
//import 부분 : 파일에 있는 정보를 그대로 가져오라는 명령어
//Foundation.h 파일을 불러온 이유는 프로그램에서 사용할 다른 클래스와 함수에 대한 정보가 들어있기 때문



//@interface 부분 : 클래스와 메서드 선언
   //@implementation 부분 : 데이터 요소와 메서드를 구현하는 실제코드가 담겨있는 부분
   //Program 부분 : 프로그램이 달성하려는 목적을 실행하는 프로그램 코드가 담겨있는 부분


// 1. interface 부분
// Fraction : 클래스명 , NSObject : 부모클래스(superclass)라고 하며 이 클래스는 NSObject.h 파일에 정의되어있고, 이파일은 Foundation.h 를 임포트하면 자동적으로 프로그램에 포함된다
@interface Fraction : NSObject

// - 로 시작 : 인스턴트 메서드 , + 로 시작 : 클래스 메서드
-(void) print;
// (처음괄호) 부분 : 반환할 형태, void 경우는 반환할 값이 없을때 사용, print 는 메서드 이름
-(void) setNumerator : (int) n;
// ":" 부분은 인수를 받음을 표시, (뒤 괄호) 부분은 인수 타입, int 경우 정수로 인수된다는 의미, n 은 인수 이름
-(void) setDenominator : (int) d;
/////////////////////////////////////////
-(int) numerator;
-(int) denominator;

@end


// 2. implementation 부분
@implementation Fraction
// 맴버(인스턴트 변수) 선언 부분
{
    int numerator;
    int denominator;
}
// 메서드 정의 부분
-(void) print // 메서드 부분 끝에 세미콜론(;) 대신 메서드 코드가 중괄호 안에 들어있음
{
    NSLog(@"%i/%i", numerator, denominator);
}
-(void) setNumerator : (int)n // setNumerator 메서드는 n 이라고 부르는 정수 인수를 인스턴트 변수 numerator 에 저장
{
    numerator = n;
}
-(void) setDenominator : (int)d // setDenominator 메서드는 d 이라고 부르는 정수 인수를 인스턴트 변수 denominator 에 저장
{
    denominator = d;
}
////////////////////////////////////
-(int) numerator;
{
    return numerator;
}
-(int) denominator;
{
    return denominator;
}

@end


// 3. Program 부분
// main 내부에서 myFraction 이라는 변수를 정의
int main (int argc, char *argv[])
{
    @autoreleasepool {
        Fraction *myFraction; // 이 줄은 myFraction 이 Fraction 클래스 하나의 객체라는 의미, 변수명 앞에는 *표시를 붙임
        // Fraction 의 인스턴트를 하나 생성하고 초기화한다
        // Fraction 값을 저장할 객체가 생김 ... 바로 myFraction
        
        // 새로 만드는 작업
        myFraction = [Fraction alloc]; // alloc 는 allocate(할당하다) 의 줄임말, 새로운 분수에 필요한 메모리 공간을 할당, alloc 메서드는 부모클래스(superclass)로부터 왔음
        myFraction = [myFraction init]; // init 는 initialize(초기화하다) 의 줄임말, 초기화 하는 메서드
        
        // 한번에 myFraction = [[Fraction alloc] init]; 로 쓸 수 있음, 안쪽의 대괄호가 먼저 실행 됨
        // 선언+생성+초기화 한번에 Fraction *myFraction = [[Fraction alloc] init];
        
        // 분수의 값을 1/3로 지정한다
        [myFraction setNumerator: 1]; // 첫 명령문은 myFraction 에 setNumerator: 메세지를 보낸다란 의미, 인수로 넘어가는 값은 1
        [myFraction setDenominator: 3];
        // print 메서드를 사용해 fraction을 표시한다
        
        NSLog(@"The value of my Fraction is:");
        [myFraction print];
        ///////////////////////////////////////////////////
        NSLog(@"The value of my Fraction is: %i/%i", [myFraction numerator],[myFraction denominator]);
        ///////////////////////////////////////////////////
        
        Fraction *frac1 = [[Fraction alloc] init];
        Fraction *frac2 = [[Fraction alloc] init];

        // 첫번째 분수의 값을 2/3로 설정한다
        [frac1 setNumerator: 2];
        [frac1 setDenominator: 3];

        // 두번째 분수의 값을 3/7로 설정한다
        [frac2 setNumerator: 3];
        [frac2 setDenominator: 7];

        // 분수를 표시한다
        NSLog(@"First fraction is :");
        [frac1 print];
        NSLog(@"Second fraction is :");
        [frac2 print];
    }
    return 0;
}

Objective-C Chapter 2

#import <Foundation/Foundation.h> 
//import 부분 : 파일에 있는 정보를 그대로 가져오라는 명령어
//Foundation.h 파일을 불러온 이유는 프로그램에서 사용할 다른 클래스와 함수에 대한 정보가 들어있기 때문

int main(int argc, const char * argv[])
// 이 프로그램의 이름은 main
// int 부분 : main이 반환하는 값이 정수임을 나타냄
// "{" "}" 중괄호 부분에 모든 프로그램 명령어가 실행됨 따라서 중괄호 안에 명령어들을 집어넣어야 함
// 명령어의 끝은 세미콜론 ";" 으로 표현함

{
    // @autoreleasepool : 개인의 어플리케이션이 객체를 생성하며 사용하는 메모리를 시스템이 효과적으로 관리하도록 하는 기법
    //                    @autoreleasepool 이 명령어 안에는 하나의 명령문만 존재해야 함
    
    @autoreleasepool {
        
        // NSLog : NSString 객채라고 하며, 간단한 인수를 표시하거나 로깅(Logging)하는 함수
        NSLog(@"Programming is fun!");
        
        // TRY 문장표시추가 : NSLog 코드 추가
        NSLog(@"And programming in Objective-C is even fun!");

        // TRY "/n" 이용해서 한줄띄우기
        NSLog(@"Programming is fun!\nAnd programming in Objective-C is even fun!");
        
        // TRY 변수값 표시해보기
        int sum; // int 는 integer(정수) 의 약자
        
        sum=50+25;
        
        NSLog(@"The sum of 50 and 25 is %i", sum); // %i : NSLog 함수가 이해하는 특수문자 % + 정수값 i
        
        // TRY 측정결과 예측해보기
        int value1, value2, sum12;
        
        value1 = 50;
        value2 = 25;
        sum12 = value1 + value2;

        NSLog(@"The sum of %i and %i is %i", value1, value2, sum12);
        // %i %i %i 결과 예측해보기
        
        // 2.5 연습문제 2번
        NSLog(@"In Objective-C, lowercase letters are significant.\nmain is where program execution begins.\nOpen and closed braces enclose program statements in a routine.\nAll program statements must be terminated by a semicolon.");
        
        // 2.5 연습문제 3번
        int a;
        a = 1;
        NSLog(@"Testing...");
        NSLog(@"....%i", a);
        NSLog(@"...%i", a+1);
        NSLog(@"..%i", a+2);
        
        // 2.5 연습문제 4번
        int p41, p42, psum4;
        p41 = 87;
        p42 = 15;
        psum4 = p41 + p42;
        NSLog(@"The sum of %i and %i is %i", p41, p42, psum4);
        
        // 2.5 연습문제 5번 (오류수정)
        int psum5; // INT 대문자 > 소문자 int
        // COMPUTE RESULT
        psum5 = 25 + 37 - 19;
        // DISPLAY RESULTS
        NSLog(@"The answer is %i", psum5); // 따음표 두개짜리 사용해야함(조심)
        
        // 2.5 연습문제 6번
        int panswer6, presult6;
        panswer6 = 100;
        presult6 = panswer6 - 10;
        NSLog(@"The result is %i\n", presult6 + 5); // result 값은 presult6 + 5 한 95 값이 나옴
        
         
         // [ ?   ? ]; 의미는  :  [ 객체(인스턴트)or클래스 <한칸띠고> 매서드(method) ];
         // 위에것의 의미 : 객채나 클래스에 method 행위를 한다!
         // 다음은 차를 예를들어 설명
         
        // [classOrInstance method];
        // [receiver message];
        
        // yourCar = [Car new];  // Car : 클래스, yourCar : 객체(인스턴트), new : 클래스 매서드(method)
        // [yourCar prep];
        // [yourCar drive];  // 운전한다 : 인스턴트 매서드(method)
        // [yourCar wash];
        // [yourCar getGas];
        // [yourCar service];
        
        // [yourCar topDown];
        // [yourCar topUp];
        // currentMileage = [yourCar odometer];
        
        // [yourCar setspeed: 55];

        // [sistersCar drive];
        // [sistersCar wash];
        // [sistersCar getGas];
         
        // 차를 예로 들기는 했지만 우리가 이용할 객체는 창, 사각형, 텍스트조각, 계산기, 재생목록 등등 컴퓨터와 관련된것
        // [myWindow erase];  // 창의 내용을 삭제한다
        // theArea = [myRect area];  // 사각형 영역을 계산한다
        // [userText spellCheck];  // 텍스트의 철자를 검사한다
        // [deskCalculator clearEntry];  // 마지막 입력내용을 삭제한다
        // [favoritePlaylist showSongs];  // 선호하는 곡 목록에서 곡을 보여준다
        // [phoneNumber dial];  // 전화번호로 전화를 건다
        // [myTable reloadData];  // 갱신된 표의 데이터를 보여준다
        // n = [aTouch tapCount];  // 화면이 눌린 횟수를 저장한다
        
        
        // 분수를 처리하는 클래스 (numerator : 분자, denominator : 분모)
        int numerator = 1;
        int denominator = 3;
        NSLog(@"The fraction is %i/%i", numerator, denominator);
        
        // 위와 같은결과 다른방법..
        int numeratorEx1, denominatorEx1;
        numeratorEx1 = 1;
        denominatorEx1 = 3;
        NSLog(@"The fraction is %i/%i", numeratorEx1, denominatorEx1);
        
    }
    
    return 0;
    // return 0 : main 의 실행을 종료하고 상태값 0을 돌려주거나 혹은 반환하도록 함
    
}