제 생각에는 외부 참조의 멤버 변수 접근자(?)는 해당 클래스의 의미에 따라서 달라집니다.
A.b의 멤버 변수가 외부 클래스에서 참조되어야 하는 의미라면 public 접근자가 적당합니다. 하지만 A.b의 멤버 변수가 외부 클래스에서 참조될 필요가 없다면 private이나 protected 접근자가 사용되는 것이 좋습니다. (Encapsulation의 의미를 생각해 보십시오.)
일반적으로 외부 클래스 참조 변수가 2중 참조가 되는 경우는 많지 않으므로 후자 private나 protected가 적당한 편입니다. 왜냐하면 다른 클래스(C)가 B를 접근하여야 한다면 A를 통하여서가 아니라 C 내부에 멤버 변수 C.b를 사용하여 C.b->myMethod() 접근하는 것이 올바르기 때문입니다. (역시 encapsulation의 의미)
하지만 다음과 같은 예의 경우에는 외부 참조를 사용할 수 있을 것 같습니다.
class Packet; // 네트워크 패킷 관련 클래스
class NIC; // 네트워크 하드웨어 관련 클래스
class MyAlgorithm; // 해당 패킷 처리 알고리즘
(위의 예제는 일반적인 네트워크 프로그램 방식이 아닙니다. 예를 위해 제가 만들어낸 방식입니다. 양해하여 주십시오. ^^)
MyAlgorithm은 NIC와는 의미가 다르므로, 상속받는 개념과 다릅니다.
NIC.pPacket->sendPacket(); //과 같이 NIC 클래스에서는 Packet 클래스를 참조합니다.
MyAlgorithm.pNIC->pPacket->sendPacket(); //과 같이 사용할 수 있습니다. (물론 C++ 문법은 아니지만 쉽게 설명드리기 위해 다음과 같이 표시하였습니다.)
제가 전문가는 아니기에 적당한 예제를 보여드리지는 못하였습니다만, 클래스를 디자인할 때 의미에 따라 외부 클래스 참조 변수의 접근자는 달라질 수 있습니다.
멤버 변수는 되도록
멤버 변수는 되도록 public으로 하지 않는 것이 좋습니다. 그리고 혹시 파생 클래스에서 사용할 필요가 있다면 protected로 해야겠지요.
제가 코딩 표준이나
제가 코딩 표준이나 아키텍쳐에 관하여 전문가가 아닙니다.
제 생각에는 외부 참조의 멤버 변수 접근자(?)는 해당 클래스의 의미에 따라서 달라집니다.
A.b의 멤버 변수가 외부 클래스에서 참조되어야 하는 의미라면 public 접근자가 적당합니다. 하지만 A.b의 멤버 변수가 외부 클래스에서 참조될 필요가 없다면 private이나 protected 접근자가 사용되는 것이 좋습니다. (Encapsulation의 의미를 생각해 보십시오.)
일반적으로 외부 클래스 참조 변수가 2중 참조가 되는 경우는 많지 않으므로 후자 private나 protected가 적당한 편입니다. 왜냐하면 다른 클래스(C)가 B를 접근하여야 한다면 A를 통하여서가 아니라 C 내부에 멤버 변수 C.b를 사용하여 C.b->myMethod() 접근하는 것이 올바르기 때문입니다. (역시 encapsulation의 의미)
하지만 다음과 같은 예의 경우에는 외부 참조를 사용할 수 있을 것 같습니다.
class Packet; // 네트워크 패킷 관련 클래스
class NIC; // 네트워크 하드웨어 관련 클래스
class MyAlgorithm; // 해당 패킷 처리 알고리즘
(위의 예제는 일반적인 네트워크 프로그램 방식이 아닙니다. 예를 위해 제가 만들어낸 방식입니다. 양해하여 주십시오. ^^)
MyAlgorithm은 NIC와는 의미가 다르므로, 상속받는 개념과 다릅니다.
NIC.pPacket->sendPacket(); //과 같이 NIC 클래스에서는 Packet 클래스를 참조합니다.
MyAlgorithm.pNIC->pPacket->sendPacket(); //과 같이 사용할 수 있습니다. (물론 C++ 문법은 아니지만 쉽게 설명드리기 위해 다음과 같이 표시하였습니다.)
제가 전문가는 아니기에 적당한 예제를 보여드리지는 못하였습니다만, 클래스를 디자인할 때 의미에 따라 외부 클래스 참조 변수의 접근자는 달라질 수 있습니다.
댓글 달기