Notice
Recent Posts
Recent Comments
Link
수리 공작소
[명품 C++ Programming] 제 1장 C++ 개념 부분 정리 본문
발전 역사
- 운영체제와 컴파일러를 만들기 위한 목적으로 만들어진 BCLP
- BCLP를 개조시킨 B언어
- B언어를 기반으로 유닉스를 만들기 위해 만들어진 C언어
- C언어의 확장성을 고려하여 객체지향의 특성 및 기능을 추가하여 만들어진 언어가 C++
- 이후 C++에 영향을 받아 탄생한 언어가 JAVA
- JAVA와 C++의 개념을 섞은 언어가 C#
C++의 표준
표준이 있어야하는 이유
- C++ 코드를 컴파일할 컴파일러를 만드는 회사는 다양한데, 표준이 없으면 회사마다 같은 소스코드에 다른 동작으로 컴파일을 하게 됨.
- 표준을 만들어 기본적인 규칙을 지켜 컴파일러를 만들 수 있게 함.
- 그렇지만 회사마다 표준 기능에 + 당사만의 독특한 기능을 추가하는 경우도 있음.
1998 년 처음으로 미국 국립 표준원 ANSI에서 C++ 표준 탄생 -> C++ 98
이후에도 계속해서 표준은 진화 중 (C++ 03, C++ 11, C++ 14, C++ 17, C++ 20...)
참고로 표준 문서인 ISO/IEC 14882 라는 문서에 C++ 표준이 작성되고 있으며 이는 무료가 아니다.
C++ 설계 목표
- C 언어와의 호환성 : C 언어의 문법 체계 그대로 계승, C 언어 목적 파일을 C++ 프로그램에 링크해서 사용 가능
- 객체 지향 개념 도입 : 소프트웨어의 재사용성을 높이고 큰 규모의 프로그램의 유지 보수성을 높이기 위해 사용
- 엄격한 타입 체크 : 런타임의 오류 가능성을 줄이고 디버깅을 돕기 위해 사용
- 실행시간 효율성 저하 최소화 : 객체 지향 개념을 도입하면 멤버 함수 호출 시 C에서의 일반 함수 호출보다 조금 더 오버헤드가 있을 수 있는데, 이를 상쇄하기 위해 인라인 함수를 도입하는 등 여러 최적화 방법을 사용
C 언어와 비교해서 C++ 에 추가된 기능들
- 함수 오버로딩 (다형성)
- 함수가 중복이 가능하다.
- 디폴트 파라미터
- 매개변수 값이 전달되지 설정한 디폴트 값이 전달이 되도록 함수 선언 가능
- 참조(reference)와 참조 변수
- 변수에 별명을 붙여 공간을 같이 사용할 수 있는 개념
- Call-by-reference
- C 언어에서 포인터(*)로 주솟값을 넘겨주어 다른 함수에서 해당 변수의 값을 바꿀 수 있었다.
- C++ 에서도 위의 목적과 동일하지만 좀 더 안전하고 명시적인 &(call-by-reference)를 제공한다.
- new와 delete
- C 언어에서 동적할당을 위해 사용하던 malloc, free 대신에
- C++ 에서는 new 와 delete를 사용하여 동적할당 이용
- 연산자 오버로딩 (다형성)
- 앞서 나왔던 것은 함수를 중복 선언할 수 있는 오버로딩이었다면 이번에는 연산자를 재정의 할 수 있는 방식이다.
- 제너릭 함수와 클래스
- 함수나 클래스를 데이터 타입에 의존하지 않고 일반화 시킬 수 있다.
객체 지향 사용 목적
- 소프트웨어 생산성 향상
- 짧아지는 소프트웨어 생명 주기에 따라, 재사용성과 유지보수성을 높여 생산성을 높인다.
- 예를 들어 이미 만들어진 클래스를 상속받아 특정 부분만 수정하면 다른 기능을 제공할 수 있는 경우에도 객체지향을 이점을 활용한 것으로 볼 수 있다.
- 실세계 좀 더 밀접한 모델링
- 과거의 소프트웨어는 수학 계산, 통계 처리 등 절차가 중요한 프로그램이었기 때문에 절차 지향 언어가 적합하였다.
- 하지만 산업이 발전하면서 일련의 과정으로는 표현할 수 없는 요구사항들이 있고, 이보다는 관련된 물체들과 서로의 상호작용에 초점을 두어 모델링 하는 것이 더 적합해졌다.
C++ 의 아킬레스
C++의 설계 목표 중에 C언어와의 호환성이 있고, 객체 지향 개념 사용이 있다.
이 두가지가 충돌하는 부분이 있는데 바로 전역변수 사용이다.
C 언어에서 지원하는 전역변수를 호환되게 하기 위해서는 C++도 이를 허용할 수 밖에 없었지만
사실 전역변수 사용은 객체 지향 개념에서 캡슐화에 부적합한 개념이다.
'Algorithm > C++' 카테고리의 다른 글
[명품 C++ Programming] 제 2장 C++ 프로그래밍 기본 요소 (10) | 2024.10.09 |
---|