[c++] C에서 C++로의 리팩토링 이해하기

c의 코드를 cpp로 리팩토링 하는 과정을 통해 c++를 이해해보자.

c언어 예제

#include <iostream>

struct Rectangle {
	int length;
	int breadth;
};

//c에서는 struct를 붙여줘야함
void Intializer(struct Rectangle *r, int l, int b) {
	r->breadth = l;
	r->length = b;
}

//call by value
int area(struct Rectangle r) {
	return r.length * r.breadth;
}

void changeLength(struct Rectangle* r, int l) {
	r->length = l;
}
int main() {
	struct Rectangle r;
	Intializer(&r, 10, 20);
	area(r);
	changeLength(&r, 15);
	return 0;
}

간단한 코드인데, Rectangle 인스턴스를 선언하고, 함수를 사용해 초기화, area 반환, 값을 변경하는 기능을 포함하고 있다. 이걸 c++ 식으로 리팩토링 하려면 어떻게 해야할까.

구조체는 클래스로 구현하고, 변수는 private로 해야 cpp다운 코드일거고, 포인터를 이용해서 인스턴스에 접근하는 함수는 애초에 목적이 구조체에 관련되어 있기 때문에, 멤버 메소드로 편입하면 되겠다. 특히 Intializer는 ? cpp의 생성자가 되고, 인스턴스를 생성할때 바로 초기화가 가능해질 것이다.

cpp 예제

#include <iostream>

class Rectangle {
private:
	int length;
	int breadth;

public:
	//생성자로 변경
	//void Intializer(struct Rectangle* r, int l, int b) {
	Rectangle(int l, int b){
		length = l;
		breadth = b;
	}

	//call by value
	int area() {
		return length * breadth;
	}

	void changeLength(int l) {
		length = l;
	}
};


int main() {
	Rectangle r(10,20);
	//Intializer(&r, 10, 20);
	r.area();
	r.changeLength(15);
	return 0;
}