!객체
주어를 제외한 모든 대상
!추상화
공통되는 특징이나 속성을 추론하는 과정
!기능의 추상화
데이터를 통해 함수를 만드는 행위
결론 >> 현실에 존재하는 사물, 피사체를 추상화 작업을 통해 데이터와 기능의 형태로 구현하는 프로그래밍
객체 지향 프로그래밍 + 제네릭(일반화) 프로그래밍
* 안정성과 속도 측면에서 보면 절차지향이 객체지향보다 우월함
절차지향은 프로그램의 흐름을 중시하는 프로그래밍 방식이기에 보다 안정적이다
BUT! 그러한 특성 탓에 특정 부분에 문제 발생 시 흐름에 따라 모든 부분을 확인해야 한다
발신자가 수진자에게 정보를 전달하는 행위 통신 수단을 통해 전송에 적합한 형태로 만듦
프로그램을 구성하는 객체 사이의 의사소통 방식 -> 함수를 통해 의사소통하는 객체
데이터와 데이터(멤버 변수)의 가공을 담당하는 기능(멤버 함수)을 하나로 묶은 자료형
클래스 + 인스턴스
인스턴스 : 클래스를 메모리에 등록하는 순간 발생하는 메모리 상의 데이터 + 기능의 집합체
-> 클래스 = 자료형, 인스턴스 = 할당된 메모리 공간
데이터의 보호 수단으로, 외부에서 아무나 멤버에 접근하는 행위를 방지
(내부 : 중괄호 내부의 범위 / 외부 : 중괄호 외부의 모든 범위)
접근 가능한 범위에 대해 지정해주는 지시자
변수에 접근할 때 클래스에 public으로 멤버 함수를 만들어 해당 함수를 통해 멤버 변수에 접근
-> 은닉화의 기본 개념
-> 멤버 변수는 지역 변수지만, 클래스 내에 한해서는 전역 변수 처럼 사용이 가능하다
기타 등등...
C++에서 구조체와 클래스의 기능적인 차이점은 없지만
구조체는 사용자의 정의 자료형 클래스는 객체
목적으로 사용하기에 굳이 바꿔서 사용할 필요가없다.
Pre - Compile 헤더 (자주 이용할 헤더들을 미리 등록하여 추가 호출 없이 한번에 호출하여 사용 하는 방식)
클래스의 크기는 변수의 크기만을 고려한다
-> 멤버 함수의 경우 코드 영역에 등록하게 되며, 클래스는 해당 함수의 주소를 소유하여
필요시 주소를 통해 호출하여 사용하는 방식
객체 생성 시 자동 호출되는 함수
소멸자와 달리 default 생성자 외에 매개변수를 받는 생성자를 만들어 오버로딩을 할 수 있다
해당 함수 내에서 멤버 변수에 대한 초기화 및 대입을 진행한다
객체 소멸 시 자동 호출되는 함수
객체 내에 오로지 하나만 존재 가능하며, 함수의 오버로딩이 적용되지 않음
해당 함수 내에서 Release()함수를 호출하여 할당된 Heap영역의 메모리를 해제한다
객체의 생성 과정
메모리 할당 -> 생성자 호출
객체의 소멸 과정
소멸자 호출 -> 메모리 해제
생성자에서 값을 넣는 행위는 원칙적으로 대입이지만, 클래스의 특성 상 초기화라고 할 수 있다
클래스의 멤버 변수는 객체가 생성된 이후에 유효성을 가지게 되는데 객체는 메모리가 할당되고 생성자가 호출된 이후에 그 유효성을 가지게 된다
이 과정에서 생성자가 호출되는 시점에 값을 대입하므로 값이 대입 -> 객체 유효화 방식으로 동작
따라서 객체가 유효성을 가진 시점에 이미 값을 가지게 되므로 초기화라고 할 수 있다
BUT! 생성과 동시에 초기화를 하는 행위와는 별개이다
Malloc / Calloc / Free
C언어 시절의 문법으로, 향상된 버전인 C++에서 생겨난 클래스라는 문법을 알 수 없음
따라서 해당 동작을 통해 클래스를 생성하면 생성자와 소멸자가 호출되지 않을 뿐 더러
구조체가 만들어지게 된다.
New / Delete
C++에서 추가된 문법으로 클래스 생성 시 정상적으로 생성자와 소멸자가 호출된다
동적 할당된 객체의 주소값을 넘기게 되면 해당 객체 내의 멤버에 접근이 가능하다
이런 형식이 아닌 새로 객체를 선언하게 되면 별개의 객체가 생성되게 된다.
!!! 클래스는 틀, 객체는 틀로 찍어낸 쿠키