[전공]

[명품 C++] 01 C++ 시작

danhan 2022. 6. 2. 11:04

참고 :

  • 명품 C++ Programming (저자 황기태)
  • 객체지향프로그래밍

 

프로그래밍 언어

  • 기계어 - 어셈블리어 - 고급언어
  • 어셈블러 : 어셈블리어 프로그램을 기계어 코드로 변환
  • 컴파일러 : 고급 언어로 작성된 프로그램을 기계어 코드로 변환
  • 컴파일 : 고급 프로그램을 기계어 프로그램으로 변환하는 과정

C++ 언어의 역사

  • 연대순 C → C++ → JAVA → C#
  • C언어에 객체 지향 특성(object oriented programming) 및 기능 추가
  • C++은 C언어의 모든 기능 유지
  • C++ 표준
    • 1998년 ANSI(American National Standards Institue)에서 표준 설정
    • 그 후 C++ 표준 계속 진화
    • 표준의 중요성
      • 모든 플랫폼, 모든 표준 C++ 컴파일러에 의해 컴파일 가능
      • 어떤 컴퓨터에서도 동일한 실행 결과 보장
      • 운영체제와 컴파일러의 종류에 관계없는 높은 호환성

C++ 주요 설계 목적

호환성 Compatability

  • C 문법 체계 계승
    • 소스 - C 프로그램 그대로 사용
    • 링크 - C 목적 파일과 라이브러리 링크하여 사용

객체 지향 개념 도입

  • 캡슐화, 상속, 다형성
  • 소프트웨어의 재사용을 통해 생산성 향상
  • 소프트웨어의 작성, 관리, 유지보수 용이

엄격한 타입 체크

  • 실행 시간 오류의 가능성 줄임
  • 디버깅 편이

실행 시간의 효율성 저하 최소화

  • 인라인 함수 도입 등으로 잦은 멤버 함수 호출로 인한 시간 저하 막음

C언어에 추가한 기능

  • 함수 중복 fuction overloading overloading - 매개 변수에 따라 함수가 중복됨 overriding - 객체에 따라 원하는 데로 바꿔씀
  • 디폴트 매개 변수 default parameter
  • 참조와 참조 변수 reference
  • 참조에 의한 호출 call by reference
  • new / delete 연산자
  • 연산자 재정의
  • 제네릭 함수와 클래스

객체 지향 특성

캡슐화 Encapsulation - class

  • 데이터를 클래스 class로 싸서 외부의 접근으로부터 보호
  • 내부에서 동작하는 것을 외부에서 볼 수 없음
  • 클래스 - 객체를 만드는 틀 (class는 객체(실체)가 아님)
  • 객체 - 클래스에서 생겨난 실체 (객체 object == 실체 instance)
  • 캡슐화의 목적
    • 외부 접근 제한
    • 객체 내 데이터에 대한 보안, 보호

상속성 Inheritance

  • 객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생

다형성 Polymorphism

  • 하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 현상
  • 연산자 중복, 함수 중복, 함수 재정의 overriding

객체 지향 도입 목적

  • 소프트웨어 생산성 향상
    • 소프트웨어의 생명 주기 단축 문제 해결
    • 기작성된 코드의 재사용
  • 절차 지향 프로그래밍
    • 실행하고자 하는 절차대로 일련의 명령어 나열
    • 흐름도를 설계하고 흐름도에 따라 프로그램 작성
  • 객체 지향 프로그래밍
    • 객체들을 정의하고 객체들의 상호 관계, 상호작용으로 구현

제네릭 프로그래밍

  • 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화
  • generic function, generic class
  • template 키워드로 선언

C언어와의 호환성 추구

  • 장점 - 기존에 개발된 C 프로그램 코드 활용
  • 단점 - 캡슐화의 원칙이 무너짐 (전역 변수와 전역 함수 사용)

프로그램 개발 과정

  • 소스 파일.cpp → 컴파일 → 목적 파일.obj → 링킹 → 실행 파일.exe → 실행
  • 소스 파일은 텍스트 파일
  • 컴파일 - 소스 파일을 기계어를 가진 목적 파일로 변환
  • 링킹 - 목적 파일끼리 합쳐 실행 파일을 만드는 과정 (목적 파일은 바로 실행 불가능) - 목적 파일과 C++ 표준 라이브러리의 함수 연결
  • 실행 파일 - 독립적으로 바로 실행 가능
  • 디버깅 - 실행 중 발생한 오류를 찾는 과정

C++ 표준 라이브러리

  • C 라이브러리
  • C++ 입출력 라이브러리
  • C++ STL 라이브러리 - 제너릭 프로그래밍을 지원하기 위한 탬플릿 라이브러리