계층형 설계2
May 26, 2024
쏙쏙들어오는 함수형 코딩
직접구현
: 다른 계층에 직접 의존하지 않고, 자신의 책임을 스스로 처리하는 소프트웨어 설계 패턴추상화 벽
: 세부 구현을 감춘 함수로 이루어진 계층작은 인터페이스
: 추상화벽에 만든 함수는 작은 인터페이스라고 함편리한 계층
: 때에 맞게 패턴을 사용 할 수 있을만큼 하라는 얘기같음
이미 앞 챕터에서 직접구현을 설명했으니, 이번 챕터에선 3가지 패턴을 설명하도록 하겠음.
# 추상화 벽
추상화 벽이란 세부 구현을 감춘 함수로 이루어진 계층을 말함.
- 추상화 벽 보다 상위계층에 있는 함수는 추상화 벽 하위에 있는 함수의 데이터 구조를 몰라도 사용 가능해야함
- 추상화 벽 보다 하위계층에 있는 함수들은 함수를 어떻게 사용하는지 신경쓰지 않고 core개발에만 몰두 할 수 있음
추상화벽이라고함은 벽 위에 있는 계층에서 추상화벽보다 하위계층에 있는 함수로 연결된 화살표가 없는것도 의미함.
추상화 벽은 언제 사용하면 좋을까?
쉽게 구현을 바꾸기 위해
구현을 간접적으로 사용 할 수 있기때문에 나중에 구현을 바꾸기 쉬움
(간접적으로 사용한다는것은 함수의 구현부는 신경쓰지않고 사용만 한다는 의미같음)
코드를 읽고 쓰고 쉽게 만들기 위해
추상화벽을 사용하면 함수의 세부적인 코드를 신경쓰지 않아도 코드를 만들 수 있음.
팀 간에 조율해야 할 것을 줄이기 위해
추상화벽을 사용하고 있는 상황에서 함수에 문제가 생겼을때 어느 팀에서 만든 함수가 문제인지 명확히 알 수 있음.
주어진 문제에 집중하기 위해
구체적인 부분을 제외하고 중요한 부분만 볼 수 있기 때문에 코드에서 발생하는 문제를 파악할때 쉽게 문제를 파악 할 수 있음.
추상화벽의 궁극적인 목표는?
팀 간에 커뮤니케이션 비용을 줄이고, 복잡한 코드를 명확하게 하기 위해 전략적으로 사용해야함
# 작은 인터페이스
작은 인터페이스는 새로운 코드를 추가할 위치에 관한것임. 인터페이스를 최소화하면 하위 계층에 불필요한 기능이 쓸데없이 커지는 것을 막을 수 있음.(인터페이스를 최소화 한다는것은 추상화벽에 함수를 최소한으로 만든다는 소리임)
새로 만든 액션을 어디에 위치 시키는것이 좋을까?
장바구니에 많은 상품을 담은 사람이 시계를 구입하면 10% 할인해주는 함수를 만들고 어디에 위시키면 좋을까?
구현하려는 함수는 추상화벽에 있는 함수로 구성가능하기에 추상화벽 위에 만드느것이 좋음. 이렇게 하면 쓸데없이 코드를 만들지 않아도 되서 좋고, 개발팀에 따로 문의하지않고 함수를 만들 수 있다는 장점이 있음.
작은 인터페이스를 실천하는 방법은 가능한 현재 계층에 있는 함수로 새로운 함수를 구성하는것임.
# 편리한 계층
커다랗고 완벽한 추상화 계층을 만들면 뿌듯할것임. 하지만 시간이 지나면 열심히 만든 추상화벽이 도움이 되지 않을 수 있음.
또 비즈니스 문제를 해결하기위해 이처럼 거대한 추상계층을 만들 시간적 여유가 없을 수 있음.
그래서 현실에 맞게 만들 수 있을만큼 추상계층을 만들고, 자기가 코드를 사용하는데 편하다면 멈춰도 됨.
# 호출 그래프로 알 수 있는 비기능적 요구사항
유지보수성
: 요구 사항이 바뀌었을때 가장 쉽게 고칠 수 있는게 어떤 코드인지테스트성
: 어떤 것을 테스트 하는것이 중요한지재사용성
: 어떤 함수가 재사용하기 좋은지
# 정리
- 상위계층에 있는 함수일수록 코드를 고치기 쉬움.
- 하위계층에 있는 함수일수록 고치기 어려운 함수임.
- 하위계층에 있는 함수일수록 의존하는 함수들이 많기 때문에 더욱 테스트를 신경써야함.
- 아래에 있는 코드가 재사용하기 더 좋음.