TIL - 3/27

헨도·2025년 3월 27일
0

TIL

목록 보기
21/21
post-thumbnail

소프트웨어 경계

  • 인터페이스 제공자와 사용자 사이에서 발생하는 입장차이로 인해 문제가 발생할 수 있는 부분(경계)을 의미합니다.

경계 인터페이스

  • 어떠한 메서드에서 Map, List 와 같은 자료구조를 반환하거나 공개 API 인수로 넘겨서 클라이언트에서 해당 인터페이스를 사용하는 경우를 의미한다.

문제점

  • 사용자가 너무 많은 인터페이스에 노출될 수 있다.

    • 예상치 못한 기능을 작동시킬 수 있다는 의미
    • Ex) HashMap.clear() 등
  • 자료구조 인터페이스의 변경이 발생한다면 수정할 코드가 많아진다.

    • 여러 자료구조를 자유롭게 변경하지 못하면서 자료구조에 종속되게 된다.

예시

  1. 한 레스토랑에 손님과 주방, 그리고 서빙하는 웨이터가 있다.

  2. 손님은 메뉴판에 존재하는 메뉴를 선택해 웨이터에게 요청한다.

  3. 웨이터는 주방에 요청을 전달하고 주방에서는 정해진 메뉴 중 손님이 요청한 메뉴를 응답한다.

    ※ 이때 손님은 요리에 대해서 A 재료를 넣고, B 재료를 넣고 … 이러한 주방 사정을 알 필요가 없다.

  • 손님 = Client = 내부 로직
  • 웨이터 = Sensor = 경계 인터페이스
  • 주방 = Map = 외부 API or 구조

해결방법

  • 래퍼 클래스로 감싸 원하는 메서드만 노출한다.
    • 올바르게 사용할 책임을 사용자에게 주지 않는다.
    • 제너릭을 사용하지 않고 데이터 타입 고정이 가능하다.
public class Sensors {
	private Map sensors = new HashMap();
    
    public Sensor getById(Long id) {
    	return (sensor) sensors.get(id);
    }
}
profile
Junior Backend Developer

0개의 댓글