접근지정자 타입 이름([매개변수]....) { [return ...] };
C++에서 함수와 메서드는 위와 같이 정의할수 있습니다. 타입이 void면 return이 없지만, void가 아니라면 return문을 지정하여 함수/메서드를 호출한 쪽으로 값을 전달해 줍니다. 함수와 메서드는 생긴게 똑같지만 차이가 있습니다. 어디에 정의되었고, 어떻게 호출되는지에 따라 구분됩니다. 간단히 말해, 모든 메서드는 함수이지만, 모든 함수가 메서드는 아닙니다.
1. 함수와 메서드의 차이
1) 정의 위치
함수: 클래스 외부에서 독립적으로 정의됩니다.
메서드: 클래스 내부에 정의된 함수로, 특정 클래스의 객체와 연관됩니다. 클래스의 멤버 함수라고도 합니다.
2) 호출 방식
함수: 함수 이름을 직접 호출하여 사용합니다. 예를 들어, calculate()처럼 독립적으로 호출됩니다.
메서드: 객체를 통해 호출됩니다. 예를 들어, object.calculate()와 같이 객체의 인스턴스를 사용해 호출해야 합니다.
3) 데이터와의 연관성
함수: 객체의 데이터와 관련이 없고, 외부 데이터를 직접 접근하거나 조작하지 않습니다.
메서드: 객체의 멤버 변수(속성)를 조작하거나, 해당 객체의 상태에 의존하여 작업을 수행합니다. 메서드 내부에서 this 포인터를 통해 객체에 접근할 수 있습니다.
4) 접근 제한
함수: 모든 코드에서 접근할 수 있습니다.
메서드: 클래스의 접근 제한자(public, protected, private)에 따라 접근 가능 여부가 달라집니다.
2. 함수의 예제
#include <iostream>
using namespace std;
// 두 정수 중 큰 값을 반환하는 함수
int max(int a, int b) {
return (a > b) ? a : b;
}
int main() {
int num1 = 10;
int num2 = 20;
// 함수 호출
cout << "The maximum value is: " << max(num1, num2) << endl;
return 0;
}
이 코드에서 sumArray 함수는 배열과 배열의 크기를 받아, 배열의 모든 요소의 합을 계산하여 반환합니다.
main 함수에서 sumArray를 호출하여 배열 요소의 합을 출력합니다.
이와 같이 함수는 클래스와 무관하게 특정 작업을 수행하도록 정의할 수 있습니다.
3. 메서드의 예제
#include <iostream>
using namespace std;
class Rectangle {
private:
int width;
int height;
public:
// 생성자: 객체 생성 시 너비와 높이를 초기화
Rectangle(int w, int h) : width(w), height(h) {}
// 면적을 계산하는 메서드
int area() const {
return width * height;
}
// 둘레를 계산하는 메서드
int perimeter() const {
return 2 * (width + height);
}
// 너비를 설정하는 메서드
void setWidth(int w) {
width = w;
}
// 높이를 설정하는 메서드
void setHeight(int h) {
height = h;
}
};
int main() {
// Rectangle 객체 생성
Rectangle rect(10, 5);
// 메서드 호출을 통해 면적과 둘레를 출력
cout << "Area: " << rect.area() << endl;
cout << "Perimeter: " << rect.perimeter() << endl;
// 메서드 호출을 통해 너비와 높이를 수정
rect.setWidth(15);
rect.setHeight(7);
// 수정된 면적과 둘레를 출력
cout << "Updated Area: " << rect.area() << endl;
cout << "Updated Perimeter: " << rect.perimeter() << endl;
return 0;
}
Rectangle 클래스에는 width와 height라는 두 개의 멤버 변수가 있고, 이 변수들을 조작하기 위한 여러 메서드가 정의되어 있습니다. area()와 perimeter()는 객체의 너비와 높이를 사용하여 면적과 둘레를 계산하는 메서드입니다. setWidth()와 setHeight()는 객체의 너비와 높이를 수정할 수 있는 메서드입니다. main 함수에서 Rectangle 객체 rect를 생성한 뒤, 메서드를 호출하여 면적과 둘레를 계산하고, setWidth()와 setHeight() 메서드를 통해 너비와 높이를 수정한 후 결과를 출력합니다.