C++의 설계 철학
C++을 개발한 Bjarne Stroustrup은 1994년에 출간된 "The Design and Evolution of C++"에서 C++을 설계 할 때의 원칙을 다음과 같이 기술했다.
1. C++은 엄격하게 타입 검사를 하고, 범용 언어로 사용할 수 있으며, C언어만큼 효율적이고 이식성이 높아야 한다.
2. C++은 여러 가지의 프로그래밍 스타일을 지원할 수 있어야 한다. (절차 지향 프로그래밍, 데이터 추상화, 객체 지향 프로그래밍, 일반화 프로그래밍)
3. C++은 만약 잘못될 가능성이 있다고 하더라도 프로그래머가 자유롭게 선택할 수 있도록 설계되어야 한다.
4. C++은 C에서 쉽게 옮겨갈 수 있도록 최대한 C와 호환성이 있어야 한다.
5. C++은 플랫폼에 의존적이거나 일반적이지 않은 특징들은 피해야 한다.
6. C++은 사용되지 않은 특징들 때문에 속도가 느려지면 안 된다.
7. C++은 복잡한 프로그래밍 환경 없이도 실행되어야 한다.
객체 지향 프로그래밍에 대한 간단한 소개
객체 지향 프로그래밍(object-oriented Programming:OOP)은 현실이 객체(object)들로 구성되어 있듯이 소프트웨어도 객체 단위로 작성하는 방법이다.
현실의 객체들이 각각의 고유한 기능을 수행하면서 다른 객체들과 상호 작용하듯이 소프트웨어 개발에서의 OOP는 다양한 기능을 하는 객체들이 존재하고 이러한 객체들을 조합하여 자기가 원하는 기능을 구현하는 기법이다. 각각의 객체들은 서로에게 메시지를 전달하여 상호 작용하면서 원하는 작업을 수행하게 된다.
OOP의 최대 목표는 코드의 재사용(reuse)이다. 따라서 객체지향의 핵심인 class를 구현할 때는 다른 사람이 사용할 것을 전제로 안전하게 개발해야 한다.
OOP가 추구하는 5가지 특성에 대한 간단한 소개
1) 추상화(Abstraction) : 공통의 속성이나 기능을 묶어 이름을 붙이는 것.
2) 캡슐화(Encapsulation) : 멤버 변수(필드)와 멤버 함수(메소드)를 하나로 묶는 것. 이때 필드와 메소드는 객체의 역할과 관련된 것들만 선택되어야 한다.
3) 정보 은닉(Infomation-Hiding) : 객체 외부에서 객체 내부의 중요한 필드와 메소드에 접근하지 못하도록 숨기는 것.
4) 상속(Inheritance) : 객체의 재사용(reuse)을 위해서 상위 객체의 특징을 하위 객체가 물려받는 것.
5) 다형성(Polymorphism) : 상속받은 가상 함수를 자식 클래스에서 재정의해서 사용하는 것.