개요
서비스 로케이터 패턴은 소프트웨어 디자인 패턴으로, 애플리케이션 내의 서비스 위치를 추상화하여 서비스에 대한 검색을 캡슐화합니다. 이 패턴은 애플리케이션 내에서 서비스의 위치를 중앙 집중화하여 유연성을 향상시킵니다.
작동 원리
- 서비스 등록: 애플리케이션 시작 시, 서비스 로케이터에 서비스를 등록합니다. 이때 서비스는 인터페이스를 통해 등록됩니다.
- 서비스 검색: 서비스가 필요한 클라이언트는 서비스 로케이터를 사용하여 필요한 서비스를 검색합니다.
- 서비스 반환: 서비스 로케이터는 등록된 서비스를 찾아서 반환합니다.
장점
- 중앙 집중화된 서비스 위치: 서비스 로케이터를 통해 서비스의 위치를 중앙 집중화하여 관리할 수 있습니다.
- 유연성: 서비스의 위치를 동적으로 변경할 수 있으며, 클라이언트는 서비스의 구체적인 위치를 알 필요가 없습니다.
- 서비스 검색의 캡슐화: 서비스 로케이터를 통해 서비스 검색을 캡슐화하여 클라이언트 코드를 단순화할 수 있습니다.
단점
- 의존성: 서비스 로케이터에 의존하게 되므로, 의존성이 높아질 수 있습니다.
- 숨겨진 의존성: 서비스 로케이터를 사용하면 서비스의 위치가 숨겨져 있어서 코드를 이해하기 어려울 수 있습니다.
사용 사례
- 다중 구현을 가진 서비스의 위치를 추상화할 때 유용합니다.
- 서비스 위치를 동적으로 변경해야 할 때 사용할 수 있습니다.
- 프레임워크나 라이브러리에서 많이 사용됩니다.
using System;
using System.Collections.Generic;
// 인터페이스: ILogger
public interface ILogger
{
void Log(string message);
}
// 구현 클래스: ConsoleLogger
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("[Console] " + message);
}
}
// 구현 클래스: FileLogger
public class FileLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine("[File] " + message);
}
}
// 서비스 로케이터 클래스
public class ServiceLocator
{
private Dictionary<string, ILogger> services;
public ServiceLocator()
{
services = new Dictionary<string, ILogger>();
// 서비스 등록
services["ConsoleLogger"] = new ConsoleLogger();
services["FileLogger"] = new FileLogger();
}
// 서비스 검색 메서드
public ILogger GetLogger(string serviceName)
{
if (services.ContainsKey(serviceName))
{
return services[serviceName];
}
else
{
throw new KeyNotFoundException("Service not found: " + serviceName);
}
}
}
class Program
{
static void Main(string[] args)
{
// 서비스 로케이터 생성
ServiceLocator locator = new ServiceLocator();
// 로깅 서비스 가져오기
ILogger consoleLogger = locator.GetLogger("ConsoleLogger");
ILogger fileLogger = locator.GetLogger("FileLogger");
// 로깅
consoleLogger.Log("This is a log message to console");
fileLogger.Log("This is a log message to file");
}
}
반응형
'Programming > Design Pattern' 카테고리의 다른 글
비지터 패턴(Visitor Pattern) (0) | 2019.04.12 |
---|---|
중재자 패턴(Mediator Pattern) (0) | 2018.02.20 |
애자일 설계 (0) | 2017.11.11 |
옵저버 패턴(Observer Pattern) (0) | 2015.12.15 |
스트래티지 패턴(Strategy Pattern) (0) | 2015.12.13 |
객체 지향 프로그래밍(OOP) (0) | 2015.12.12 |
디자인 패턴의 종류 (0) | 2015.08.16 |