IT 프로그래밍/C++

[C++] 멤버함수 혹은 메서드

기술1 2024. 4. 6. 12:46
반응형

클래스라는 것은 관련있는 데이터들을 하나의 단위로 묶어두기 위한 것입니다. 하지만 이것이 전부는 아닌데요. 서로 관련있는 데이터들 뿐만 아니라, 그 데이터와 관련이 깊은 함수들도 함께 묶어둘 수 있습니다. 이렇게 함으로써 코드의 응집도를 높이고 결합도를 낮출 수 있습니다. 

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

class Term
{
public:
	int coef;
	int expo;

	int calcTerm(int x)
	{
		return coef * pow(x, expo);
	}
	void printTerm()
	{
		cout << coef << "X^" << expo;
	}

};

 

Class 안에 함수 모듈

관련성이 깊은 클래스와 함수들을 하나의 클래스 안에 둔다.

 

ccalcTerm은 어떤 Term의 일부분이며 "자기 자신"의 값을 계산하여 반환합니다. 따라서 매개변수로 어떤 Term 객체를 받을 필요가 없습니다. printTerm역시 어떤 Term의 일부분이며 "자기자신"을 출력하는 기능을 수행합니다. 따라서 매개변수로 어떤 Term을 받을 필요가 없습니다.

 

그래서 이런 경우 class 안에 함수를 써줍니다. class라는 것은 기본적으로 데이터 뿐만이 아닌 데이터와 직접적으로 관련이 있는 함수를 함께 묶어둘 수 있는 것입니다.

 

이렇게 함으로써 코드의 응집도와 높이고 결합도(상호의존성)을 낮출 수 있습니다.  각각의 모듈을 개발한 다음 결합하는 것을 소프트웨어를 만드는 기본 기술인데요. 하나의 모듈로 개발하는 것은 거의 불가능에 가깝기 떄문에 모듈을 각각 만들고 통합하는 것입니다. 

 

 

 

모듈

연관성이 높은 것을 모아놓은 것이라고 보면 됩니다.

 

결합도가 높은 것은 상호의존도가 높은 것인데요. 하지만 이 결합도가 높을수록 좋은 모듈이 아닙니다. 결합도가 높으면 굳이 두 모듈을 만들 필요가 없기 때문입니다. 모듈화라는 것 자체가 응집도가 높은 것끼리 모아놓은 것이라고 보면 됩니다. 응집도가 높은 것끼리 모으면 결합도는 당연히 모듈마다 달라지게 됩니다. 

 

적절한 모듈화라는 것은 상대적으로 연관성이 높은 것들은 하나의 모듈로 만들고 모듈과 모듈 간에는 상대적으로 결합도가 낮게 하는 것입니다. 

 

클래스와 객체

클래스는 사용자정의타입입니다. 즉 int나 double 같은 것이라고 보면 됩니다. 즉 우리가 코딩을 할 때 int를 읽고 double를 읽고 하지는 않듯이 클래스 또한 설계도의 개념일 뿐이지 값을 받고 주소를 받는 실체가 아닙니다. 

 

이 클래스는 클래스 타입의 변수를 생성하기 위한하나의 설계도면이지 어떤 실체는 아닙니다. 클래스라는 것은 하나의 타입이기 때문에 그 클래스타입의 객체 변수 혹은 instacne 입니다.

 

객체란?

객체지향프로그래밍에서 객체란 '데이터 + 메서드'입니다. 데이터는 객체의 "정적 속성"을 표현하며, 메서드는 객체의 "기능 (동적 속성)을 표현합니다.

 

-자전거는 모양 무게 크기 브랜드 등의 정적 속성과 달린다, 정지한다, 뒤로간다 라는 기능(동적속성)을 가집니다. 

-하나의 항은 계수와 차수라는 정적 속성x의 값을 주면 자신의 값을 계산해 준다, 화면에 출력해준다 등의 동적속성(기능)을 가집니다. 

 

 

반응형