1장 - 요구사항 확인

박경서·2024년 4월 12일
post-thumbnail

내가 볼려고 만든 정리본 -- 수제비를 참고하였다.

소프트웨어 전통적 방법론

  • 종류
    • 폭포수 모델
      • 가장 오래된 모델
    • 프로토타이핑 모델
      • 피드백
    • 나선형 모델
      • 점진적 개선해서 완벽하게 만드는 것
      • 위험 감소 및 변경에 유연
      • 계획 및 정의 -> 위험 분석 -> 개발 -> 고객 평가 (계위개고)

소프트웨어 개발 방법론

  • 애자일 방법론
    • 절차보다는 사람이 중심
    • 문서보다 코드를 강조
    • 종류
      • XP
        • 1-3주의 반복
        • TDD
        • 리팩토링
      • 스크럼
        • 스프린트 : 2-4주 개발

객체지향 설계 원칙(SOLID)

  • 단일 책임의 원칙(SRP : Single Responibility Priciple)
    • 하나의 클래스는 하나의 목적을 위해서 생성
  • 개방 폐쇄 원칙(OCP : Open Close)
    • 확장은 오픈, 변경은 클로즈
  • 리스코프 치환의 법칙(LSP : Liskov Subsititution)
    • 상속받은 자식클래스는 어디서나 부모클래스로 교체할 수 있어야 함
  • 인터페이스 분리의 원칙(ISP : Interface Segregation)
    • 특정 기능에 대한 인터페이스는 다른 기능이 변해도 영향 받지 않아야 함
  • 의존성 역전의 법칙(DIP : Dependency Inversion)
    • 클래스를 참조할 때, 클래스의 상위인 추상클래스, 인터페이스를 사용할 것

객체지향이란

  • 속성과 메서드가 결합한 상태
  • 캡슐화, 상속성, 다형성, 추상화, 정보 은닉, 관계성

객체지향 분석 방법론 종류

  • OMT
    • 럼바우가 만듦
    • 종류 : 객체, 동적, 기능 모델링
      • 객체 모델링
        • ER다이어그램
      • 동적모델링
        • 상태 다이어그램
      • 기능모델링
        • DFD 자료흐름도 사용
  • 부치, 야콥슨(Jscobson) 이라는 사람들이 만든 방법도 있음

비용 산정 모델

  • Loc 모형
    • S/W 각 기능의 원시코드 라인 수의 낙관치, 중간치, 비관치를 측정하여 예측치를 구해서 비용 산정
  • Man Month
    • 한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 비용 산정
    • Man Month : LOC / 월간 생산량
    • 프로젝트 기간 : man month / 인력
  • COCOMO
    • 보헴이 제안
    • 프로그램 규모에 따라 비용 산정
    • 비용 산정 결과는 프로젝트를 완성하는데 필요한 노력으로 산정(Man-Month)
    • 종류
      • 조직형(Organic)
        • 5만
      • 반 분리형(Semi-Organic)
        • 30만 이하
      • 임베디드형(Embedded)
        • 30만 이상
  • 기능점수 (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
    • 한 요청을 2개 이상의 객체에서 처리

profile
안녕하세요, 박경서입니다.

3개의 댓글

comment-user-thumbnail
2024년 6월 18일

테스트

2개의 답글