내일배움캠프 9일차 - C++ 객체지향 프로그래밍 : Class

 객체지향 프로그래밍의 필요성

실제 현업에서 프로젝트를 진행하면, 한번 완성된 프로젝트는 계속해서 사용되는 경우가 많음.

그 결과 개발을 해야 하는 시간보다, 유지 보수를 해야 하는 시간이 더 길어지고 수정에 필요한 비용도 크게 증가함.

따라서 우리는 유지 보수를 용이하게 하고, 재사용성을 높이는 방향으로 구현해야 함.

C++에서는 이를 위해 객체지향  프로그래밍을 활용할 수 있습니다.


기존 프로그래밍에서는 왼쪽처럼 코드를 짜는데에 성공하더라도 오른쪽처럼 새로운 항목이 추가되면 기존의 코드가 거의 작동하지 않아 거의 새롭게 짜야 하는 등의 유지보수가 어려운 문제가 발생한다. 또한 대부분의 변수들이 main함수 내에 노출되어있어 누구든 접근을 할 수 있어 실수로 바꿔 문제를 일으킬 가능성이 높다.


Class

객체지향 프로그래밍의 중심이 되는 기능.

 - 하나의 Class객체 안에 필요한 상태(멤버변수)나 기능(멤버함수)를 내재할 수 있다.

 - 일부 밖으로 노출할 필요가 없는 것들은 접근권한을 바꿔 숨길 수 있다.

 - 이를 통해 필요한 동작만 공개하고 세부 데이터는 숨기는 객체지향 방식이 코드의 변화에 유연하게 대처할 수 있다.



Class 내부 구현 방법

1) 클래스 내부에서 멤버 함수의 본문까지 직접 정의하는 방법. 변수를 제어하기 위해서는 구현한 getter, setter 멤버함수를 사용한다.
2) 클래스 내부에서 멤버 함수만 선언하고, 클래스 외부에서 구현하는 방법 (제일 자주 쓰임)

접근제어자

private: 클래스 외부에서 직접 접근할 경우 컴파일 에러가 발생.
protected: 상속된 클래스에서만 직접 접근가능
public: 클래스 외부에서 멤버 접근 연산자로 접근할 수 있습니다.

생성자

 : 객체를 생성할 때마다 한 번씩 자동으로 호출되는 특별한 멤버 함수
 - 보통 생성자는 필요한 멤버 변수를 초기화하거나 객체가 동작할 준비를 하기 위해 사용함.
 - 생성자는 반환형을 명시하지 않으며, class이름과 동일한 이름을 가진 함수로 정의됩니다.

기본값이 적용된 생성자

기본값을 인자로 받는 생성자는 아래 그림과 같이 사용할 수 있습니다.
인자를 보면, 대입 연산자를 통해 기본값으로 설정하고자 하는 값을 대입하고 있는 것을 볼 수 있습니다.
기본값을 인자로 받는 문법은 생성자 뿐 아니라 일반 함수에서도 가능하다.

멤버 초기화 리스트


생성자에서 받은 매개변수를 멤버변수에 값을 복사하는 방법이다. 이것은 생성자코드 '{ }' 보다 먼저 실행된다.


클래스 선언 시 헤더(.h)와 소스파일(.cpp)를 분리하는 이유

1. 목차처럼 클래스의 내부를 파악하기 쉽게 하여 가독성을 높인다.
2. 중복 정의가 될 수 있기 때문에 정의까지 헤더파일에 하지 않음.
 └ 두 라이브러리에서 동시에 클래스를 가져올 때 멤버함수가 선언과 동시에 정의가 되면 함수 중복정의로 오류가 발생할 수 있음.


#ifndef

 class를 헤더 파일에 정의할 때 가장 중요한 것은, 해당 class가 중복 선언되지 않도록 하는 것이다. 내가 만든 헤더 파일을 여러 파일에서 사용하다 보면 class가 여러 번 정의될 수 있다. 

이를 방지하기 위해 `#ifndef`라는 구문을 활용한다.

다시 한번 정리하면 아래와 같다.

1) #ifndef STUDENT_H_의 의미는 STUDENT_H_정의되어 있지 않은 경우에만 아래 코드를 수행하라는 의미이다.

2) #define STUDENT_H_STUDENT_H_를 정의한다.
#ifndef일 때만 #define이 수행되므로 단 한 번만 수행될 수 있습니다.

3) #ifndef가 끝났다는 것을 알려주기 위해 #endif를 작성합니다.

4) 최종적으로 Student Class는 중복 포함될 수 없게 됩니다.


상속

속도, 색상 등의 차량의 공통적인 특성을 매번 모든 차량에 개별적으로 구현하는 대신, 

하나의 기본 클래스를 정의하고 공통 속성을 구현하고 이를 활용하면 유지 보수가 쉬워지고 코드의 중복을 줄일 수 있다.



댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁