일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Two Points
- union find
- Trie
- two pointer
- SQL
- 이진탐색
- 다익스트라
- binary search
- MYSQL
- 그래프
- DP
- Brute Force
- String
- Stored Procedure
- 스토어드 프로시저
- Hash
- Dijkstra
- Today
- Total
목록소프트웨어 공학 (8)
codingfarm

1. 행위 UML 다이어그램을 만들때에는 행위(behavior)부터 시작하는것이 좋다. 즉, 간단한 시퀀스 다이어그램을 통해 프로그램의 흐름이 어떤식으로 이루어지는지 부터 도식화하자. 도식화의 순서는 주로 sequence diagram(프로그램 흐름 순서) class diagram(클래스간의 관계) 위 순서를 통해 그린 후, 개선이 이루어진다. 예 휴대전화를 제어하는 소프트웨어가 있다. 숫자버튼이 눌릴때마다 어떤 번호가 눌려젔는지를 다이얼에 전달하면(1*), 다이얼에서는 화면에 눌려진 번호의 정보를 띄우면서(1.1), 해당 버튼에 맞는 음을 출력할것이다(1.2). 그리고 전송버튼을 누르면(2) 무선 통신 모듈(radio)에 연결 요청을 보내며(2.1), 연결 여부에 대한 결과를 화면으로 출력할것이다.(A..

문제를 풀려고 자바를 썼는데 ProblemFactory를 얻었다. -철지난 JAVA 유머- 여기서는 두 개의 GOF 패턴, factory method와 abstract factory를 동시에 알아본다. 두 패턴은 서로 긴밀한 연관이 있다. 3.1 시나리오 2차원 직교좌표계의 좌표점 정보를 저장하려 할 경우, 아래와 같은 구현이 쉽게 떠올르것이다. 1 2 3 4 5 class Point{ public: float x, y; Point(const float x, const float y) : x{x}, y{y} {} }; Colored by Color Scripter cs 그렇다면 극 좌표계로 좌푯값을 저장해야 할 경우 어떻게 하면 될까? 아래처럼 극 좌표계용 생성자를 추가하면 어떨까?. 1 2 3 4 Po..

빌더 패턴(Builder Pattern)은 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한줄로 생성할 수 없는 객체를 다룬다. ex) 다른 객체들의 조합, 까다로운 로직이 필요한 객체들 이러한 객체들을 생성하는 코드는 따로 분리되어 관리될 필요가 있다. 2.1 시나리오 1 2 3 4 hello world cs 위와 같은 웹페이지를 그리기 위한 컴포넌트를 생성해야 한다고 하자. 단순하게 단어를 나타내는 항목 두개("hello"와 "world")를 html의 비순차("") 리스트("") 태그로 출력해보자. 1 2 3 4 5 6 7 string words[] = {"hello", "world"}; ostringstream oss; oss

클래스 다이어그램(class diagram) $\bullet$ 시스템의 클래스와 이들 상호 간의 관계, 그리고 클래스의 오퍼레이션과 애트리뷰트를 표현한다 $\bullet$ 논리 설계 시 분석 클래스 모델링과 물리 선계시 구현 클래스 모델링을 포함한 다양한 목적에 사용된다. 구성요소(compartment) $\bullet$ 클래스 명 $\bullet$ 애트리뷰트 -애트리뷰트명 : 데이터타입 $\bullet$ 오퍼레이션 - 오퍼레이션명(매개변수명 : 매개변수타입) : 반환타입 가시성(visibility) $\bullet$ private : - $\bullet$ protected : # $\bullet$ public : + $\bullet$ package : ~ 예) 자동차 인터페이스(interface) 구성..

UML이란 Unified Modeling Language 의 줄임말로써 소프트웨어 개념을 다이어그램으로 표현하기 위한 프로그램 설계도이다. 즉, 모델링언어이다. UML의 사용목적은 문제 도메인, 소프트웨어 설계 제안, 이미 완성된 소프트웨어 구현에 대한 다이어그램 그리기에 있다. 이러한 서로 다른 세 가지 차원을 각각 개념(conceptual), 명세(specification), 구현(Implementation) 이라 구분한다. 여기서는 주로 명세와 구현에 대해 다룬다. 가령 개는 포유류 이다. 라는 문장을 UML 다이어 그램으로 표현하면 아래와 같다. 위 그림은 Animal과 Dog 2개의 존재가 일반화(generalization) 관계로 연결되었음을 묘사한다. Animal은 Dog의 일반화이다. Do..

C++에서 객체를 생성하는 것은 매우 까다롭다. 어느 메모리 영역? 스택할당 힙할당 어떤 포인터로? 일반 포인터 스마트포인터 객체의 생성방법은? native 코드로 생성 패턴으로 builder, factory 생성패턴 정의 : 까다로운 객체 생성 절차에 대한 어려움을 해소하는 디자인패턴 생성패턴에 대해 본격적으로 배우기 전 C++의 기본적인 부분을 알아야 한다. 스택(stack) 할당 스택 메모리를 할당받아 객체를 생성하면 stack에 할당됨 scope를 벗어날 때 자동으로 소멸되며 소멸자가 호출됨 힙(heap) 할당 원시 포인터를 이용하여 동적 할당을 통해 객체를 생성하면 heap에 할당됨 scope를 벗어나도 소멸되지 않는다. 메모리 해제를 비롯한 뒷정리에 대해 불분명한 문제가 생긴다. 스마트 포인터..

3.리스코프 치환 원칙(LisCov Substitution Principle, LSP) 어떤 자식 개체에 접근할 때 그 부모 객체의 인터페이스로 접근하더라도 아무런 문제가 없어야 한다. LSP가 준수되지 않는경우 아래는 직사각형 클래스 이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Rectangle { protected: int width, height; public: Rectangle(const int width, const int height) : width(width), height(height) {} int get_width() const { return width; } virtual void set_width(const int width) { this->width ..

SOLID는 다음과 같은 디자인 원칙들을 아우르는 약어이다. 단일 책임 원칙(Single Responsibility Principle, SRP) 열림-닫힘 원칙(Open-Closed Principle, OCP) 리스코프 치환 원칙(Liscov Substitution Principle, LSP) 인터페이스 분리 원칙(Interface Segregation Principle, ISP) 의존성 역전 원칙(Dependenc Inversion Principle, DIP) 이 5가지 원칙은 디자인 패턴의 존재 이유에 전반적으로 녹아들어가 있다. 1. 단일 책임 원칙(Single Responsibilty Principle, SRP) 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함 클래스..