3. C++ 언어의 특징

2023. 3. 10. 17:28·C++/[책 정리] 명품 C++ 프로그래밍
C++ 언어의 주요한 설계 목표

1. C언어로 작성된 프로그램과의 호환성

=> 기존에 작성된 C 프로그램을 그대로 사용할 수 있도록 C언어의 문법적 체계를 그대로 계승

 

2. 객체 지향 개념을 도입

- 소프트웨어 재사용 = 생산성 up

- 데이터 캡슐화 = 복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지 보수를 쉽게 하기 위함

- 상속

- 다형성

 

3. 타입 체크 엄격

=> 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다

 

4. 효율성 저하 최소화

=> 멤버 함수의 호출이 잦아지고 이로 인해 실행 시간이 저하되는 비효율성을 막기 위해 멤버 함수에 인라인 함수를 도입하는 등 함수 호출로 인한 시간 저하를 막는다


C언어에 추가한 기능

*C++ 언어는 C 언어의 문법적 규칙을 그대로 승계하며, 프로그래밍의 편리와 다양성을 위해 다음과 같은 기능을 추가함

 

- 함수 중복 (function overloading)

매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있게 한다

 

- 디폴트 매개 변수 (default parameter)

매개 변수에 값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수를 선언할 수 있게 한다

 

- 참조 (reference)

변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입한다

 

- 참조에 의한 호출 (call-by-reference)

함수 호출시 참조를 전달할 수 있게 한다

 

- new와 delete 연산자

동적 메모리 할당, 해제를 위한 new, delete 연산자를 도입한다

 

- 연산자 재정의 (operator overloading)

기존의 연산자에 새로운 연산을 정의할 수 있게 한다

 

- 재네릭 함수와 클래스 (generics)

함수나 클래스를 데이터 타입에 의존하지 않고 일반화시킬 수 있게 한다


C++의 객체 지향 특성

- 객체와 캡슐화 (Encapsulation)

캡슐화

=> 데이터를 캡슐로 싸서 외부의 접근으로부터 데이터를 보호

 

클래스

=> C++에서 캡슐의 역할을 함, class 키워드를 이용하여 작성

 

객체 (instance)

  • 클래스라는 틀에서 생김
  • C++ 클래스는 멤버 변수들과 멤버 함수로 이루어짐
  • 멤버들은 캡슐 외부에 공개(public), 보이지 않게(private) 선언할 수 있다
  • 공개(public)된 멤버들만 외부 객체들이 접근 가능

 

C++로 추상화한 Circle 클래스

==> private에 있는 변수는 외부에서 접근 불가

 

 

- 상속성 (Inheritance)

=> C++에서 상속은 객체를 정의하는 클래스사이에 상속 관계를 두어, 자식 클래스의 객체가 생성될 때 자식 클래스에 선언된 멤버뿐만 아니라 부모 클래스에 선언된 멤버들도 함께 가지고 탄생

 

상속

구현된 코드의 재사용성을 높여서 소프트웨어 생산성을 높인다

 

 

=> 휴대 전화기 클래스는 전화기 클래스의 기능을 물려받고, 음악 기능 전화기 클래스는 휴대 전화기 클래스의 기능을 물려받음

 

 

- 다형성 (Polymorphism)

=> 하나의 기능이 경우에 따라 서로 다르게 보이거나 다르게 작동하는 현상

 

연산자 중복 (operator overloading)

+ 연산자는 정보 덧셈이나 문자열 연결 (concentration), 객체 더하기 등 피연산자에 따라 서로 다른 연산이 이루어질 수 있다

 

함수 중복 (function overloading)

같은 이름의 함수가 매개 변수의 개수나 타입이 다르면 서로 다른 함수로 인식

void add(int a, int b) {...}
void add(int a, int b, int c) {...}
void add(int a, double d) {...}

 

함수 재정의 또는 함수 오버라이딩 (function overriding)

==> 강아지, 고양이, 닭은 모두 동물 클래스의 속성으 상속받고, '소리내기' 함수를 강아지, 고양이, 닭에서 서로 다르게 구현


C++ 언어에서 객체 지향 개념을 도입한 목적

- 소프트웨어의 생산성 향상

이미 만들어진 C++ 클래스를 상속받거나 C++ 객체를 가져다 재사용하거나, 부분 수정을 통해, 소프트웨어를 작성하는 부담을 대폭 줄일 수 있다

 

- 실세계에 대한 쉬운 모델링

객체 지향 언어는 게임에 등장하는 각 요소를 객체로 정의하고, 객체의 속성과 행위를 묘사하고 객체 사이의 상호 작용을 표현하는 방법으로 효관적인 프로그래밍을 할 수 있음


절차 지향 프로그래밍과 객체 지향 프로그래밍

- 절차 지향 프로그래밍

  • C 언어 등을 이용하여 실행하고자 하는 절차대로 일련의 명령어를 나열하여 프로그래밍
  • 흐름도를 설계하고 흐름도상의 동작들을 함수로 작성하여 흐름도에 따라 이련의 동작들이 순서에 맞추어 실행되도록 작성

 

- 객체 지향 프로그래밍

  • 실제 세상에 가깝게 모델링하여 실제 세상의 물체를 객체로 표현
  • 객체를 추출하고 객체들의 관계를 결정하고 이들의 상호 작용을 멤버 함수와 멤버 변수로 구현

 


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

- 제네릭 프로그래밍

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

 

- STL (Standard Template Library)

입출력 라이브러리를 탬플릿 (template)으로 선언하여 제네릭화하고, 응용 프로그램 개발에 필요한 대부분의 자료 구조를 제네릭 함수와 제네릭 클래스로 구현


C++ 언어의 아킬레스

C++ 언어는 C 코드와의 호환성이라는 중요한 목표로 설계되어 기존의 C 코드를 재사용 가능하지만, C 코드를 수용하다보니 객체 지향의 핵심 개념인 캡슐화의 원칙이 다소 무너짐

저작자표시 (새창열림)

'C++ > [책 정리] 명품 C++ 프로그래밍' 카테고리의 다른 글

6. Visual Studio를 이용한 C++ 프로그램 개발  (0) 2023.03.10
5. C++ 표준 라이브러리  (0) 2023.03.10
4. C++ 프로그램 개발 과정  (0) 2023.03.10
2. C++ 언어의 역사  (0) 2023.03.10
1. 컴퓨터와 프로그래밍  (0) 2023.03.10
'C++/[책 정리] 명품 C++ 프로그래밍' 카테고리의 다른 글
  • 5. C++ 표준 라이브러리
  • 4. C++ 프로그램 개발 과정
  • 2. C++ 언어의 역사
  • 1. 컴퓨터와 프로그래밍
smile blog
smile blog
건국대 첨단바이오공학부 & 컴퓨터공학부 BT & IT 기술로 희망을 꿈 꿉니당
  • smile blog
    스마일 블로그
    smile blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (840)
      • 일상 생각들 (4)
        • 일상 (4)
      • 학과에 대해 (4)
        • 첨단바이오공학부 (4)
        • 컴퓨터공학부 (0)
      • -------- 프로젝트 -------- (0)
      • [DS] 토이 프로젝트 (1)
      • [Web, Game, XR] 토이 프로젝트 (11)
      • 경진대회 (1)
      • -------- 진로 -------- (0)
      • 생물정보학자 (19)
        • 데이터 과학이란? (0)
        • 되는 방법 (9)
        • 책 추천 (2)
        • 인강 (1)
        • 대학 (2)
        • 회사 (1)
        • 학원 (2)
        • 학회 (2)
      • 디지털 헬스케어 (72)
        • 방법 (8)
        • 생각들 (10)
        • 공부법 (4)
        • 책 추천 (2)
        • 학원 (2)
        • 참고 (2)
        • 대학 (3)
        • 회사 (3)
        • 인강 (2)
        • 게임 엔진들 (1)
        • 게임 프로그래머 개론 (2)
        • 게임 프로그래머 취업 전략 가이드 (7)
        • 취업 서류 (1)
        • 애정하는 게임들 (4)
        • XR 테크니컬 아티스트 (9)
        • 영화, 애니메이션 테크니컬 디렉터 (12)
      • 유전상담사 (0)
      • -------- 기초 학문 -------- (0)
      • 생명과학 이야기 (2)
        • 대학 강의 (2)
      • 화학 이야기 (0)
      • 컴퓨터과학 이야기 (0)
      • 통계학 이야기 (0)
      • 수학 이야기 (1)
        • 공학 수학 (1)
      • 영어 이야기 (1)
      • 심리학 이야기 (7)
        • 현대인과 정신건강 (7)
      • -------- 컴퓨터 언어 -------- (0)
      • Python (3)
        • 나도코딩의 파이썬 입문 (1)
        • 파이썬 관련 정보 (1)
      • SQL (0)
      • C 언어 (32)
        • 혼자 공부하는 C언어 요약 (1)
        • [책 정리] 혼자 공부하는 C언어 (31)
      • C++ (33)
        • 명품 C++ 프로그래밍 요약 (1)
        • [책 정리] 명품 C++ 프로그래밍 (27)
        • C++ STL (0)
        • 뇌를 자극하는 C++ STL (5)
      • -------- 생명과학 -------- (0)
      • 생화학 (8)
        • 대학 강의 (8)
      • 분자세포생물학 (6)
        • 대학 강의 (6)
      • 유전자치료공학 (4)
        • 대학 강의 (4)
      • 생명정보학 (7)
        • 대학 강의 (7)
      • 약리학 (2)
        • 대학 강의 (2)
      • -------- 컴퓨터과학 -------- (0)
      • 자료구조와 알고리즘 (8)
        • 자료구조와 알고리즘의 정의 (3)
        • [책 정리] C언어로 쉽게 풀어쓴 자료구조 요약 (1)
        • [인강] 자료구조와 알고리즘 (2)
        • 코딩 테스트 대비하기! (1)
      • 컴퓨터 회로 (0)
      • 컴퓨터 구조 (43)
        • 컴퓨터 구조와 운영체제 요약 (1)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 구조 및 설계 (1)
        • Ch1. 컴퓨터 추상화 및 관련 기술 (8)
        • Ch2. 명령어 : 컴퓨터 언어 (11)
        • Ch3. 컴퓨터 연산 (8)
        • Ch4. 프로세서 (11)
        • Ch5. 메모리 계층구조 (3)
        • Ch6. 병렬 프로세서 : 클라이언트에서 클라우드까지 (0)
      • 시스템 프로그래밍 (15)
        • [책 정리] 시스템 프로그래밍 유닉스 & 리눅스 (0)
        • [인강] 리눅스 시스템 프로그래밍 (2)
        • 리눅스에서 코딩이란? (8)
        • 대학교 강의 정리 (5)
      • 운영체제 (0)
      • 컴퓨터 네트워크 (37)
        • 모두의 네트워크 요약 (1)
        • [책 정리] 모두의 네트워크 (10)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 네트워킹 하향식 접근 8판 (1)
        • Ch1. 컴퓨터 네트워크와 인터넷 (7)
        • Ch2. 애플리케이션 계층 (7)
        • Ch3. 트랜스포트 계층 (8)
        • Ch4. 네트워크 계층 : 데이터 평면 (3)
        • Ch5. 네트워크 계층 : 제어 평면 (0)
        • Ch6. 링크 계층과 근거리 네트워크 (0)
        • Ch7. 무선 및 이동 네트워크 (0)
        • Ch8. 컴퓨터 네트워크 보안 (0)
      • 데이터베이스 (1)
      • -------- 데이터과학 -------- (0)
      • 데이터 사이언스 (8)
        • 인강 (8)
      • 데이터 분석 (2)
        • 인강 (2)
      • 머신러닝 (2)
        • 대학 수업 (2)
      • 인공지능 (11)
        • 대학교 강의 정리 (10)
        • 인공지능 관련 정보 (1)
      • -------- +a -------- (0)
      • Visual Studio Community (7)
        • 설치법 (1)
        • 단축키 (1)
        • 오류 (5)
      • Visual Studio Code (0)
      • 노션 (1)
      • 깃허브 (7)
        • 깃허브 사용법 (5)
        • 유니티, 언리얼 & 깃허브 (1)
        • 깃허브 주의사항 (1)
      • 챗GPT 활용법 (0)
      • 기타 feat. 프로그래밍 (7)
        • 프로그래머로 살아남기 (5)
        • 코딩 vs 프로그래밍 (1)
        • 애플 비전 프로 (1)
      • 메타버스 (5)
      • -------- 예술 -------- (0)
      • 음악 (1)
      • 미술 (0)
      • -------- XR -------- (0)
      • 유니티 이야기 (23)
        • 레트로의 유니티 게임 프로그래밍 에센스 요약 (4)
        • 유니티 관련 정보 (1)
        • 유니티 디버깅 (13)
        • 유니티 인강 (3)
        • 대학교 게임 프로그래밍 강의 (2)
      • 언리얼 이야기 (0)
        • 인생 언리얼 교과서 요약 (0)
      • 컴퓨터 그래픽스 (6)
        • OpenGL (6)
      • 가상현실 & 증강현실 (4)
        • 유니티 vr (4)
      • HCI 와 UI UX (7)
        • [책 정리] HCI 개론 (6)
      • -------- Design -------- (0)
      • 캐릭터 (1)
        • 모델링 (0)
        • 리깅 (1)
      • 포토샵 (3)
      • 3ds Max (7)
      • Maya (9)
        • 블로그 (1)
        • 인강 (6)
        • 대학교 (2)
      • Blender (14)
        • 책 (1)
        • 인강 (7)
        • 기타 (3)
        • 대학교 (3)
      • 아트 작업물들 (2)
      • 에셋 사이트 (1)
      • -------- 건강관리 -------- (0)
      • 건강관리 ft. 정현 (12)
        • 목 디스크 (2)
        • 눈 관리 (2)
        • 일상생활 습관 (6)
        • 일상생활 꿀팁 (2)
        • 사무직 꿀팁 (0)
      • 헬스의 정석 ft. 정현 (28)
        • 헬스와 건강 (8)
        • 헬스 구체화 정보 (6)
        • 헬스 유튜버 (1)
        • 헬스 서적 (1)
        • 도전 바디프로필! (11)
        • 헬스장 패션 (1)
      • -------- etc -------- (0)
      • 진로 관련 잡다한 글들 (34)
        • 진도율 (9)
        • 진로 관련 글들 (15)
        • 학교 강의 관련 글들 (10)
      • 인생 꿀 Tip (23)
        • 컴퓨터 초기 설정 (9)
        • 원격 데스크톱 (1)
        • 노트북 발열 (1)
        • 전자기기 (2)
        • 중고기기 팔기 (1)
        • 아이패드 필기 어플 (1)
        • 에어팟 (1)
        • 커피 (1)
        • 맥북 (1)
        • lg 그램 (1)
        • 검색엔진에서 내 티스토리 검색 (1)
        • hELLO 다크 모드 없애기 (1)
        • 인터넷 연결 문제 (1)
        • 키보드 문제 해결 (1)
      • 유튜브 (3)
      • 청춘 그리고 추억 (1)
      • 인생 계획표 (2)
        • 2024년 2학기 (1)
        • 2024년 여름방학 (0)
        • 2024년 1학기 (0)
        • 2023년 겨울방학 (1)
      • 다양한 글들 (98)
        • C++ STL (6)
        • Win32 API (24)
        • PushPush 게임 (13)
        • 컴퓨터구조 (1)
        • 자료구조와 알고리즘 (50)
        • 게임의 정의 (3)
        • 영상 회사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Dream
    • 코딩을 시작한 이유
    • 나를 소개합니다!
    • 블로그 공부법
    • IT & 가치 있는 일들
  • 인기 글

  • 태그

    생명과학
    자료구조
    연산자
    함수
    의생명공학
    첨단바이오공학부
    블렌더
    포인터
    건국대
    생명공학
    의생명공학과
    컴퓨터구조
    배열
    인공지능
    데이터사이언스
    컴퓨터 네트워크
    생물정보학
    C언어
    데이터과학
    심리학
    알고리즘
    unity
    리눅스
    C++
    명령어
    코딩
    스택
    유니티
    의생명정보알고리즘
    AI
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
smile blog
3. C++ 언어의 특징
상단으로

티스토리툴바