메타코드 정처기 필기 1강
1강 - 소프트웨어 설계
◼️ 요구사항 확인
▪️ 요구 사항 분석
- 소프트웨어가 무엇을 해야 하는가를 추적해 요구사항 명세를 작성하는 작업으로, 사용자의 요구를 추출해 목표를 정하고 어떤 방식으로 해결할 것인지 결정하는 단계
- 소프트웨어 개발의 출발점이면서 실질적인 첫번째 단계
▪️ 요구 사항 분석 특징
- 개발 비용이 많이 드는 단계는 아니며 자료 흐름도, 자료 사전, 소단위 명세서 등의 문서가 효과적으로 이용될 수 있음
▪️ 데이터 흐름도 (Data Flow Diagram, DFD)
- 데이터가 프로세스를 따라 흐르면서 어떻게 변화하는지를 보여주는 시각적 표현
- 구조적 분석 기법에 이용되며, 데이터 흐름에 가장 중심을 두고 있으며 시간의 흐름을 명확히 표현할 수 없음
- 처리기 (process) : 데이터를 처리하는 활동 (O로 표현)
- 데이터 흐름 (Data Flow) : 프로세스 간 데이터 흐름 (→ 로 표현)
- 데이터 저장소 (Data Store) : 데이터가 저장되는 장소 (= 로 표현)
- 단말 (Terminator) : 프로세스 시작과 끝 (ㅁ 로 표현)
▪️ UML (Unified Modeling Language)
- 객체지향 소프트웨어 개발 시 산출물을 명세화, 시각화하기 위한 표준화된 모델링 언어
- 표준화된 모델링 언어로 사물(Things), 관계(Relationship), 다이어그램(Diagram)으로 구성
- 구조적/정적 다이어그램 (Structural/Static Diagram) : 시스템 정적 구성요소와 그들 간의 관계를 보여줌
- 클래스(Class) 다이어그램, 객체(Object) 다이어그램, 컴포넌트(Component) 다이어그램, 배치(batch) 다이어그램, 복합체 구조(Composite Structure) 다이어그램, 패키지(Package) 다이어그램
- 행위적/동적 다이어그램(Behavioral/Dynamic Diagram) : 시스템의 동적 구성요소와 그들 간의 관계를 보여줌.
- 유스케이스(UseCase) 다이어그램, 시퀀스(Sequence, 순차) 다이어그램, 상태(Stage) 다이어그램, 커뮤니케이션(Communication) 다이어그램, 활동(Activity) 다이어그램, 타이밍(Timing) 다이어그램
▪️ UML 관계
- 연관 (Association) : 서로 어떤 방식으로 연결되어 있는지를 표현
- 일반화 (Generalization) : 상위 개념과 하위 개념 간의 관계
- 의존 (Dependency) : 한 요소가 다른 요소에게 종속적일 때의 관계, 한 요소의 변화가 다른 요소에도 영향을 줌
- 실체화 (Realization) : 추상화된 개념과 실제로 이를 구현하는 개념 사이의 관계
- 포함 (Composition) : 전체와 부분 간의 강한 관계, 전체 객체가 사라지면 부분 객체도 사라짐
- 집합 (Aggregation) : 전체와 부분 간의 느슨한 관계, 전체 객체와 부분 객체가 독립적으로 존재할 수 있음
▪️ Agile 방법론
- 소프트웨어 개발 및 프로젝트 관리에서 유연하고 신속하게 변화에 대응할 수 있도록 고안된 접근 방식
- 절차와 도구보다 개인과 소통 중요시
- 요구사항 변화에 유연하게 대응하는 것을 중요시
- 소프트웨어가 잘 실행되는데 가치를 둠
- 고객의 피드백을 중요시
- 프로젝트 요구사항을 모듈 중심이 아닌 기능 중심으로 개발
▪️ 소프트웨어 모델
- 복잡한 시스템을 간소화하고 기호나 그림 등으로 이해하기 쉽게 표현한 형태
- 모델을 통해 소프트웨어에 대한 이해도를 향상시킬 수 있음
- 모델을 통해 향후 개발될 시스템에 대한 유추 가능
- 모델링 작업의 결과물이 다른 모델링 작업에 영향을 줄 수 있음
- 설계, 구현, 유지보수 등 개발의 전 영역에 걸쳐 활용
▪️ CASE (Computer-Aided Software Engineering)
- 소프트웨어 생명주기의 전 단계를 연결해 주고 자동화하는 소프트웨어 도구
- 개발 과정 속도를 향상 시키며 소프트웨어 부품의 재사용을 가능하게 함
- 그래픽 지원, 소프트웨어 생명주기 전 단계 연결, 다양한 소프트웨어 개발 모형 지원, 표준화된 개발환경 구축 및 문서 자동화 기능
- 상위 Case : 전체 시스템이나 프로젝트의 큰 틀을 다루는데 활용(모델 간 모순 검사, 모델의 오류 검증 등)
- 하위 Case : 상위 Case의 작업을 실제로 구체화하는데 활용(소스코드 생성 등)
◼️ 화면 설계
▪️ UI (User Interface)
- 사용자가 소프트웨어나 하드웨어와 상호작용할 수 있도록 돕는 시각적, 기능적 요소들의 집합
- 사용성을 가장 우선적으로 고려해야하며 사용자 중심으로 설계되어야 함
- 직관성(Intuitiveness) : 누구나 쉽게 이해하고 사용할 수 있어야 함
- 유효성(Effectiveness) : 정확하고 완벽하게 사용자의 목표가 달성되어야 함
- 학습성(Learnability) : 모두가 쉽게 배우고 사용할 수 있게 제작되어야 함
- 유연성(Flexibility) : 사용자의 실수를 방지할 수 있게 제작되어야 함
- CLI, GUI, NUI, OUI
▪️ UI 설계 도구
- 와이어프레임(Wireframe) : 화면 구조와 요소 배치를 간단하게 나타낸 기본 뼈대
- 목업(Mockup) : 디자인, 평가 등을 위해 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드(Storyboard) : 사용 흐름을 시각화한 스크립트 및 그림
- 프로토타입(Prototype) : UI의 상호작용 요소를 포함한 모델
◼️ 애플리케이션 설계
▪️ 모듈
- 다른 것들과 구별될 수 있는 독립적인 기능을 가진 단위(Unit)
- 프로그래밍 언어에서 subroutine, function 등으로 표현 가능
- 모듈의 수가 증가하면 상대적으로 각 모듈의 크기가 작아지고, 모듈 사이의 상호 교류가 증가
- 시스템을 지능적으로 관리할 수 있도록 해주며 복잡도 문제 해결에 도움이 됨
- 독립적인 컴파일이 가능함
- 유일한 이름을 가져야 함
- 다른 모듈에서의 접근이 가능해야 함
▪️ 모듈화 측정 지표
- 응집도 (Cohesion) : 모듈의 독립성을 나타내는 개념으로 모듈 내부 구성요소 간 연관된 정도
- 결합도 (Coupling) : 모듈과 모듈 간의 연간도
- 응집도는 높을수록, 결합도는 낮을수록 좋음
▪️ 응집도 유형
- (응집도 낮음) 우연적(Coincidental), 논리적(Logical), 시작적(Temporal), 절차적(Procedural), 통신적(Communication), 순차적(Sequential), 기능적(Functional) (응집도 높음)
▪️ 결합도 유형
- (결합도 높음) 내용(Content), 공통(Common), 외부(External), 제어(Control), 스탬프(Stamp), 자료(Data) (결합도 낮음)
▪️ 소프트웨어 설계 유형
- 상위 설계 : 자료 구조 설계, 아키텍처 설계, 인터페이스 설계, 프로시저 설계, 협약에 의한 설계
- 모듈 설계의 경우 하위 설계에 해당
▪️상향식 설계
- 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합해 검사함
▪️ 하향식 설계
- 소프트웨어 설계 시 제일 상위에 있는 main user function에서 시작해 기능을 하위 기능들로 분할해 가면서 설계하는 방식
▪️ HIPO(Hierarchy Input Process Output)
- 하향식 소프트웨어 개발을 위한 문서화 도구
- 가시적 도표, 총체적 도표, 세부적 도표의 세 종류
- 기능과 자료의 의존 관계를 동시에 표현할 수 있음
- 보기 쉽고 이해하기 쉬움
▪️ 소프트웨어 아키텍처 패턴 유형
- 특정 상황을 위해 반복적으로 사용되는 설계 패턴으로 소프트웨어 시스템의 설계를 단순화하고 유지보수성을 향상
- 계층화 패턴(Layered Pattern), 클라이언트-서버(Client-Server) 패턴, MVC(Model-View-Controller) 패턴, 파이프 필터(Pipe-Filter) 패턴, 마스터-슬레이브(Master-Slave) 패턴, 브로커(Broker) 패턴
▪️ 객체
- 실세계에 존재하거나 생각할 수 있는 것
- 필요하나 자료 구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재
- 객체는 속성, 동자그 고유 식별자를 가진 모든 것
▪️ 객체 지향(Object-Oriented) 설계
- 소프트웨어를 여러 객체로 나누고 이 객체들이 서로 상호작용하게 하여 프로그램을 만드는 방법
- 객체(Object), 메서드(Method), 속성(Property), 클래스(class), 인스턴스(Instance), 메시지(MEssage)
▪️ 객체 지향 설계의 원칙 (SOLID)
- 객체 지향 설계를 위한 5가지 원칙으로 유지보수성과 확장성에 도움을 줌
- 단일 책임의 원칙(Single Responsibility PRinciple) : 하나의 클래스는 하나의 책임, 하나의 기능이나 역할만 담당
- 개방-폐쇠의 원칙(Open Close Principle) : 클래스는 확장에 대해 열려있어야 하며 변경에 대해 닫혀 있어야 함
- 리스코프 치환의 법칙(Liskov Substitution Principle) : 서브 타입은 어디에서나 자신의 기반 타입으로 교체할 수 있어야 함
- 인터페이스 분리의 원칙(Interface Segregation Principle) : 클라이언트는 자신이 사용하지 않은 메소드에 의존하지 않아야 함
- 의존성 역전의 원칙 (Dependency Inversion Principle) : 구체적인 클래스보다는 인터페이스나 추상 클래스에 의존해야 함
▪️객체 지향 설계의 특징
- 다형성, 캡슐화, 상속, 추상화, 정보은닉, 관계성
▪️디자인 패턴
- 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법
- 소프트웨어 구조 파악이 용이하고 객체지향 설계 및 구현의 생산성을 높이는데 적합함
- 패턴명, 문제 및 배경, 솔루션, 사례, 결과, 샘플코드
- 생성(creational) 패턴 : 객체를 어떻게 생성하고 초기화 할지에 대한 패턴들
- 구조(structural) 패턴 : 클래스와 객체를 더 큰 구조로 조합하는 방법에 대한 패턴들
- 행휘(behavioral)패턴 : 객체 간의 상호작용과 책임 분배에 대한 패턴들
◼️ 인터페이스 설계
▪️ 인터페이스
- 서로 다른 시스템, 장치를 연결하거나 통신하게 해 주는 매개체
▪️ 요구사항 개발 프로세스
- 도출 -> 분석 -> 명세 -> 확인 및 검증
▪️ 시스템
- 하나의 공통적인 목적을 달성하기 위한 상호 연관된 구성 요소들의 집합
- 입력(Input), 출력(Output), 처리(Process), 제어(Control), 피드백(Feedback)
▪️ 인터페이스 시스템
- 서로 다른 시스템이나 구성 요소들이 상호작용하고 정보를 교환할 수 있도록 연결해 주는 시스템
- 송신 시스템, 수신 시스템, 중계 서버
메타코드에서 정보처리기사 필기 강의 장학생으로 선발되어 앞으로 5주간 메타코드에서 정처기 필기 강의를 듣고 포스팅을 하게 되었다.
현재 메타코드에서는 정보처리기사 필기 환급 챌린지를 진행 중이며 합격 인증 시 100% 환급(제세공과금 22%, 교재비 3만원 제외)을 해 준다.
진도율을 100% 달성하고 시험 합격 후 합격 인증, 후기 작성 시 수강료를 100% 환불 (제세공과금 22%, 교재비 3만원 제외)을 해주기 때문에 수강료 부담없이 정처기 자격증을 따고 싶은 사람에게 좋은 강의이다.
https://metacodes.co.kr/edu/read2.nx?M2_IDX=31635&EP_IDX=15203&EM_IDX=15027