BLOG ARTICLE Programming | 8 ARTICLE FOUND

  1. 2010.08.25 클래스 모델링 연습
  2. 2010.08.25 객체지향 사고 다지기
  3. 2010.08.25 메모리 내의 문자열 검색 2

클래스 모델링 연습

Programming 2010. 8. 25. 17:22 Posted by 알 수 없는 사용자


우리가 가지고 있는 객체와 클래스의 기초 지식을 바탕으로 가상 모델링을 해보도록 하겠습니다. 가상 모델링으로 구축할 시스템은 바로 가상 축구 게임 입니다. 이제부터 클래스를 정의하고 동작(Method)을 정의하는 요령을 익혀 보도록 합시다.

1. 게임에 필요한 대상이나 동작같은 요소들을 모두 적습니다.

사람, 공격수, 슛, 패스, 골키퍼, 펀칭, 태클, 축구공, 전반전, 팀, 선수, 수비수, 심판, 파울, 경기시간, 후반전 등등...

2. 적어 놓은 요소들 중에는 동사와 명사가 있습니다. 명사는 클래스가 되고, 동사는 메서드가 되는 것입니다.

클래스(명사) : 사람, 공격수, 골키퍼, 축구공, 전반전, 팀, 선수, 수비수, 심판, 경기시간, 후반전
메서드(동사) : 슛, 패스, 펀칭, 태클

3. 다음은 클래스 안의 메서드를 정리 합니다.



4. 설계 된 클래스들의 연관을 살펴보고, 상속과 추상 or 다형성의 개념을 도입합니다. 이번 단계는 앞서 우리가 공부한 객체 지향의 설계 방법을 활용할 수 있는 단계입니다.




처음 단순하게 늘어 놓았던 단어들이 한 단계, 한 단계 정리 되면서 제법 폼 있는 설계도가 완성 되었습니다. 클래스 모델링이라고 해서 절대 대단한 것이 있는 것이 아닙니다. 누구나 쉽게 설계하고 모델링 할 수 있습니다.

우리가 게임이든 어떤 소프트웨어든 프로그래밍 하기 전에 가장 먼저 해야 할 중요한 작업이 클래스 모델링의 과정입니다. 체계적인 뼈대를 갖추고 프로그래밍을 하는 것과 뼈대를 세워가면서 프로그래밍을 하는 것은 확연히 차이가 나게 됩니다.

객체 지향적 사고는 한 번에 자신의 머리 속에 장착되는 것이 아닙니다. 반드시 직접 설계해보고 토론해보고, 또 생각해보는 반복적인 노력을 해야 합니다. 그럼 어느새 내가 만든 프로그램은 뼈대가 생기게 될 것이고, 더욱 논리적인 프로그램을 만들 수 있을 것입니다.


<참고 사이트>
[1] http://www.hoons.kr

AND

객체지향 사고 다지기

Programming 2010. 8. 25. 16:48 Posted by 알 수 없는 사용자

객체 지향적인 프로그래밍을 하기 위해서는 객체의 특성을 자유롭게 활용 하도록 노력해야만 합니다. 객체 지향적인 사고를 다지기 전에 객체와 클래스에 대한 개념을 짚고 넘어가겠습니다.




위 그림은 붕어빵과 붕어빵을 만드는 틀 입니다. 객체를 설명할 때 가장 흔하게 쓰는 비유입니다. 붕어빵이라는 객체를 만들기 위해서는 붕어빵을 찍어 낼 틀(Template)이 필요합니다. 이것이 클래스라고 할 수 있죠.

비록 초보적인 수준에서 사용되는 비유이긴 하지만 나름대로 꼼꼼히 바라보면 많은 것을 얻을 수 있습니다. 혹 100개의 붕어빵을 만들기 위해서 100개의 붕어빵 틀이 필요한 것은 아니겠죠? 단 하나의 붕어빵 틀로도 수없이 많은 붕어빵을 만들어 낼 수 있습니다. 마찬가지로 하나의 클래스로 수많은 객체를 만들어 낼 수 있는 것입니다.

그러나 하나의 붕어빵 틀로는 한가지 모양의 붕어빵 밖에는 얻을 수 없습니다. 만일 다른 모양의 붕어빵을 얻고자 한다면 모양이 다른 붕어빵 틀이 필요할 것입니다. 붕어빵을 만드는 사람의 입장에서 붕어빵 틀을 또 만들거나 구입하는 것은 비용이 드는 일입니다. 그렇지만, 새로운 형태의 붕어빵을 만든다면 히트를 쳐서 더 많은 수입을 올릴 수 도 있는 일이죠. ^^

마찬가지로 객체를 만들어내기 위한 클래스를 어떻게 정의하느냐는 명확한 정답이 없는 문제입니다. 경험과 직관을 요하는 일이죠.

붕어빵과 붕어빵 틀의 관계를 잘 이해했다면 어느 정도는 객체와 클래스의 관계를 이해할 수 있을 것입니다. 다음과 같은 수식으로도 양자의 관계를 설명할 수 있습니다.

객체 : 클래스 = 인스턴스 : 템플릿

인스턴스(Instance)라는 말은 하나의 예가 될 수 있는 일, 상황이나 사람을 의미합니다. 템플릿(Template)은 지침이 되는 틀을 칭하는 것입니다. 따라서 템플릿(클래스)은 인스턴스(객체)의 공통점을 뽑아낸 것이죠. 같은 붕어빵 틀로 찍어낸 붕어빵들도 모양이나 맛이 조금씩 다른 것처럼 하나의 템플릿에 의해 만들어진 인스턴스라고 할지라도 고유한 면을 갖게 됩니다.

객체의 속성에는 다음과 같은 것들이 있습니다.

추상화 (Abstraction)
상속성 (Inheritance)
다형성 (Polymorphism)
캡슐화 (Encapsulation)
주체성 (Identity)
분류성 (Classification)

각 속성에 대한 세부 내용은 따로 적지 않겠습니다 .^^;

객체 지향 기술의 근본적인 개념은 주어진 문제를 이해하고, 모델링하는 시각에 있습니다. 객체 지향에서는 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 보며, 객체들은 서로 정보를 주고받아 상호 작용한다고 여깁니다.

절차 중심의 재래식 방법은 주어진 문제와 소프트웨어에 대한 시각이 전혀 다릅니다. 객체 지향 개념은 소프트웨어를 여러 개의 객체의 모임으로 생각하여 객체는 데이터와 관련 함수를 모아 놓은 것을 말합니다. 즉, 관련된 자료와 함수를 객체로 묶어 놓고 이들의 상호 작용에 의하여 작업이 수행됩니다.

그럼 객체 지향적 설계 방법은 어떤 순서로 진행 되어야 하는지 그 방법을 정리해 보겠습니다.

1. 구현 할 대상(객체)를 선별합니다.
    => 남자, 여자를 구분해 낸 것처럼 연관성 있는 객체들을 분별해 냅니다.

2. 중복 요인을 확인합니다.
    => 중복되는 부분을 뽑아내어 하나의 부모 클래스로 묶는 작업을 말합니다.

3. 상속 받은 후, 각자의 특징대로 클래스를 다시 정의합니다.
    => 고객 클래스를 상속 받은 후 남자, 여자, 중성과 같이 나누는 작업을 말합니다.

객체 지향에는 정답이 없습니다.


"이렇게 설계하는 것이 객체 지향적으로 설계하는 것이다."라는 것은 극히 주관적인 말이 되는 것입니다. 하지만 효율적인 객체 지향 프로그래밍을 하기 위해서는 객체의 특성을 자유롭게 활용 하도록 노력해야만 합니다.



AND

메모리 내의 문자열 검색

Programming/C/C++ 2010. 8. 25. 03:51 Posted by 알 수 없는 사용자

메모리 내에서 찾고자 하는 문자열을 검색하는 코드입니다.
다음 코드는 system()함수 내에서 "/bin/sh" 문자열을 찾는 예제입니다.

int main(int argc, char **argv)
{
        long shell;

        shell = 0xdeadbeef;     // system()함수 주소

        while(memcmp((void *)shell, "/bin/sh", 8))
                shell++;

        printf("\"/bin/sh\" is at 0x%x\n", shell);
        printf("print %s\n", shell);

        return 0;
}

'Programming > C/C++' 카테고리의 다른 글

디스어셈블 라이브러리 목록(Disassem Library List)  (0) 2013.06.10
[C++] String to Hex 변환  (0) 2012.10.12
AND