내가 볼려고 만든 정리본 -- 수제비를 참고하였다.
소프트웨어 전통적 방법론
- 종류
폭포수 모델
프로토타이핑 모델
나선형 모델
- 점진적 개선해서 완벽하게 만드는 것
- 위험 감소 및 변경에 유연
- 계획 및 정의 -> 위험 분석 -> 개발 -> 고객 평가 (계위개고)
소프트웨어 개발 방법론
애자일 방법론
- 절차보다는 사람이 중심
- 문서보다 코드를 강조
- 종류
객체지향 설계 원칙(SOLID)
단일 책임의 원칙(SRP : Single Responibility Priciple)
개방 폐쇄 원칙(OCP : Open Close)
리스코프 치환의 법칙(LSP : Liskov Subsititution)
- 상속받은 자식클래스는 어디서나 부모클래스로 교체할 수 있어야 함
인터페이스 분리의 원칙(ISP : Interface Segregation)
- 특정 기능에 대한 인터페이스는 다른 기능이 변해도 영향 받지 않아야 함
의존성 역전의 법칙(DIP : Dependency Inversion)
- 클래스를 참조할 때, 클래스의 상위인 추상클래스, 인터페이스를 사용할 것
객체지향이란
- 속성과 메서드가 결합한 상태
- 캡슐화, 상속성, 다형성, 추상화, 정보 은닉, 관계성
객체지향 분석 방법론 종류
- OMT
- 럼바우가 만듦
- 종류 : 객체, 동적, 기능 모델링
- 부치, 야콥슨(Jscobson) 이라는 사람들이 만든 방법도 있음
비용 산정 모델
Loc 모형
- S/W 각 기능의 원시코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구해서 비용 산정
Man Month
- 한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 비용 산정
- Man Month : LOC / 월간 생산량
- 프로젝트 기간 : man month / 인력
COCOMO
- 보헴이 제안
- 프로그램 규모에 따라 비용 산정
- 비용 산정 결과는 프로젝트를 완성하는데 필요한 노력으로 산정(Man-Month)
- 종류
조직형(Organic)
반 분리형(Semi-Organic)
임베디드형(Embedded)
기능점수 (FP)
푸트남 모형
- 소프트웨어 개발주기의 단계별로 요구할 인력의 분포를 가정하는 방식
- 생명주기 예측 모형
현행 시스템 분석
소프트웨어 아키텍처 4+1 뷰
- 1은 유스케이스
- 4는 논리 뷰, 구현 뷰, 프로세스 뷰, 배포 뷰
유스케이스 뷰
- 다른 뷰를 검증
- 사용자, 설계자, 개발자 관점
논리 뷰
프로세스 뷰
구현 뷰
- 정적인 소프트웨어 모듈의 구성
- 컴포넌트 구조와 의존성
배포 뷰
소프트웨어 아키텍처 패턴 유형
파이프-필터 패턴
브로커 패턴
- 분리된 컴포넌트들로 이루어진 분산 시스템에서 사용
모델뷰컨트롤러 패턴
- 모델 : 핵심 기능과 데이터 보관
- 뷰 : 사용자에게 보여줌
- 컨트롤러 : 사용자로부터 요청받아 처리
- 컨트롤러 -> 모델 -> 컨트롤러 -> 뷰
디자인패턴
생성 패턴 (생빌 프로 팩앱싱)
-
Builder = 조립하는거야
-
Prototype- 어떤 type으로 만들래? -> 원형
- 일반적인 원형을 만들고 복사한 후 필요한 부분만 수정하여 사용
-
Factory Method - 엄마 팩 좀 줘. => 엄마라는 상위클래스가 있고 그 안에 어떤 행위를 할 수 있는 함수가 정의되어 있고 자식클래스(나)는 그 행위함수를 오버라이딩해서 팩을 요청하도록 수정하여 엄마한테 요청
- 상위클래스에서 인터페이스를 정의하고 하위클래스에서 인스턴스를 생성
- 상위클래스에서는 인스턴스를 만드는 방법만 정의하고 하위클래스에서 그 데이터의 생성과 조작하는 함수를 오버라이딩해서 분리하는 것
-
Abstact Factory = >abstract가 추상클래스를 상속받는 메서드니깐 말 그대로 비슷한 객체들의 조합인 인터페이스를 만든다고 생각
- 구체적 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공
-
Singleton
- 객체를 하나만 생성, 어디에서든 참조 가능하도록
구조패턴 (구 브데 퍼플 프록 컴 어)
Bridge
- 기능의 클래스 계층과 구현의 클래스 계층을 연결
Decorator
- 기존에 구현된 클래스에 필요한 기능을 추가해 나가는 패턴으로 객체의 결합을 통해 기능을 동적으로 확장
Facade
- 복잡한 인터페이스에 대해 단순한 인터페이스를 제공함으로써 단순한(통합된) 인터페이스 제공
Flyweight
- 클래스의 경량화를 목적으로 다수의 객체가 생성될 경우 모두가 갖는 본질적인 요소를 클래스화하여 공유하는 여러개의 가상 인스턴스 제공하여 메모리 절감
Proxy
- 실체 객체에 대한 대리 객체로 정보은닉의 역할
Composit
- 객체들의 관계를 트리 구조로 구성하여 복합 객체와 단일 객체를 동일하게 취급
Adapter
- 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주기
행위패턴(행 미인이 탬옵 스테 비커 스트 메체)
Mediator
- 객체의 수가 많아지면 복잡하기 때문에 중재자를 두어 상호 작용의 유연한 변경을 지원
Interpreter
- 여러 형태의 언어 구문을 해석할 수 있도록 문법 자체를 캡슐화하여 사용
Iterator
- 컬렉션 구현 방법을 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 반복자를 사용하여 내부구조를 노출하지 않고 복잡 객체의 원소를 순차적으로 접근 가능하게 해줌
Template Method => 탬플릿 안에 특정 내용만 세부처리를 할 수 있게 도와줄게
- 어떤 작업을 처리하는 일부분을 서브 클래스로 캡술화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 것 즉, 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분을 수행
Observer => 오저거바뀜
- 객체의 상태가 바뀌면 의존하는 객체들에게 연락이 가고 자동의 내용 갱신
State => 상태
Visitor => 방문만 할게
- 객체의 구조를 변경하지 않고 기능만 따로 추가하거나 확장할 때 사용
Command
- 실행될 기능을 캡슐화하여 재사용성이 높은 클래스를 설계하는 요구사항을 캡슐화
Strategy
- 춧상 클래스 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴으로 행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환
Memento
- 갹채를 이전상태로 복구, 작업 취소(Undo)의 요청 가능
Chain of Responsibirity
테스트