여러 사람이 모여서 하나를 완성해야 하는 시대가 왔다.
대표적으로 모듈화
절차지향은 한 사람 기준이었지만, 객체지향은 여러 사람 기준
'사람이 정의한' 현실 세계에 존재하는 모든 것은 객체로 정의하자!
OOP에서 가장 중요한 것 : 확장성, 유지보수성
Class A {
member variable; // == field
constructor function
+ in Cpp
복사 생성자 함수
소멸자
대입연산자 함수
member function; // == method
};
# 생성자, 복사생성자, 소멸자, 대입 연산자는 디폴트로 설정되어있다
# 클래스 밖에 있는 함수를 외부 함수로 칭한다! main도 외부 함수다!
#CPP에서도 접근 지정자가 있다 (자바는 여기에 default를 추가해서 4개다)
캡슐화를 파괴하는 friend 라는 게 있다!
디폴트 생성자의 기능 : 객체 등록
copy constructor는 기능이 있다 : 복사하는 기능
★ 복사 생성자가 호출되는 경우
1. 객체 생성 시 매개변수로 객체를 넘겨줄 경우
2. 객체 생성 시 객체를 대입할 경우
※ 둘다 객체 생성할 때만
3. 멤버함수에 매개변수로 객체를 선언할 경우
4. 멤버함수에서 객체를 retrun할 경우
모양꼴
생성자에서 객체를 레퍼런스하게끔 되어 있음
A(const A& aa)
{
디폴트로 카피하는 기능이 쓰여있음
모든 필드값을 카피함
}
* 복사 생성자는 기법이 2가지 있다
1. 얕은 복사 (default가 얕은 복사로 제공된다)
2. 깊은 복사 (개발자가 꼭 명시적으로 코딩을 해야한다)
-> 필드를 포인터로 사용했을 때는 무조건! 깊은 복사를 해야 한다! 그렇지 않으면 runtime error 발생
항상 궁극적인 목표는 '값의 카피'이다!
접근 범위를 생성한다
protected는 상속받은 자식 클래스에서만 접근할 수 있다(Java보다 범위가 넓다고 볼 수 있음)
생성자가 private로 해놓으면 static을 통해서 ??
java는 OS가 main으ㅜㄹ 불러준다 싱글통?