아키텍처 공부를 하다보니 문득 재사용에대한 궁금증이 들었다
재사용은 무엇이며, 왜 중요한 것이며, 어떻게 고려해야하는 것인가?
코드 재사용
- 소프트웨어 재사용
- 기존의 소프트웨어 또는 소프트웨어 지식을 활용해 새로운 소프트웨어를 구축
- 단순 코드의 재사용 : 템플릿, 함수와 같은 코드의 일부를 재사용
- 재사용가능한 자산을 재활용 : 자산에는 설계, 요구명세, test, 아키텍쳐 등이 포함됨
- → 그렇다면 과연 지나친 추상화로 가독성이 떨어지게 되는 경우 과연 재사용을 위한 추상화가 의미가 있는 것인가?라는 의문이 듦
- 재사용을 함으로 작업 시간, 에너지, 비용 절약
- 재활용을 쉽게하는 특성 : 모듈성, 저결합도, 고응집도, 캡슐화, 관심의 분리
- → 최소의 역할로 작게 분리하는 느낌
- 라이브러리 : 프로그램 일부를 재사용 가능하게 추상화를 한 좋은 예시
- 디자인 패턴 : 비슷한 문제를 풀기 위한 범용적인 해법
- Don’t repeat yourself : 중복 배제. 모든 지식은 시스템 내에서 유일하고 중복이 없으며 권위있는 표상만을 갖는다
- 코드 재사용에 대해 논의할 수 있는 예시
- 코드를 재사용할 수 있게 만들어서 중복 코드 방지해야 한다
- 코드를 재사용하는 것보단 복제를 선택하여 로직을 단순하게 끌고 가야 한다
- 추후 코드를 재사용할 수 있도록 새로운 서비스를 만들어야한다
- 라이브러리를 활용할 것인지 자체 코드를 만들어야할지
- 중복 로직을 모든 서비스에서 재사용될 수 있도록 계층을 분리할지, 프레임워크로 만들어야할지
재사용성
- 특정 기능을 두 번이상 사용할 수 있는 가능성
- 기존의 자원을 재사용의 필요여부를 판단하는 기준치가 될 수 있다
- 재사용성은 기능의 목적, 사용가능한 환경, 호환성을 고려해야함
재사용성을 염두해야하는 경우 |
- 특정 기능이 다양한 목적을 달성하는데 사용되어야 한다 - 특정 기능이 다양한 상황과 환경에서 사용될 수 있다 - 특정 기능이 다양한 것과 호환이 가능해야 한다 |
재사용성이 없다고 판단될 수 있는 경우 |
- 특정 기능이 특정 목표에만 사용해야 한다 - 특정 기능이 다수의 상황에서 유효하지 않다 - 특정 기능이 본래의 목적과는 다르게 사용될 수 있다 |
재사용
- 처음 설계된 것과 다른 목적으로 코드를 사용하는 것
- 기존 자원을 사용하는 행위 그자체를 말한다
재사용성과 재사용
재사용성은 재사용의 필요성을 촉구할 뿐 실제의 실행을 보장하는 것이 아니다
또한 정확한 기준이나 정책이 없으면 재사용의 실패 가능성이 높아진다.
이 과정에서 사공이 많아져서 배가 산으로 가거나, 비용이 필요 이상으로 드는 불상사가 생길 수 있다
이를 방지하기위해 재사용성에 대한 질문을 먼저 던저봐야 한다
- 사용하는 사람들이 특정 기능이 재사용이 가능하다는 사실을 아는가?
- 사용하는 사람들이 어디서 찾을 수 있는지, 어떻게 사용할 수 있는지부터 알아야 한다
- 이러한 문제 예방 방법
- → 다양한 기능들을 효과적으로 발견, 이해하는데 필요한 메타데이터를 표준화
- → 기능 및 기술 문서 위치를 표준화
- 사용하는 사람들이 재사용이 가능한 기능을 활용할 수 있는가?
- 특정 기능이 사용 가능한 상태인지, 예상되는 수요가 있는지 여부를 확인해야 한다
- 시간이 흘러도 예상대로 기능이 작동할 것이라는 보장은 없기 때문이다
- 특정 기능이 재사용이 가능한 이유를 파악할 수 있는가?
- 특정 기능이 범용적으로, 반복적으로 역할을 수행할 수 있는 것이 맞는지 확인해야 한다
- 특정 기능이 재사용되지 않을 수 있는 이유가 있는가?
- 재사용은 선택의 문제이기 때문에 특정 기능이 재사용하지 않거나 못하는 요인이 존재하는지 의심해봐야한다
- → 만약 재사용을 선택함으로 큰 변화가 생긴다면 선택을 신중하게 할 필요가 있다는 것
재사용의 경제성
재사용성이 있다 판단된 기능을 실제로 재사용을 할지 여부를 판단하고자 하거나, 재사용을 하는 것이 합리적인 선택인지 판단하고자 할 때 경제적 측면을 고려해보면 좋다. 단순하게 재사용 효용이 크면 재사용을 시도할 가치가 있다는 것은 누구나 직관적으로 알 수 있지만, 이를 계산하는 것이 어려운 부분인 거 같다
재사용 효용 = 재사용으로 절약한 비용 - 재사용 비용
- 생각해볼 수 있는 재사용 비용 요인
- 재사용 기능의 영향력
- 재사용 기능의 변경 영향도
- 재사용 기능의 변경 빈도
- 재사용 기능의 일관된 적용이 가능한지 여부
- 체계적인 매뉴얼 존재 여부
- 안정적인 인터페이스 구축 여부
재사용 필요해? 안 필요해?
재사용성을 고려할만한 경우
- 여러 곳에서 중복 코드가 보이거나, 추상화를 할 수 있는 경우
재사용성을 의심해야하는 경우
- 나중에 필요할 거 같은 막연한 생각
- 재사용 코드의 활용도가 낮은 경우
- 새롭게 코드를 짜는 것이 비용이 많이 들지 않는 경우
- 재사용 기능에 관련하여 팀원과 많은 소통이 필요한 경우
- 해당 기능이 재사용 가능한지 알 수 없는 경우
참고 자료
https://ko.wikipedia.org/wiki/코드_재사용
https://yozm.wishket.com/magazine/detail/1930/
728x90
'TIL' 카테고리의 다른 글
TCP/IP, UDP (0) | 2023.10.01 |
---|---|
typealias (0) | 2023.10.01 |
AppDelegate (0) | 2023.10.01 |
Unit Test (0) | 2023.10.01 |
Dependency Injection (0) | 2023.09.21 |