ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [클린코드] 경계
    Java/클린코드 2022. 3. 2. 22:22

    제로베이스 클린코드 요약 정리 글입니다.

    모호한 경계를 구분짓기

    1. 경계란
    2. 경계 짓기 (1) 우리 코드를 보호하기
    3. 경계 짓기 (2) 외부 코드와 호환하기
    4. 외부 라이브러리 테스트하기 - Learning Test

     

    1. 경계란

    내부 코드 |경계| 외부 코드

    시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다.

    오픈소스, 라이브러리를 안쓰는 프로젝트는 없으며 내부 코드와 외부 코드를 병합해야하는 상황이 생긴다.

    우리코드(내부 코드) 와 외부 코드를 깔끔하게 병합시키려면 경계를 잘 지어야 한다.

     

    2. 경계 짓기 (1)

    우리코드 보호 하기

    캡슐화 (Encapsulation)

    갭슐화 : 객체의 실제 구현을 외부로부터 감추는 방식

    다시 말해 Public 메소드는 외부에 공개하지만 내부 Data, 내부 메소드는 공개하지 않아야 한다는 의미이다.

     

    예시) Sensor 를 관리해야 한다. Sensor 는 외부에서 사용된다.

    캡슐화를 적용하는 흐름은 이렇다.

    • Sensor Id 와 Sensor 객체로 저장하고 싶어서, Map 을 사용한다.
    Map<Sensor> sensors = new HashMap<Sensor>();
    Sensor s = sensors.get(sensorId);
    • 하지만 Map을 그대로 사용하면 Map이 가진 clear() 가 외부로 노출된다.
      • 데이터가 손상될 수 있다.
    • Sensor의 '외부' 코드 관점에서 Sensor 객체의 값들만 가져오고 싶다.
    • 따라서 캡슐화를 진행한다.
    public class Sensors {
        private Map<Sensor> sensors = new HashMap<Sensor>();
    
        public Sensor getById(String sensorId) {
            return sensors.get(sensorId);
        }
    }

    캡슐화를 통해서 Map 을 감추고, 원하는 기능만 공개함으로 인해 적절한 경계로 우리 코드를 보호할 수 있다.

     

    3. 경계 짓기(2)

    외부 코드와 호환하기

    외부 코드를 호출할 때 우리가 원하는 방식으로 사용하고 싶을 때를 생각해보자

    Adapter 패턴

    어댑터 패턴을 사용하면 외부 코드를 호출할 때, 우리가 정의한 인터페이스 대로 호출하기 위해 사용할 수 있다.

    Client Request 방식대로 Adapter 클래스를 호출하면 Apapter 클래스에서 Adaptee(외부 코드) 에 맞추어 변환해서 호출하는 방식이다.

     

    4. 외부 라이브러리 테스트하기

    Learning Test 를 작성해 라이브러리를 테스트한다.

    라이브러리는 이미 테스트 되어 있지만 라이브러리를 '사용' 하는 테스트를 해야한다는 의미이다.

    테스트하는 장점은 다음과 같다.

    • 학습 테스트는 이해도를 높인다.
    • 외부 코드의 버전이 변경되었을 때, 우리 코드와 호환되는 지 확인할 수 있다.

    'Java > 클린코드' 카테고리의 다른 글

    [클린코드] 단위테스트  (0) 2022.04.27
    [클린코드] 오류 처리  (0) 2022.03.01
    [클린코드] 객체와 자료구조  (0) 2022.02.23
    [클린코드] 형식 맞추기  (0) 2022.02.15
    [클린코드] 주석  (0) 2022.02.11
Designed by Tistory.