본문 바로가기

소프트웨어공학론26

Design Principles - Solid 4. SOLID : 객체지향과 연관이 깊다. 1) Single Responsibility Principle (SRP, 단일 책임 원리) : 모든 모듈은 기능의 한 부분에 대한 책임만을 가져야 한다. = 하나의 기능은 하나의 모듈만을 수행하도록 모듈화되어야 한다. case 1) 한 모듈에 많은 책임들이 있음 원래 Student클래스는 너무 많은 책임을 가짐 -> 각 클래스들이 하나의 책임만 가지도록 4개의 클래스로 나눔 case 2) 한 책임이 여러 모듈에 분산되어있음 logging : 프로그램의 실행 과정을 저장, 문제가 생겼을 때 log 데이터만 살펴봄. ex.블랙박스 모듈 하나만으로는 동작했는지 모름. 모든 모듈들이 log라는 하나의 책임을 가지고 있어야함. 모든 모듈이 관여하기 때문에 설계하기 쉽지.. 2023. 5. 6.
Design Principles - Step-wise Refinement, Abstraction 설계 원리 4가지 : Step-wise Refinements, Abstraction, Modularization, SOLID 1. Step-wise Refinement : 내가 작성할 모듈이 복잡할 때 한번에 상세내용까지 설계하지 않고 먼저 윗 단계에서 봤을 때 가장 대표적인 단계 찾는 것, 그리고 그 후에 다시 또 각 단계의 세부 단계 찾기. ex) Tic-tac-toe -> 상세화 2. Abstraction(추상화) : 중요하지 않은 것은 생략하여 중요한 것만 보여주는 것. ex) 지하철 노선도 두 역 사이의 거리는 전혀 보여주지 않고, 다음 역, 이전 역 이러한 정보들만 보여주고 있다. 1) Procedural abstractions(함수를 사용한 추상화) : procedural interface는.. 2023. 5. 3.
Pipe and Filter architecture -Pipe and Filter architecture 설명 Lexical analysis : 아스키의 나열을 변수, 키워드 단위(토큰)로 쪼개는 것 Syntactic analysis : 1차원적으로 나열되어 있는 토큰을 트리구조로 바꾸는 것 Semantic analysis : 의미 잘못되게 작성한 것 없는지 확인, 트리에 타입정보를 일관성 있게 붙임 1) 각 데이터 처리 컴포넌트(필터)는 명확히 구분되어 있고 한가지 유형의 데이터 변환을 담당한다 : 렉시컬, 신택틱, 시맨틱 딱딱 구분, 아스키를 토큰으로 변환, 토큰을 트리구조로 변환 -> 한가지 유형만 변환 2) 한 컴포넌트가 출력한 데이터를 다른 컴포넌트로 입력하는 형태로 처리 : 렉시컬의 아웃풋인 토큰 sequence를 신택틱의 입력으로 처리한다. .. 2023. 4. 28.
Repository architecture -Repository architecture 설명 1) 시스템의 모든 데이터를 공통의 중앙 저장소(repository)에서 관리, 공유하고 모든 컴포넌트들을 접근 가능하도록 한다 2) 컴포넌트들은 서로 직접 데이터를 교환하지 않고 이 저장소를 통한다. 간접적으로 인터페이싱 예시 : IDE (ex) Java eclipse, C++ Visual Studio 사용 상황 1) 큰 용량의 정보를 만들어 오래 저장하는 유형의 시스템 2) 새로운 데이터를 중앙 저장소에 추가하면 어떤 액션이나 도구를 실행하는 데이터 구동 시스템 : 프로그래머가 새로운 문장, 함수를 수정하면 중앙 저장소에 데이터 부분이 바뀜 -> 컴파일 하거나 분석함. 장점 1) 컴포넌트들은 서로 독립적 : 플러그인 based 2) 중앙 저장소를 변경.. 2023. 4. 28.
Event-driven Control -Event-driven Control = Broadcast models = Publish-subscribe models 설명 1) 한 모듈이 다른 모듈의 서비스를 사용할 수 있다. ex) 서브 시스템1이 서브 시스템4의 서비스를 사용 가능, 서브 시스템3이 서브 시스템1의 서비스를 사용 가능 2) 그 과정에서 함수를 직접 호출x, handler를 통해 event를 날리는 것o 직접x, event와 메시지를 중개자를 통해 주고받음o 예시 안드로이드 앱에서 컴포넌트들 사이에 서로 직접 호출하지 않는다. 대신 intent라는 메시지를 날린다. 안드로이드 플랫폼이 중개자가 되어 수신자 컴포넌트에게 전달해준다. 사용 상황 : 분산된 컴포넌트들을 연동할 때 효과적 장점 시스템 변경이 상대적으로 쉽다. : 각 서브.. 2023. 4. 27.
Model-View-Controller (MVC) architecture -Model-View-Controller (MVC) architecture 설명 1) 데이터를 보여주는 것과 처리하는 것을 분리 2) 세가지 논리적 요소로 시스템을 구성 a) 모델: 데이터 처리 담당, 로직 b) 뷰: 데이터 보여주기 ex) 동일한 데이터를 표나 그래프로 보여주기, 웹페이지 자체 c) 컨트롤러: 모델과 뷰를 조합하여 사용자 입력을 처리, 뷰와 모델은 직접 호출하지 않고 컨트롤러를 통해 한다. ex) 계산기 프로그램. 모델 : 순수하게 계산을 해주는 부분 뷰 : 버튼, 계산결과 창 컨트롤러 : 사용자가 누르면 해당하는 계산을 하라고 모델에게 요청, 모델이 계산하면 뷰에게 그리라고 요청 예시 : 거의 모든 UI 프로그램, web-based application 사용 상황 1) 여러 방법으로 .. 2023. 4. 27.