객체 지향 설계 5원칙 (SOLID)
단일 책임의 원칙(SRP)
하나의 객체는 단 하나의 책임을 가져야한다.
즉, 클래스나 모듈을 변경할 이유가 단 하나 뿐이어야 한다는 원칙
책임이라는 개념을 정의하며 적절한 클래스의 크기를 제시
개방 폐쇄의 원칙(OCP)
확장에는 열려있으나 변경에는 닫혀있어야만한다.
전달 받은 콜백 함수를 실행하도록 만들어 직접적인 변경을 방지한다. -> 콜백 함수의 변경은 허용 됨
리스코프 치환 원칙(LSP) ->
어플리케이션에서 객체는 프로그램의 동작에 영향을 주지 않으면서 하위 타입의 객체로 바꿀 수 있어야만 한다.
사각형의 get크기만 쓰기
인터페이스 분리 원칙(ISP) -> 적절한 인터페이스 분리가 필요하다.
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
클라이언트가 필요하지 않는 기능을 가진 인터페이스에 의존해서는 안되고 최대한 인터페이스를 작게 유지해야 한다.
사용자가 필요하지 않은 것들에 의존하지 않도록, 인터페이스는 작고 구체적으로 유지해야한다는 것
인터페이스: 특정 클래스가 반드시 구현해야할 메서드와 속성을 정의하는 일종의 템플릿 -> 서로 다른 클래스가 동일한 동작을 하는 것을 유추 가능
의존성 역전 원칙
프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. -> 즉, 높은 계층의 모듈(도메인)이 저수준 모듈(하부 구조)에 의존해서는 안된다.
의존성 주입
아키텍처 패턴
소프트웨어의 구조를 구성하기 위한 가장 기본적인 토대를 제시 -> 각각의 시스템들과 그 역할이 정의됨, 여러 시스템 사이의 관계와 규칙들이 포함되어있다.
MVC 패턴
모델(Model): 데이터와 비즈니스 로직을 담당
뷰(View): 사용자 인터페이스(UI)를 담당
컨트롤러(Controller): 클라이언트의 요청을 모델과 뷰로 전달해주는 역할
계층형 아키텍쳐 패턴
Presentation Layer - 클라이언트와 서버가 처음 만나는 부분 / router 연결 등과 같은 로직이 실행되는 부분 - 컨트롤러
Business Layer - 검증 등과 같은 비즈니스 로직들이 실행되는 부분 - 서비스
Persistence Layer(영속성 계층) - 데이터 베이스와 위의 계층들의 다리 역할 - 저장소
클린 아키택쳐 패턴
의존성이 아래로 내려가는 패턴
모든 의존성이 외부에서부터 내부로 내려오는 패턴 -> 소프트웨어를 내부 도메인으로 향하는 의존성을 가진 여러 계층으로 분리하는 패턴
클라이언트의 요청 처리, 외부 모듈 연결 -> 외부 계층에서 처리
핵심적인 비지니스 로직 -> 내부 계층에서 처리
소프트웨어의 재생산성과 확장성을 향상시키는게 주요 목적
마이크로 서비스 아키텍처 패턴(MSA) 패턴
시스템을 작고, 독립적으로 배포 가능한 서비스로 분할하는 패턴 => 각각의 서비스들이 독립적으로 작동
하나의 시스템에서 다양한 언어와 프레임워크를 도입할 수 있는 패턴
서비스 간의 통신은 API 또는 이벤트 기반 아키텍처(EDA)를 통해 통신한다.
빠르게 개발 - 구현해야할 때 아키텍처 패턴은 비효율적이다. ( 코스트, 리소스)
각 아키텍처 패턴간에 장단점을 확인하여 자신의 목적에 일치하는 아키텍처 패턴을 골라야지만 의미 없는 코스트나 리소스 소모를 줄일수있다.
계층형 아키텍처 패턴
시스템을 여러 계층으로 분리하여 관리하는 아키텍처 패턴이다.
단순,대중적,비용도 적게 드는 모든 어플리케이션의 표준 아키텍처다.
각 계층을 명확하게 분리해서 유지하고, 각 계층이 자신의 바로 아래 계층에서만 의존하게 만드는 것이다. ( 모든 의존성은 위에서 아래로 내려감)
계층화의 핵심 - 각 계층이 높은 응집도를 가지면서 다른 계층과는 결합도를 최소화 하는 것
3계층 아키텍처
프레젠테이션 계층