OOP
- 소프트웨어 위기
기존 절차식 프로그래밍의 방법의 낮은 생산성이 문제가 됨. 절차식 프로그래밍은 간결하고 빠른 실행 파일을 만들기는 하지만 규모가 커지면 개발뿐만 아니라 유지 모수에 한계를 드러냄. 그래서 대안으로 여러 가지 개발 기법들이 제시되었는데 그 중에서 가장 탁월한 기법으로 인정받은 것이 바로 절차가 아닌 데이터를 중심으로 개발을 진행하는 객체 지향적 프로그래밍(Object Oriented Programming) 방식임
- OOP의 특징
캡슐화
표현하고자 하는 자료와 동작을 하나의 단위로 묶는 것이며 이렇게 묶어 놓은 것을 객체라고 함
정보 은폐
객체는 자신의 상태를 기억하기 위한 속성과 속성을 관리하는 동작을 정의함
추상화
현실의 사물을 객체로 표현하기 위해서는 이 사물이 어떤 특징을 가지며 어떤 동작이 가능한지를 조사해야 하는데 이를 데이터 모델링이라고 함
상속
상속은 이미 만들어진 클래스를 파생시켜 새로운 클래스를 정의하는 기법
다형성
똑같은 호출이라도 상황에 따라, 호출하는 객체에 따라 다른 동작을 할 수 있는 능력을 다형성이라고 함
C++로의 확장
- 개선 사항
범위 연산자
지역변수에 의해 가려진 전역변수를 참조
명시적 캐스팅
(int)var 형식이 아닌 int(var) 형식으로 캐스팅
인라인 함수
본체가 호출부에 삽입되는 함수
디폴트 인수
실인수가 생략될 때 형식 인수에 적용되는 기본값
함수 오버로딩
같은 이름의 함수를 여러 개 정의하는 기능
태그가 타입으로 승격됨
구조체 태그로부터 변수를 바로 선언할 수 있음
이름없는 공용체
공용체 이름없이 멤버들이 기억 장소를 공유
한줄 주석
//로 줄 끝까지 주석 달 수 있음
레퍼런스
변수에 대한 별명을 붙임
bool 타입
1바이트의 진위형 타입
- IOStream
C++에서는 모든 것을 객체로 표현하기 때문에 입출력을 담당하는 것도 함수가 아니라 객체임.
cout은 C++의 가장 기본적인 출력 객체이고 cin은 입력 객체임.
입출력이 가능해야 언어의 동작을 확인할 수 있기 때문에 C++에서는 이런 기본적인 입출력 수단은 바로 입출력 스트림이며 cin, cout이 입출력 객체임
- new
new, delete는 C의 malloc, free에 대응되는 C++의 메모리 할당 연산자이며 실행 중에 메모리를 할당한다는 점에서 용도가 비슷.
new의 기본 형식
포인터 = new 타입[(초기값)];
구조체의 확장
- 멤버 함수
구조체는 타입이 서로 다른 이형 변수의 집합
구조체와 함수는 한 상으로 볼 수 있는데 C++은 연관된 코드와 데이터를 하나의 범위에 포함시킬 수 잇는 방법을 제공. 이 개념이 바로 캡슐화인데, 구조체가 다양한 타입의 멤버 변수를 포함하듯이 함수도 포함할 수 있음
- 멤버 함수 작성법
멤버 함수 기본 형식
리턴타입 소속구조체::멤버함수(인수)
{
본체
}
- 액세스 지정
private
이 속성을 가지는 멤버는 외부에서 액세스할 수 없으며 구조체의 멤버 함수만 액세스할 수 있음
public
이 속성을 가지는 멤버는 외부로 공개되어 누구나 읽고 쓸 수 있고 함수의 경우는 호출할 수 있음
protected
private와 마찬가지로 외부에서는 액세스할 수 없으나 단, 상속된 파생 클래스는 이 멤버를 액세스 할 수 있음
클래스
- class
확장된 의미의 구조체에 새로운 이름을 붙여 주었는데 그것이 바로 클래스.
구조체라는 용어를 그냥 사용해도 별 문제는 없겠지만 C의 전통적인 구조체와 C++에서 확장된 구조체의 차이를 명확하게 구분하고 싶었고 그래서 이름을 바꿈
클래스의 기본 형식
- 클래스는 타입이다
C++에서는 구조체의 태그가 타입으로 승격되어 태그로부터 바로 구조체 변수를 선언할 수 있음. 구조체가 하나의 타입으로 인정되는 것과 마찬가지로 클래스도 하나의 타입으로 취급됨. 클래스의 이름은 int, double, char 같은 기본형 타입과 동등한 자격을 가지며 사용 방법도 똑같음
클래스가 완전한 타입이 되기 위한 여러 가지 언어적 장치
- 인스턴스
클래스는 어디까지나 타입일 뿐이지 그 자체가 정보를 저장하는 변수는 아님.
구조체를 선언한다고해서 구조체 변수가 생기는 것이 아닌 것처럼 클래스를 선언한다고 해서 실제로 값을 기억할 수 있는 메모리가 할당되지는 않음. 클래스 선언은 어떤 타입의 어떤 멤버들이 포함되어 있는지를 컴파일러에게 알리는 역할만 할 뿐이며 클래스형의 변수를 선어해야 실제 메모리가 할당됨
인스턴스
메모리가 구현된 것을 말함
오브젝트
독립성을 가진 부품이라고 생각하면 됨
C와 C++의 차이점
C++는 뱐 스트라우스트럽(Bjarne Stroustup)과 친구, 직장 동료들이 만들었습니다