목록책임 (3)
개발자는 기록이 답이다

8장에서는 유연하고 재사용 가능한 설계를 만들기 위해 적용할 수 있는 다양한 의존성 관리기법을 학습했다. 이번 장에서는 해당 기법들을 원칙이라는 관점에서 정리하고자 한다. 앞 장의 내용이 반복된다는 느낌을 받을 수 있겠지만, 이름을 가진 설계 원칙을 통해 기법들을 정리하는 것은 장황하게 설명된 개념과 매커니즘을 또렷하게 정리할 수 있게 도와줄 뿐만 아니라 설계를 논의할때 사용할 수 있는 공통의 어휘를 익힌다는 점에서도 가치가 있다. 1. 개방-폐쇄 원칙 로버트 마틴은 확장 가능하고 변화에 유연하게 대응할 수 있는 설계를 만들 수 있는 원칙 중 하나로 개방-폐쇄 원칙(Open-Closed Principle, OCP)을 고안했다. 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려있어야하고, 수..

한샘 2차 면접 준비를 앞두고, 레거시를 마이그레이션할때 어떻게 해야하는지 궁금했고 재직자분께 해당 섹션을 추천받아서 보게 되었다. (혹시 이미지와 관련하여 문제가 되는 부분이 있다면 삭제하겠습니다.) 📣 발표자 : 우아한형제들 권용근님 1. 레거시 개편은 왜 일어나는가? 레거시 시스템이란? 간단하게 말해서 낡은 시스템을 말한다. 현재는 비주류인 기술 많은 사람들이 좋아하고 선호했던 기술이 시간이 지나면서 잊혀지거나 시대를 역행하는 아키텍처라고 판단되서 비주류가 되는 기술 현재는 성능이 부족한 시스템 과거에는 요청을 다 처리했지만, 트래픽도 늘어나고 새로운 요구사항을 하면서 성능적인 챌린지도 하다보니 성능적으로 부족한 시스템 새로운 요구사항을 대응할 수 없는(어려운) 시스템 과거의 요구사항은 주어진대로 ..

2장에서는 클래스, 추상 클래스, 인터페이스를 조합해서 객체 지향 프로그램을 구조화하는 기본적인 방법과 상속을 이용해 다형성을 구현하는 기법을 소개했다. 다형성이 지연 바인딩이라는 매커니즘을 통해 구현된다는 사실도 설명했고, 상속은 코드를 재사용할 수 있는 가장 널리 알려진 방법이지만 캡슐화의 측면에서 합성이 더 좋은 방법이라는 사실을 이해했다. 또한, 유연한 객체지향 프로그램을 위해서는 컴파일 시간 의존성과 실행 시간 의존성이 달라야 한다는 사실 역시 알게 됐다. 객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 클래스, 상속, 지연바인딩이 중요하지 않은것은 아니지만 구현 측면에 치우쳐 있으며 객체지향 패러다임의 본질과 거리가..