C++
Friend 문법
Nin
2021. 1. 6. 16:09
friend 문법은 객체지향에 예외를 두는 문법이다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고
그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
class Item
{
};
class Smith
{
};
모든 아이템은 무조건 Smith에서 만들어져야 한다고 가정하면
Item 클래스는 절대로 객체화가 되면 안된다.Smith에서만 생성되어야 한다.
class Item
{
private:
Item()
{
}
};
그러면 이렇게 해주면 외부에서 만들 수(객체화) 없다.
그리고 역시나 Smith 클래스에서도 사용이 불가능하다.
class Smith
{
public:
Item* CreateItem()
{
return new Item();
}
};
상단의 조건이라면 위의 코드처럼 CreateItem 함수를 통해서 Item을 만들어낸다.
그치만 이것도 private로 막혀있기 때문에 불가능해진다.
조건을 보면 Item 생산은 모든 객체와 코드상에서 불가능 해야 한다.
유일하게 Smith에게만 허용하고 싶은게 여기서의 조건이다.
여기서 friend 문법을 사용하면 해결할 수 있다.
class Item
{
public:
friend Smith;
};
이렇게 friend 처리를 해주면 되는데 위이 코드로 보면 Item은 Smith의 존재를 모른다.
그렇기 때문에 전방선언을 해줘야 하고 friend 문법은 전방선언 만으로도 사용이 가능하다.
class Smith;
class Item
{
public:
friend Smith;
private:
Item()
{
}
};
class Smith
{
public:
Item* CreateItem()
{
return new Item();
}
};
이렇게 사용한다.
friend 문법은 자칫 여기저기 예외가 있네?하고 남발하다보면
처음에 생각했던 개념에서 점점 멀어진다.
그럴거면 private으로 지정해둔 의미도 점점 사라진다.