함수와 객체를 외부로 노출시켜도 되는지, 노출시켜야 하는지 판단하는 것은 설계에 있어 매우 중요하다.
꼭 필요한 게 아니라면 일단 숨겨놓는 것을 기본으로 삼는 것이 맞다. 사용자는 언제 어느 때 어떤 행동을 취할 지 누구도 알 수 없으므로, 최대한 숨기고 접근하지 못 하게 만들어 예외 상황을 원천 차단하는 것이 좋은 설계다.
은닉하는 방법
C++ 기준이다.
private 접근 지정자 사용하기
노출되지 않아야 하는 멤버는 private 접근 지정자를 통해 은닉한다.
namespace 사용하기
네임스페이스를 활용하면 접근 난이도를 높혀 일반 사용자의 접근을 차단할 수 있다.
// 코어 개발자만 사용하는 네임 스페이스로 감싸는 예시
// 네임스페이스를 명시하고 접근해야 하므로 접근 난도가 높아지고, 자연히 일반 사용자의 접근을 막을 수 있다.
namespace Engine
{
void DoSomething();
}
// 익명 네임스페이스(Anonymous namespace)를 사용하는 방식
// 익명 네임스페이스는 그것이 포함된 목적파일 단위로, 그 목적파일 안에서만 접근할 수 있는 변수와 함수를 선언한다. 이걸 소스파일에서 선언하면 해당 소스 파일 안에만 존재하는 선언이 되므로 외부에서 접근할 수 없다.
namespace
{
void DoSomething();
}
static 사용하기
전역적으로 선언된 static 변수나 함수는 그것이 포함된 목적파일 단위로, 그 목적파일 안에서만 접근할 수 있게(파일 스코프로 종속) 된다. 따라서 익명 네임스페이스처럼 소스 파일 안에서 선언하면 해당 목적 파일 안에만 존재하는 선언이 되므로 외부에서 접근할 수 없다.
이를 'Internal linkage'를 가진다고 말한다. Internal linkage를 가지는 요소는 심볼이 해당 목적 파일 안에서만 존재하게 되며 외부에서 extern 키워드 등으로 심볼을 찾을 수 없다.
'🛠 프로그래밍 일반 > 설계 방법론' 카테고리의 다른 글
서비스 로케이터 패턴 (Service locator pattern) (1) | 2025.04.19 |
---|---|
의존성 주입 패턴 (Dependency injection pattern) (0) | 2025.04.19 |
의존성 역전 (Dependency inversion principle) (0) | 2025.04.19 |