728x90

황기태 저자의 명품 C++ Programming 개정판을 읽고 학습한 내용을 정리한 포스트입니다!

https://search.shopping.naver.com/book/catalog/32436115747

 

C++ Programming : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

C++ 언어의 설계 목표?

  1. 호환성(compatability)을 유지
    • 기존에 작성된 C 프로그램을 그대로 사용할 수 있도록 C 언어의 문법적 체계를 그대로 계승
    • object file이나 library를 c++ 프로그램에서 링크하여 사용할 수 있도록 한다.
  2. 객체 지향 개념 도입
    • 소프트웨어 재사용을 통해 생상선을 높이고
    • 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지 보수를 쉽게하기 위함
    • 캡슐화, 상속, 다형성 등의 객체 지향 개념 도입
  3. 타입 체크
    • 타입 체크 엄격히 하여 실행 시간 오류의 가능성 줄이고
    • 디버깅을 돕는다
  4. 실행 시간의 효율성 저하를 최소화
    • 객체 지향 도입으로 멤버 변수의 호출이 잦아지고 이로 인한 실행 시간이 저하되는 비효율성을 막기 위해
    • 멤버 변수에 인라인 함수를 도입하는 등 함수 호출로 인한 시간 저하 막는다.

 


C 언어에 추가한 기능

  1. 함수 중복(function overloading)
    • 매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있게 함
  2. 디폴트 매개 변수(default parameter)
    • 매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 한다.
  3. 참조(reference)와 참조 변수
    • 변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입한다.
  4. 참조에 의한 호출(call-by-reference)
    • 함수 호출시 참조를 전달할 수 있게 한다.
  5. new와 delete 연산자
    • 동적 메모리 할당, 해제를 위한 new, delete 연산자를 도입한다.
  6. 제너릭 함수와 클래스(generics)
    • 함수나 클래스를 데이터 타입에 의존하지 않고 일반화시킬 수 있게 한다.

 

C++의 객체 지향 특성

 

1. 객체와 캡슐화(Encapsulation)

  • 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호
  • 캡슐의 역할 => 클래스이며 class 키워드를 이용하여 작성
  • 클래스는 객체를 정의하는 틀, 객체는 실체(instance)이다.
  • 멤버 변수와 멤버 함수로 이루어지며, public, pribate 선언 가능
  • public - 외부에 공개, private - 외부에 노출 x
class Circle{
    private:
        int radius;
    public:
        Circle(int r) { radius - r;}
        double getArea() { return 3.14*radius*radius; }
}

 

2. 상속성(Inheritance)

  • 자식이 부모로부터 유전자를 물려받는 것과 유사
  • 객체를 정의하는 class 사이에 상속 관계를 두어, 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐 아니라 부모 클래스에 선언된 멤버들도 함꼐 가지고 탄생
  • 구현된 코드의 재사용성을 높여서 소프트웨어의 생산성을 높임
class Phone {
    void call();
    void receive();
};

class MobilePhone : public Phone {
    void connectWireless();
    void recharge();
};

class MusicPhone : public MobilePhone {
    void downloadMusic();
    void play();
};

 

3. 다형성(Polymorphism)

  • 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상
  • ex) 더하기 연산자(+)는 경우에 따라 서로 다른 연산이 될 수 있다.
    • 2+3 = 5, 남자 + 여자 = 남자여자
  • c++에서는 연산자 중복(operator overloading)이라고 부름.
  • 함수 중복도 다형성의 하나이다.
  • 상속 관계에서도 나타나는데 부모 클래스에 구현된 함수를 동일한 이름으로 자식 클래스에서 다르게 구한하는 함수 재정의 or 함수 오버라이딩으로 불림

 

4. 추상화(Abstraction)

  • 객체들의 공통적인 특징을 도출하는 것
  • 클래스를 정의하는 것을 추상화라고 볼 수 있다.

 

객체 지향 개념을 도입한 목적

  1. 소프트웨어의 생산성 향상
    • sw의 lifecycle이 짧아짐에 따라 제품 기획 - 개발 기간이 짧아짐
    • 따라서, sw의 재사용을 위한 객체 지향적 장치를 활용하여 소프트웨어를 a-z 작성하는 부담을 줄인다.
  2. 실세계에 대한 쉬운 모델링
    • 과거 - 처리 과정 or 절차가 중요하여 절차 지향 언어가 적합했지만 응용 sw를 하나의절차모델링하기 어려움
    • 따라서, 관련된 많은 물체(객체)들의 상호 작용으로 묘사하는 것이 더 쉽고 적합하여 도입

 

절차 지향 vs 객체 지향

1. 절차 지향

  • C 언어 등을 이용하여 실행하고자 하는 절차대로 일련의 명령어를 나열하는 방법
  • 명령들의 순서나 흐름에 중점

2. 객체 지향

  • 각 물체 간의 관계, 상호작용 등 절차 지향으로는 표현하는데 한계가 있는 단점을 극복하기 위한 방법
  • 실제 세상에 가깝게 모델링하여 물체를 객체로 표현
  • 데이터가 어떻게 묶여 있고, 어떻게 하면 중복되는 정보 없이 더 가벼운 프로그램을 만들 수 있는 지에 중점 


 

C++ 언어와 제네릭 프로그래밍

  • 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있도록 함수와 클래스를 일반화시킨 제네릭 함수제네릭 클래스를 만들고, 개발자가 원하는 데이터 타입을 적용시켜 프로그램 코드를 틍에 찍어내는 듯이 생산하는 기법이다.
  • 대표적으로 제네릭 프로그래밍이 적용된 것은 C++의 표준 라이브러리들이다.(2/3의 표준 라이브러리를 제네릭화)
  • 입출력 라이브러리를 과감하게 템플릿으로 선언하여 제네릭화하고, 응용 프로그램 개발에 필요한 대부분의 자료 구조를 제네릭 함수와 제네릭 클래스로 구현한 STL(표준 템플릿 라이브러리)을 표준화하였다. 

C++ 표준 라이브러리

  • 개발자들이 불러 쓸 수 있는 다양한 종류의 함수와 클래스가 컴파일된 목적 파일들이다.
  • C++ 표준 라이브러리는 컴파일된 목적 파일로만 제공
  • C 라이브러리, C++ 입출력 라이브러리, STL 라이브러리 그룹이 나눠짐
  • 아래 사이트를 참고하면 된다.
728x90

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

[C++] 생성자  (1) 2023.11.27
[C++] 클래스와 객체  (1) 2023.11.27
[C++] 키보드로 문자열 입력 및 헤더 파일에 관해서  (1) 2023.11.27
[C++] C++ 프로그래밍 기본  (1) 2023.11.27
[C++] C++ 시작하기  (1) 2023.11.27