C++ 이론 기초


C++ 언어 설계 목표 4가지

 

  1. C언어로 작성된 프로그램과의 호환성
  2. 객체 지향 개념 도입으로 소프트웨어 재사용 가능
  3. 엄격한 타입 체크. 실행 시간 오류 가능성 ↓, 디버깅을 도움.
  4. 실행 시간 효율성 저하 최소화

 

C 언어에서 더 추가된 기능

 

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

 

C++ 객체 지향 특성

 

  • 객체와 캡슐화(Encapsulation)
    • 캡슐화란? 데이터를 캡슐로 싸 외부 접근으로부터 데이터를 보호하는 객체 지향 특성.
      C++에서의 캡슐 - 클래스
      클래스객체를 정의하는 틀이며, 객체는 클래스를 통해 생겨난 실체(instance)
      클래스는 멤버 변수들과 멤버 함수들로 이뤄짐. public / private으로 공개할 지 안 할지 결정 가능.
      프로그램 개발 시, 멤버 변수들은 private, 일부 멤버 함수들은 public으로 하여 간접적으로 멤버 변수에 접근하게끔 하는 방식이 좋다.
    • 예시
      class Circle {
        private:
          int radius;
        public:
          Circle(int r) { radius = r; }
          double getArea() { return 3.14*radius*radius; }
      };​
  • 상속성(Inheritance)
    • 상속이란? 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐 아니라 부모 클래스에 선언된 멤버들도 함께 가지게 되는 특성. 코드의 재사용성을 높여준다.
    • 예시
      class Figure {
        void getLength();
        void getArea();
      };​
      class Circle : public Figure {
        void painting(); 
      };​
      Circle이 Figure 클래스로부터 상속을 받아 getLength()와 getArea() 기능을 사용 가능하게 된다.
  • 다형성(Polymorphism)
    • 다형성이란? 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상.
    • 예시
      (+) 연산자
      - 정수 덧셈 ( 3 + 5 -> 8 )
      - 문자열 연결 ( "Friend" + "ship" -> "Friendship" )
      - Square 객체 + Square 객체 -> Rectangle 객체
      - void getInfo(int age) { ... }
        void getInfo(int age, string name) { ... }
        void getInfo(int age, string name, string phone) { ... }
      위와 같은 예시들을 연산자 중복(operator overloading)이라고 부른다. 
      함수와 같은 경우는 함수 중복(function overloading)이라고 한다. 모든 함수가 각각 서로 다른 함수로 다뤄진다.
    • 다형성은 상속 관계에서도 나타난다. 이는 부모 클래스에 구현된 함수를 동일한 이름으로 자식 클래스에서 다르게 구현하는 함수 재정의 혹은 함수 오버라이딩(function overriding)으로 불린다.

 

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

 

제네릭 프로그래밍(generic programming) : 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있도록 함수와 클래스를 일반화시킨 제네릭 함수(generic function)와 제네릭 클래스(generic class)를 만들고, 개발자가 원하는 데이터 타입을 적용시켜 프로그램 코드를 틀에서 찍어내듯 생산하는 기법이다.

 

C++ 프로그램 개발 과정

 

  1. C++ 소스 프로그램 작성(source program)
  2. 컴파일(compile) : C++ 소스 프로그램이 문법에 맞게 작성되었는지 검사 후, 기계어 코드로 변환해 목적 파일(object file)을 생성하는 과정.
  3. 링킹(linking) : 어떤 목적 파일이 참조하는 C++ 표준 라이브러리나 다른 목적 파일 속에 있는 함수, 객체, 데이터를 포함해 실행에 필요한 모든 기계어 코드를 확보해 하나의 실행 파일로 만드는 과정.
    DLL - 실행 중 필요한 순간에 결합하도록 만들어진 라이브러리. 실행 파일 크기를 줄이며, 여러 응용프로그램이 실행 중에 공유한다.
  4. 하나의 실행 파일(executable file) 완성!

 

C++ 표준 라이브러리

 

C++ 표준 라이브러리는 개발자들이 불러 쓸 수 있는 다양한 종류의 함수와 클래스가 컴파일된 목적 파일들. 다음의 세 그룹과 기타 기능으로 나뉜다.

  • C 라이브러리 : 기존 C 표준 라이브러리를 수용해 C++에서 사용할 수 있게 한 함수들. 이름이 c로 시작하는 헤더 파일에 선언됨.
  • C++ 입출력 라이브러리 : 콘솔 및 파일 입출력을 위한 함수와 클래스들로서, 제네릭 프로그래밍을 지원하기 위해 템플릿으로 작성. 
  • C++ STL 라이브러리 : 제네릭 프로그래밍을 지원하기 위해 템플릿으로 작성된 유용한 함수와 클래스를 포함하는 라이브러리.
  • C 라이브러리  C++ 입출력 라이브러리 C++ STL 라이브러리
    - csetjmp
    - cassert
    - csignal
    - cctype
    - cstdarg
    - cerrno
    - cstddef
    - cfloat
    - cstdio
    - ciso646
    - cstdlib
    - climits
    - cstring
    - clocale
    - ctime
    - cmath
    - fstream
    - strstream
    - iomanip
    - streambuf
    - ios
    - iosfwd
    - iostream
    - ostream
    - istream
    - sstream
    - exception
    - list
    - stack
    - locale
    - stdexcept
    - functional
    - map
    - memory
    - string
    - numeric
    - typeinfo
    - utility
    - queue
    - valarray
    - iterator
    - set
    - vector
    - deque
    - limits
    - new
    ※ <new> 헤더 파일은 STL에 포함되지 않는 기타 기능을 구현했음.

 

 

 

+ Recent posts