객체 프로그래밍 (
본문 바로가기
코딩공부/C++기초

객체 프로그래밍 (

by 지누이야기 2024. 3. 8.
반응형

저번시간에는 클래스의 개념에 대해서 배웠습니다. 이번시간에는 클래스의 응용을 배워보도록 하겠습니다.

 

1. 객체를 바로 함수의 인자를 사용하는 것은 call by value, 객체의 주소를 사용하는 것이 call by reference입니다.

 

그런데 객체 자체의 멤버의 수가 매우 많다면 당연히 함수 호출이 지연됩니다.

 

이러한 경우는 객체의 포인터를 넘기는 과정, 즉 객체의 주소만 전달됩니다. 이렇게 해도 속도 향상을 시킬 수 있습니다.

 

2. 객체를 생성할 때 동작을 기록하는 역할을 하는 것을 생성자라고 하며 생성자를 정의해두면, 클래스로부터 객체가 생성될 때 자동적으로 호출되는 특수한 멤버 함수입니다.

 

그래서 생성자는 일반적으로 처음에 초기화를 해줄 때나 무조건 처음에 출력해야 하는 문장이 있을 때 출력하는 용도로도 사용될 수 있습니다.

 

생성자는 return이 없고, 클래스 이름을 생성자 함수의 이름을 그대로 사용합니다. 

 

3. 생성자를 오버로드할 수도 있습니다. 몇 강 전에 함수 오버로딩을 배웠을 때 배웠지만 오버로드는 인수의 개수와 타입이 다르다면 같은 이름의 함수를 여러 개 중복해서 정의하는 것을 말합니다.

 

생성자 오버로드도 위의 정의를 따르며 객체를 만들 때 인수와 개수가 일치하는 생성자가 자동으로 호출되게 됩니다.

 

4. 그렇다고 해서 생성자가 반드시 필요한 것을 아닙니다. 생성자가 없더라고 인수 없는 생성자가 컨파일러에서 자동으로 만들어주며 이 생성자는 아무 일도 하지 않습니다. 

 

대신 생성자가 하나라도 있으면 컴파일러는 기본 생성자를 만들지 않습니다.

 

5. 클래스를 활용한 객체도 배열로 나타낼 수 있습니다.

 

클래스 배열을 사용하면 배열에 객체들을 넣어서 처리할 수 있습니다. 또한 for문도 마찬가지로 사용할 수 있다.

 

클래스 배열을 만들기 위해 선언과 동시에 객체들을 동시에 초기화를 한다면, 객체가 많아질 때 코드가 복잡해집니다.

 

그렇기 때문에 클래스 배열을 선언만 먼저 보통 하는데, 이 때 인수 없는 생성자가 필요합니다.

 

6. 기본 인수가 있는 생성자를 활용할 수 있습니다. 이를 활용하면 인수를 넘기지 않아도 넘길 인수가 없다면, 설정한 값으로 초기화 된 값이 호출되게 됩니다.

 

7. 예전에 배운 static을 활용하면 클래스 전체에는 연결되어 있지만, 객체에는 연결되지 않은 멤버를 가질 수 있습니다.이를 정적 멤버라고 합니다.

 

정적멤버는 생성자 안에서 초기화를 할 수가 없습니다. 함수 바깥에서 클래스명::을 붙여서 초기화시킵니다.

 

이러한 정적 멤버는 같은 클래스의 모든 객체에서 공통적으로 접근해야하는 데이터를 저장할 때 사용됩니다.

 

즉, 멤버함수에 static을 붙이면 객체를 생성하지 않아도 호출이 가능합니다. 호출할 때는 클래스명::함수명(인수목록)으로 호출한다.

 

정적멤버함수는 결과적으로 특정한 객체에 연결된 것이 아니기 때문에 프라이빗한 멤버에 접근이 불가능합니다.

 

정의할 때 static은 빼줍니다.

 

8. 클래스를 활용해 상속이라는 것을 해줄 수 있습니다. 이를 활용하면 기존 클래스들을 활용해 또 다른 클래스를 만들어낼 수 있습니다.

 

이 때 바탕이 되는 클래스를 기본 클래스라고 하고, 새로운 클래스는 파생 클래스라고 합니다. 또는 어미 클래스, 자식 클래스라고 부르기도 합니다.

 

상속을 활용하면 파생 클래스는 기존 클래스의 멤버를 물려받을 수 있고, 기존 클래스에 새로운 성질만 추가하여 코드 작성이 가능합니다.

 

활용할 때는 class 파생된 클래스 이름:: 기본 클래스이름{} 이렇게 사용합니다.

 

기본 클래스가 지닌 private한 멤버는 상속자인 파생 클래스에서 접근이 불가능합니다. 대신 protected를 사용하면 파생 클래스에서 접근은 가능하고, class 외부에서 접근이 차단됩니다.

 

 

 

반응형

댓글