ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Effective C++] 1. C++를 언어들의 연합체로 바라보는 안목은 필수
    C_C++ 프로그래밍/Effective C++ 2019. 8. 26. 15:45


          로재의 개발 일기      

    C++은 언어들의 연합체

    c++을 잘 사용하기 위해서는 c++을 하나의 언어로 보기보다는

    c++을 하나의 연합체로 보는 것이 좋습니다.

    즉 c++이 여러 개의 하위 언어를 제공한다는 점을 제기하는 것입니다.

    그렇다고 막연한 이야기는 아닙니다. 4개 밖에 없기 때문이죠.


      1. C

     C++은 여전히 C 기반이기 때문에, C만 쏙 빼서 사용이 가능합니다.

     하지만, 이렇게 개발을 하기 된다면 효과적인 프로그래밍을 위한 규칙을 적용할 수 없게 됩니다.

     템플릿도 없고, 예외도 없고, 오버로딩도 없고.... 등등 말입니다..


      2. 객체 지향 개념의 C++

     '클래스를 사용하는 C'에 관한 이야기입니다.

     생성자와 소멸자, 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩)까지 포함합니다.


      3. 템플릿 C++

     요즘 어지간히 괜찮은 C++ 프로그램이라면 템플릿 구문을 하나 쯤 발견할 수 있습니다.

     이 템플릿의 강력함이 너무 크다보니 새로운 프로그래밍 메타가 나왔으니

     이름하여 '템플릿 메타프로그래밍' (TMP)라고 불리우게 됩니다.


      4. STL

     STL은 이름에서 알 수 있듯이 템플릿 라이브러리입니다.

     하지만 대단히 특별하며,  컨테이너 알고리즘 함수 객체 벡터 등등

    다양한 규약을 가지며 많은 프로그래머들이 사용하고 잇습니다.



      pass by value vs pass by reference

    이 부분은 대부분의 개발자들은 값에 의한 참조가 효율적이라고 생각할 겁니다.



      passbyvalue.cpp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include<iostream>
     
    // argument x is pass by function addOne
     
    void addOne(int x);
     
    int main(){
        int value;
        std::cout << "Insert any number" << '\n';
        std::cin >> value;
        addOne(value);
     
        return 0;
    }
     
    void addOne(int x){
        x++;
        std::cout << x << '\n';
    }
     
    cs



      passbyreference.cpp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include<iostream>
     
    // argument x is pass by reference
     
    void addOne(int &x);
     
    int main(){
            int value;
            std::cout << "Insert any number" << '\n';
            std::cin >> value;
            addOne(value);
            return 0;
    }
     
    void addOne(int &x){
            x++;
            std::cout << x << '\n';
    }
     
    cs


    하지만!  C++은 여러 언어의 연합체이기 때문에

    어떻게 쓰는 가에 따라서 장단점이 나뉘게 됩니다.


    C style, STL => 값에 의한 참조가 유리하게 작동합니다.

    객체 지향 C++, 템플릿 C++ => 참조자에 의한 전달이 유리해 집니다.


    참조에 의한 전달입니다.

    1
    2
    3
    4
    5
    // v is reference value 
     
    void addOne(int& v){
        v = v + 1
    }
    cs


    하지만 const reference value를 사용하면

    값을 변경할 수 없게 됩니다. (컴파일 에러)

    1
    2
    3
    4
    5
    // v is const reference value 
     
    void addOne(const int& v){
        v = v + 1;         // const는 값을 변경할 수 없다.
    }
    cs

    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다


    반응형
Designed by Tistory.