friend 키워드는 C++에서 클래스의 private 또는 protected 멤버에 접근할 수 있는 권한을 부여하는 키워이다. 일반적으로 클래스 외부에서는 접근이 제한되는 private 또는 protected 멤버에 접근할 수 있도록 한다.friend 키워드는 함수 또는 클래스 앞에 붙을 수 있다. 즉, 특정 함수를 friend로 선언하거나, 다른 클래스 전체를 friend로 선언할 수 있다.❗️friend 키워드는 클래스의 캡슐화를 깨트리는 것처럼 보일 수 있지만, 실제로는 캡슐화를 유지하면서도 특정 함수나 클래스에 접근 권한을 부여함으로써 코드의 유연성을 높이는 데 사용friend 키워드를 사용할 수 있다.🧐friend로 선언하여 클래스의 private 멤버에 접근하게 할 수 있다.friend Power operator+ (Power op1, Power op2);
Power operator+ (Power op1, Power op2)
{
Power tmp;
tmp.kick = op1.kick + op2.kick;
tmp.punch = op1.punch + op2.punch;
return tmp;
}
c = a + b;
c.show();
operator+ 함수는 Power 클래스의 멤버 함수가 아니라 외부 함수다. 그러나 friend로 선언되어 있기 때문에 Power 클래스의 private 멤버인 kick과 punch에 접근할 수 있다.a + b와 같은 표현은 a.operator+(b)보다 더 직관적일 수 있다.friend bool operator== (Power op1, Power op2);
bool operator== (Power op1, Power op2)
{
return (op1.kick == op2.kick) && (op1.punch == op2.punch);
}
if (a == b)
{
cout << "같음" << endl;
}
else
{
cout << "다름" << endl;
}
friend Power& operator+= (Power& op1, Power op2);
Power& operator+= (Power& op1, Power op2)
{
op1.kick += op2.kick;
op1.punch += op2.punch;
return op1;
}
a += b;
a.show();
friend Power& operator++ (Power& op);
Power& operator++ (Power& op)
{
++op.kick;
++op.punch;
return op;
}
++a;
a.show();
friend Power operator++ (Power& op, int);
Power operator++ (Power& op, int)
{
Power tmp = op;
op.kick++;
op.punch++;
return tmp;
}
a++;
a.show();
friend Power operator+ (Power op1, int op2);
Power operator+ (Power op1, int op2)
{
Power tmp = op1;
tmp.kick += op2;
tmp.punch += op2;
return tmp;
}
b = a + 2;
b.show();
위의 코드에서 friend 키워드로 선언된 모든 연산자 함수들은 클래스의 private 멤버에 접근할 수 있다. 이를 통해 두 객체 간의 연산을 자연스럽게 표현할 수 있지만, friend 키워드는 적절히 사용하는 것이 중요하다. 너무 많은 함수나 클래스에 접근 권한을 부여하면, 코드의 복잡성이 증가하고 에러를 유발할 수 있다. 따라서 friend 키워드는 필요한 경우에만 사용하고, 그 외의 경우에는 클래스의 public 인터페이스를 통해 접근하는 것이 좋다.