클래스
- 객체를 만들기위한 틀
- 클래스는 객체가 아니다. 실체도 아니다. Instance
- 멤버 변수, 멤버 함수 선언
객체
- 객체는 생성될 때 클래스 모양으로 탄생
- 멤버 변수와 멤버 함수로 구성
- 메모리에 생성, 실체(instance)라고 부름
- 하나의 클래스에서 여러 객체 생성 가능
- 객체들을 상호 별도 공간에 생성
클래스 작성
-멤버 변수, 멤버 함수로 구성
클래스 선언부
- class 키워드를 이용해 클래스 선언
- 멤버 변수는 클래스 선언 내 초기화 가능
- 멤버 함수 원형 형태로 선언
- 멤버에 대한 접근 권한 지정 (default = private, 종류는 public, private, protected)
클래스 구현부
-클래스에 정의된 모든 멤버 함수 구현
생성자 함수의 특징
1. 생성자 목적
-> 객체가 생성될 때 객체가 필요한 초기화를 위해 (멤버 변수 초기화, 메모리 할당, 파일열기, 네트워크 연결 ...)
2. 생성자 이름
-> 클래스 이름과 동일(반드시)
3. 생성자는 리턴 타입을 선언하지 않음.
-> 리턴 타입이 없다. void 타입도 안됨.
4. 객체 생성 시 오직 한 번만 호출
-> 자동 호출. 임의 호출 없음. 각 객체마다 생성자 실행
5. 생성자 중복 가능
-> 생성자는 한 클래스 내 여러 개 가능 (중복 생성자 중 하나 실행) //매개변수에 따른 차이가 생기기 때문
6. 생성자가 없으면 기본 생성자 자동 생성
-> 기본(default) 생성자(매개 변수 X) - 컴파일러에 의해 자동 생성
여러 생성자에 중복 작성 코드 간소화(위임 생성자)
- 타겟 생성자 : 객체 초기화를 전담
- 위임 생성자 : 타겟 생성자를 호출, 객체 초기화를 타겟 생성자에 위임
소멸자 특징
1. 소멸자 목적
- 객체가 사라질 때 마무리 작업 (동적 할당 메모리 해제, 파일 저장 및 닫기, 네트워크 닫기)
2. 소멸자 함수 이름은 클래스 앞에 ~를 붙임
3. 소멸자는 리턴 타입이 없고, 어떤 값도 리턴하면 안됨.
4. 중복 불가능
- 소멸자는 클래스 내 오직 한 개만 작성 가능
- 소멸자는 매개 변수 없는 함수다.
5. 소멸자가 선언되지 않으면 기본소멸자 자동 생성
- 컴파일러에 의해 기본 소멸자 생성(아무것도 하지 않음 단순 리턴)
객체는 지역객체(함수 내), 전역객체(함수 밖)으로 나누어짐
객체 생성 순서
- 전역 객체 : 프로그램에 선언된 순서
- 지역 객체 : 함수에 호출 되는 순서대로
객체 소멸 순서
- 함수 종료시, 지역 객체가 생선된 순서 역순으로 소멸
- 프로그램 종료시, 전역 객체가 생성된 순서 역순으로 소멸
new를 이용한 동적 생성 객체
- new실행하는 순간 객체 생성
- delete 하는 순간 객체 소멸
캡슐화의 목적
- 객체 보호, 보안
- C++에서는
1)데이터 멤버 보호
2)중요 멤버 다른 클래스 또는 객체에서의 접근 방어
3)외부와의 인터페이스를위한 일부 멤버 외부 접근 허용
너무 작은 크기의 함수를 사용하는 것이 바람직하지 않은 경우
->함수의 시간 오버헤드 (함수 호출은 생각보다 복잡한 과정이 있다)
=>작은 크기 함수를 호출하면 함수 실행 시간에 비해 호출을 위해 소요되는 부가적 시간 오버헤드가 상대적으로 크다
=>즉, 코드가 너무 길지 않고 자주 사용하지 않는 코드는 함수로 만들어서 호출하는 것을 추천하지 않는다.
인라인 함수 (inline 키워드로 선언된 함수)
- int odd(int x)->inline int odd(int x)
=> 앞에 inline키워드를 사용
인라인 함수 처리
- 인라인 함수 호출하는 곳에 코드를 확장 삽입(복붙) 형태는 매크로와 유사하나 코드 확장 후 인라인 함수는 사라짐
- 인라인 함수 호출로 인한 오버헤드가 존재하지 않는다, 실행 속도의 개선
- 컴파일러에 의해 이루어진다.
=>인라인 함수는 C++ 프로그램 실행 속도 향상을 위해 사용됨(잦은 짧은코드 함수 호출 시간 줄임)
인라인 제약 사항
- inline키워드는 컴파일러에게 주는 요구 메세지다(컴파일러가 수용할지 판단 후 결정)
=> recursion, 긴 함수, static, 반복문, goto 문 등을 가진 함수 수용X
인라인 함수 장단점
장점
- 프로그램 실행 시간 빨라짐 (인라인은 함수 코드 복붙이기 때문)
단점
- 인라인 함수 코드 삽입으로 컴파일된 전체 코드 크기 증가 (통계적으로 약 30% 증가, 짧은 코드는 인라인 선언이 좋음)
클래스 선언부에 inline을 이용하여 함수를 선언하면 자동으로 함수를 사용할 때, inline 여부 확인
C++구조체
- 클래스와 동일
- 유일한 차이는 class default - private, struct default - public
- C++을 수용한 이유
=>C언어와의 호환성 (C 구조체 100% 호환, C소스를 그대로 쓰기 위해)
- 구조체 객체 생성
=> struct 키워드 생략 (struct structName Obj => structName Obj) C언어에서는 불가능하지만 C++에서 허용
바람직한 C++ 프로그램 작성
1. 클래스마다 분리 저장 (선언 부-헤더파일.h, 구현 부-cpp파일+클래스 선언된 헤더 파일 include)
2. main()등 전역 함수, 변수는 다른 cpp 파일에 분산 저장 (필요 시, 헤더 파일 include)
목적=>클래스 재사용
하지만 잦은 include로 헤더 파일을 중복 include한다면?????
#ifndef 헤더파일_H
#define 헤더파일_H
~
#endif
=>조건부 컴파일을 이용한 문제 해결
'학교수업' 카테고리의 다른 글
사물인터넷의이해 3주차 (0) | 2021.09.18 |
---|---|
웹개발기초 3주차 (0) | 2021.09.17 |
가상현실프로그래밍 2주차 (0) | 2021.09.16 |
정보보호개론 2주차 (0) | 2021.09.15 |
임베디드기초 2주차 (0) | 2021.09.13 |