3 - 2학기/객체 지향 프로그래밍

객체지향 프로그래밍 : 멤버함수와 클래스의 활용

harvartz의 일지 2021. 6. 13. 02:35

이번 시간에는 멤버함수와 클래스를 어떻게 활용할 것인지에 대해서 정리하는 시간을 가질 것이다.

 

정적 멤버 (static, non static)는 무엇인가?

- 변수와 함수에 대한 기억 부류의 한 종류

생명 주기: 프로그램이 시작될 때 생성, 프로그램 종료 시 소멸

사용 범위: 선언된 범위, 접근 지정에 따름

 

static 멤버

- 프로그램이 시작할 때 생성, 

- 클래스 당 하나만 생성, 클래스 멤버라고 불림

- 클래스의 모든 인스턴스들이 공유하는 멤버

- 객체가 사라져도 여전히 존재

- 동일한 클래스의 모든 객체들에 의해 공유된다.

 

non-staitc 멤버

- 객체가 생성될 때 함께 생성

- 객체마다 객체 내에 생성

- 인스턴스 멤버라고 불림

- 객체와 생명을 같이함

- 공유되지 않는다, 객체 별로 따로 공간을 유지

 

static 멤버 변수

- 같은 클래스의 객체들 사이에 공유되는 멤버 변수

- 보통 멤버처럼 접근할 수 있음

- 클래스 이름과 범위 지정자(::)으로 접근 가능

 

static 멤버 함수

- 객체 없이 호출할 수 있는 멤버 함수

- 일반 멤버 함수처럼, 객체 이름, 포인터로 접근 가능

- 클래스 이름과 범위 지정자(::)으로 접근 가능

- this 포인터가 없음, 멤버 함수는 객체의 소유가 아니기 때문에

 

static 멤버 특징

- 객체가 만들어지지 않아도 사용 가능

- 정적 멤버 함수는 일반 멤버에 접근할 수 없다.

 


const 객체

- 멤버 변수의 값을 변경할 수 없음

- const 객체에는 대입할 수 없다.

- const  멤버 함수만 호출 가능하다 --> const 멤버 함수를 지정할 필요가 있다.

- 사용 시에는, 객체를 함수의 입력 인자로 전달할 때 주로 사용한다.

 

const 객체의 사용

- 객체를 함수의 입력 인자로 전달할 때 주로 사용

- 멤버 변수의 값 변경 불가능, 다른 일반 멤버 함수 호출 불가능

 

* const 멤버함수는 const 객체만 호출할 수 있다.

 


여러가지 객체 생성 방법

1. 객체 배열 및 포인터의 생성 및 사용

- 객체 배열 정의시 따로 지정하지 않으면 항상 디폴트 생성자로 초기화
- 초기화 하는 방법 확인하기 ( 객체 = { 생성자, 생성자 ...} )

- 디폴트 생성자가 없으면 오류가 난다. 디폴트 생성자가 없으면 가지고 있는 생성자의 형태에 맞게 객체를 선언해야 한다.

 

- 2차원 객체 배열도 선언할 수 있다.

 

객체 포인터

- 객체에 대한 포인터

- 포인터로 멤버를 접근할 때 (객체 포인터->멤버)

 

2. 동적 객체의 생성 및 사용

 

* 동적으로 객체를 만들었다? 무슨 말인가?

프로그램에서 실행 시간 동안 메모리 공간을 할당하는 것이다. 동적할당이 아니면 정적할당인데, 이와 같은 경우는 프로그램이 실행하기 전에 미리 메모리를 할당하고 프로그램을 실행한다.

 

- 객체 소멸은 생성한 순서에 관계 없이 원하는 순서대로 delete 할 수 있음

 

3. 동적 객체 배열의 생성 및 사용

4. 객체에 대한 포인터 배열의 생성 및 사용