아키텍쳐 : 기본구조, 소프트웨어 베이스
동일한 아키텍쳐 : 기본 구조가 같은 여러 형태의 결과물
품질이 좋다 = 요구사항을 잘 충족한다
목표설정 → 시스템 타입 (대화형 : 일반적인, 이벤트형 : 외부신호, 변환형 : 데이터 변환, 객체 영속형 : 데이터베이스 시스템) → 아키텍처 패턴 → 시스템 구체화(서브 시스템의 인터페이스, 인터렉션 구체화) → 검토
문제 해결의 윤곽 제시 / 원칙과 지침 역할
아키텍처 스타일, 표준 아키텍처도 같은 말
👍 장점 : 시간 단축, 품질 향상, 검증 편리, 예측 가능 등
레이어(계층) 패턴 : 각각의 상위, 하위 레이어끼리만 상호작용
특정 레이어만 유지보수하여 시스템을 개선할 수도 있음
클라이언트-서버 패턴 : 클라이언트는 기본적으로 다수(자원 요청), 서버는 항시 대기 상태(자원 제공), 각자의 기능이 독립적으로 동작
파이프-필터 패턴 : 스트림(데이터의 흐름)의 각 단계를 파이프와 필터로 연결, 파이프는 라인 그리고 필터는 데이터를 캡슐화(정보은닉)하는 것 / 재사용성, 확장성이 좋음 → 데이터 변환, 버퍼링, 동기화 등의 작업에 유리
모델-뷰-컨트롤러 패턴 : 컴포넌트(모듈)을 모델,뷰,컨트롤러로 구성한 것
모델 : 핵심기능, 데이터 보관 / 컨트롤러 : 입력처리 / 뷰 : 처리된 정보 표시
여러 형태의 뷰를 생성할 수 있으며, 일반적인 어플리케이션에 적합
마스터-슬레이브 패턴 : 마스터 컴포넌트가 지시한 일을 여러 슬레이브 컴포넌트가 병렬처리하여 결과를 취합 → 슬레이브가 몇개가 고장이 나도 업무처리에 문제 x
브로커 패턴 : 클라이언트의 요청을 브로커가 중간에서 적절한 서버와 연결해주는 형식 / 여러 서버가 존재하여 분산환경 시스템이라고도 함
피어-투-피어 패턴 : 서버와 클라이언트가 서로 역할을 바꿀 수 있는 형태, 2가지 일을 병렬로 수행하는 멀티스레딩이 특징
이벤트-버스 패턴 : 이벤트 발행 → 채널(버스)를 구독하는 리스너들이 이벤트를 받아서 처리하는 형식
모델-뷰-컨트롤러 패턴 : 많은 컴포넌트들이 공유 데이터를 관리하는 블랙보드에 접근하여 원하는 데이터를 찾는 형식 / 음성인식, 신호해석 등의 기술에서 사용함
데이터 : 상수 / 변수 / 배열 / 구조체
기능 : 실행문 / 분기문 / 반복문 / 함수
모듈 : 모듈화를 통해 분리된 기능
재사용, 유지보수가 가능하다 → 모듈이 독립성이 강해야 함(= 품질이 좋음)
독립성 :
팬-인 : 모듈로 들어오는 제어신호, 화살표가 들어온 것
팬-아웃 : 모듈로 나가는 제어신호, 화살표가 나간 것
👉 시스템 복잡도를 최소화하려면 인은 높게, 아웃은 낮게 설계
공통모듈 : 정확성(필요성), 명확성(비중의적), 완전성, 일관성(충돌방지), 추적성(출처/관계 파악)
코드 : 일정한 규칙에 따라 만들어진 기호 / 식별,분류,배열
아키텍쳐 패턴 : 시스템 구조
디자인 패턴 : 서브 시스템 상세 구현 (생성 5개, 구조 7개, 행위 11개)
→ 장점 유사
추상팩토리 : 상위클래스 객체 생성코드를 하위 클래스에게 상속, 연동해서 변경됨 (의존, 하위 클래스에 의존 x)
팩토리메소드 : 객체 생성코드를 하위 클래스에서 구체화, 상위클래스는 인터페이스만 제공 → 각각의 클래스가 서로 다른 작업수행이 가능
빌더 : 분리된 인스턴스를 조합하여 객체 생성 → 생성과 표현 분리
같은 객체를 생성해도 다른 결과를 도출할 수 있음
프로토타입 : 원본을 복제하는 형태로 객체 생성, 비용 저렴
싱글톤 : 클래스 내 인스턴스가 하나만 필요할 때, 동시 참조 불가능
빌더 :
어댑터 : 클래스간에 서로 일치하지 않는 인터페이스를 변환해줌
브릿지 : 추상층(기능 정의), 구현층(구체화) 서로 분리, 서로 독립적인 확장이 가능하도록 구성
컴포지트 : 단일/복합 객체를 하나로 다루기 위해 트리구조로 구성
데코레이터 : 클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태
퍼싸드 : 서브 클래스의 통합 인터페이스를 제공할 수 있는 wrapper객체를 통해서 서브 클래스들을 간편하게 이용할 수 있는 패턴
플라이웨이트 : 다수의 유사 객체 생성이 필요할 때 최대한 공유해서 사용, 메모리 절약
프록시 : 접근이 어려운 객체에 접근할 수 있또록 인터페이스 역할 수행
책임연쇄 : 둘 이상의 객체가 연결되어 책임이 차례로 넘어감
커맨드 : 요청이 필요한 명령어를 객체화하여 로그에 기록하는 형식
인터프리터 : 문법 표현 정의/ 맞춤법 검사
반복자 : 접근이 잦은 객체는 동일한 인터페이스 사용하도록 순차접근, 디렉토리 반복자
중재자 : 복잡한 상호작용 캡슐화, 결합도를 낮춤
메멘토 : 특정 시점의 상태를 객체화하고, 필요에 따라 해당 위치로 들림
옵저버 : 객체 상태가 변하면 상속 중이 다른 객체들에게 전달하는 형태, 이벤트 발행과 구독
상태 : 상태에 따라 동작을 다르게
전략 : 동일 계열 알고리즘 상호 교환, 독립적 사용/변경 가능
템플릿 메소드 : 상위 클래스에서 인터페이스를 정의하고, 하위 클래스에서 인터페이스 구체화, 코드의 유지보수가 쉬워짐 ( = 생성패턴.팩토리 메소드)
방문자 : 처리 기능을 별도의 클래스로 분리하는 패턴, 데이터 구조와 기능을 분리
참고한 영상 : 정보처리기사 필기