클래스

- 객체를 만들기위한 틀

- 클래스는 객체가 아니다. 실체도 아니다. 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

+ Recent posts