ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패턴 그리고 객체지향적 코딩의 법칙 미완(2016.03.29)
    예전에 읽은 책들/2016년 읽은 책 2025. 7. 16. 07:43

     

    Class: 공통의 성질을 가진 종류, 부류

    내가 정말 잘 올바르게 작성한 것일까? 하고 고민해 본 적이 있을 것이다.
    아쉽게도 그런 정답은 존재하지 않는다.
    장말 잘 만들어진 코드란 요구사항을 정확히 만족하는 코드이다. 그런데 현실에선 요구 사항들이 끊임없이 변하기 때문에 만족시키기란 쉽지 않다.

    개발 방법의 기본
    - 개발을 체계적으로 진행할 수 있는가?
    - 개발하기 쉬운가?
    - 관리하기 쉬운가?
    - 확장하기 쉬운가?
    - 안정적인가?
    공통점 묶기 조금만 알기
    공통점 묶기와 조금만 알기는 객체지향 언어에서 상속, 다형성, 캡슐화보다 더 중요한 개념이다. 공통점을 묶고 조금만 알기 위해 노력하다 보니 상속, 다형성, 캡슐화가 필요하게 되고 더불어 추상화, 일반화라고 세분화도 저절로 이루어지는 것이다. 


    회사에선 사원, 군대에선 군인, 편의점에선 손님

    class 사원
    {
    public:
        virtual void 건강검진()=0;
    };
    
    class 예비군
    {
    public:
        virtual void 지겨운훈련()=0;
    };
    
    class 편의점손님
    {
    public:
        virtual void 계산하기()=0;
    };



    C++ 다중 상속을 이용해 구현

    class 나초보: public 사원, public 예비군, public 편의점손님
    {
    public :// 사원
        virtual void 건강검진(){...구현...}
    public :// 예비군
        virtual void 지겨운훈련(){...구현...}
    public :// 편의점
        virtual void 계산하기(){...구현...}
    };



    나초보씨가 만났던 세 사람은 각자 클래스가 있겠지만 나초보씨와 만났던 부분에 함수

    void 닥터::건강검진(사원 a_employee)
    {
        a_employee.건강검진();
    }
    void 조교::훈련(예비군 a_reserve)
    {
        a_reserve.지겨운훈련();
    }
    void 편의점알바::물건팔기(편의점손님 a_customer)
    {
        a_customer.계산하기();
    }
    
    void Foo()
    {
        나초보    Na;
        닥터       Kim;
        조교       Yun;
        편의점알바 Oh;
    
        Kim.건강검진(Na);
        Yun.훈련(Na);
        Oh.물건팔기(Na);
    }



    모든 클래스는 하나의 책임만 가진다.

    interface : 경계면, 접점, 공유(접촉)영역


    깨끗한 코드의 선순환
    깨끗한 코드 → 새로운 요구사항 발생 → 요구사항 적용이 쉬움 → 동일성 있는 수정

    깨끗한 코드 작성하기 위한 원칙
    - 다른 개발자들에게 API를 제공한다는 마음으로 개발하라
    - 남이 봐도 쉬운 코드를 만들어라
    - 역사적인 이류를 만들지 말아라
    - 자신의 코드만 보지 말아라
    - 기존의 코드와 통일성 있는 코드를 작성하라
    - 커뮤니케이션 하라
    - 항상 1년 뒤에 이 소스를 본다면이라고 생각하라
    - 리팩토링 하라
    완벽함이란 더 이상 무엇인가를 더할 것이 없을 때 이루어지는 것이 아니라, 더 이상 무엇인가를 뺄 것이 없을 때 이루어진다. - 앙뜨완느 마리 로제 드 생떽쥐페리

    객체지향 코딩 원칙
    - 클래스가 꼭 필요한 변수와 함수만을 가지고 있는가?
    - 클래스 사이의 연관성이 너무 높지 않은가?
    - 중복된 코드가 너무 많지 않은가?
    - 클래스가 너무 크지 않은가?
    - 코드를 이해하기 쉬운가?
    - 변하는 부분과 변화지 않는 부분은 무엇인가?

    구현 퍼포먼스 향상
    - 코딩 중에는 마우스를 최대한 만지지 마라
    - 자신이 사용하는 툴의 모든 단축키를 외워라
    - 디버깅하기 쉽도록 코드를 작성하라
    - 반복되는 작업을 편하게 해줄 도구를 찾아라
    - 목적지로 가는 가장 빠른 길을 탐색하라
    - 구현 중에 흐름을 끊지 말아라

    네이밍(Naming)

    int nCount=0;
    int nMagazineCount=0, nNovelCount=0, nOthersCount=0;
    
    int nTotalBookCount=0;
    int nMagazineCount=0, nNovelCount=0, nOthersCount=0;

     

    접두사(Prefix) 붙이기
    타입
     Prefix
    예제
    bool
    b
    bool bRunning;
    int
    n
    int nIndex;
    char
    ch
    char chCode;
    float
    f
    float fRate;
    double
    dbl 
    double dblPi;
     
    팩토리 패턴
    입력 → 팩토리(Factory)→출력
     
    싱글턴 패턴은 흔히들 시스템에 하나밖에 존재하지 않는 객체의 생성과 접근을 위해 사용된다.
    p197
Designed by Tistory.