<aside> 💡
[요약] 아키텍처는 소프트웨어를 요구사항 변화에 유연하도록 쪼개고 중복을 제거하기 위해 비슷한 조각끼리 묶은 결과이다. 코드 단위의 연결은 의존성 규칙에 근거한다.
</aside>
설계와 아키텍처는 같다. 저수준의 세부사항과 고수준의 구조/결정 사항이 소프트웨어 전체 설계를 구성하기 때문이다.
소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.
개발자는 클린한 소프트웨어 아키텍처를 학습하고 항시 코딩할 때마다 적용하려 노력해야 한다. 급하다고 대충짜면 오히려 느리다.
소프트웨어를 클린하게 설계하고 구현하는 일이 비즈니스와 무관한 개발자의 자기만족으로 치부되지만, 클린 아키텍처는 비즈니스 성과에도 해당한다.
프로그래밍 기법(패러다임)과 프로그래밍 언어의 개념을 구분해야 한다.
프로그래밍 기법은 프로그래밍 언어에 무관하다. 하지만 프로그래밍 언어는 프로그래밍 기법을 편리하게 사용할 수 있도록 돕거나, 해당 프로그래밍 기법을 벗어나는 명령어를 제공하지 않음으로써 프로그래밍 기법을 강제로 적용시킨다.
이를테면, C로도 객체지향 프로그래밍 기법에 따라 코드를 작성할 수 있다. 반면, JAVA를 쓰면서도 객체지향 프로그래밍의 제약(e.g. 무분별한 public 변수 정의)를 위반하면 객체지향 프로그래밍을 적용했다고 볼 수 없다.