1. 경계란
•
오픈소스, 라이브러리를 안쓰는 프로젝트는 없다.
•
우리가 만든 코드에 외부에서 들어온 코드를 병합해야 한다.
•
외부 코드는 외부에서 만든 코드인데, 외부 시스템과 호출하거나 단순히 외부에서 만들어진 코드일 수 있다.
•
우리 코드와 외부 코드를 깔끔하게 통합시키기 위해 경계를 잘 지어야 한다.
2. 경계 짓기 - (1) 우리 코드를 보호하기
•
캡슐화(Encapsulation) - 객체의 실체 구현을 외부로부터 감추는 방식
•
Sensor를 관리해야 한다. Sensor는 외부에서 사용된다.
◦
Sendsor Id와 Sensor 객체로 저장하고 싶어서, Map을 사용한다.
◦
하지만 Map을 그대로 사용하면 Map이 가진 clear()가 외부로 노출된다.
◦
Sensor의 ‘외부’ 코드 관점에서 Sensor 객체의 값들만 가져오고 싶다.
◦
캡슐화를 한다.
3. 경계 짓기 - (2) 우리 코드를 보호하기
•
외부 코드와 호환하기 - Adapter 패턴
외부 코드를 호출할 때, 우리가 정의한 인터페이스 대로 호출하기 위해 사용하는 패턴
•
Adapter 패턴 in Elastic Search
•
우리가 원하는 방식인 read할 때 ByteBuffer[]로 parameter를 보내면, 외부 코드인 nettyChannel에 ByteBuf 타입으로 parameter를 변환하여 전달한다.
•
Page[] 타입 parameter로도 전달할 수 있다. Adapter에 메서드를 추가해 우리가 원하는 타입의 파라미터를 전달할 수 있다.
•
만약 adapter를 통한 변환을 거치지 않았다면 nettyChannel에 데이터를 전달할 때마다 타입을 변환하는 과정이 필요했고, 이는 중복을 발생시켰을 것이다.
4. 외부 라이브러리 테스트하기
•
Learning Test를 작성해 라이브러리를 테스트한다
•
외부 코드를 배우고, 안정성도 미리 검증할 수 있다