효과적인 모듈 설계 방안
- 결합도는 줄이고 응집도는 높인다.
- 복잡도와 중복성을 줄인다.
- 일관성을 유지시킨다.
- 모듈의 기능은 지나치게 제한적이어서는 안 된다.
- 유지보수가 용이해야 한다.
주요 코드
- 순차 코드 : 일정 기준에 따라서 차례로 일련번호를 부여하는 방법
- 표의 숫자 코드 : 코드화 대상 항목의 중량, 면적, 용량 등의 물리적 수치를 적용시키는 방법
디자인 패턴(Design Pattern)
- 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미한다.
생성 패턴 - 객체 생성과 관련한 패턴
1. 추상 팩토리(Abstract Factory)
- 서로 관련된 객체들의 패밀리를 생성하기 위해 인터페이스를 제공한다.
- 구체적인 클래스를 명시하지 않고도 객체들을 생성할 수 있다.
- 클라이언트는 생성된 객체를 인터페이스를 통해 사용한다.
2. 빌더(Builder)
- 복잡한 객체의 생성 과정을 여러 단계로 나누어 처리한다.
- 최종적으로 다양한 표현을 갖는 객체를 생성할 수 있도록 한다.
- 객체의 생성이 복잡할 때 사용되며, 코드의 유지보수성과 확장성을 향상시키는 데 유용하다.
3. 팩토리 메서드(Factory Method)
- 객체 생성을 처리하는 인터페이스를 제공하고, 실제 객체의 생성은 서브클래스가 결정하도록 위임한다.
- 객체 생성에 대한 의존성을 줄이고, 확장성과 유연성을 향상시킬 수 있다.
- 객체를 생성하는 처리를 파생 클래스로 분리하여 처리하도록 캡슐화한다.
- Virtual-Constructor 패턴이라고도 한다.
4. 프로토타입(Prototype)
- 기존 객체를 복제함으로써 새로운 객체를 생성한다.
- prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다.
- 디자인 패턴 유형 : 생성 패턴, 구조 패턴, 행위 패턴
5. 싱글톤(Singleton)
- 객체의 인스턴스가 오직 하나만 생성되도록 보장한다.
- 전역적으로 접근 가능한 단일 인스턴스를 제공한다.
구조 패턴 - 객체를 조합해서 더 큰 구조를 만드는 패턴
1. 어댑터(Adapter)
- 호환되지 않는 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 한다.
- 클라이언트에서 요구하는 다른 인터페이스로 변환한다.
- 한 클래스의 인터페이스를 클라이언트에서 필요로 하는 인터페이스로 변환해준다.
- 두 인터페이스 간의 호환성 문제를 해결하여, 코드 변경없이 기존 클래스를 사용할 수 있다.
2. 브릿지(Bridge)
- 추상화와 구현을 분리하여 두 계층이 독립적으로 변화할 수 있게 한다.
- 두 개의 클래스 계층을 분리해 두면 각각의 클래스 계층을 독립적으로 확장할 수 있다.
3. 컴포지트(Composite)
- 객체를 트리 구조로 구성하여 개별 객체와 객체의 조합을 클라이언트에서 동일하게 처리할 수 있도록 한다.
4. 데코레이터(Decorator)
- 객체에 동적으로 새로운 기능을 추가한다.
- 코드의 수정 없이 객체의 기능을 확장할 수 있는 방법을 제공한다.
- 상속을 사용하지 않고도 객체의 기능을 동적으로 확장할 수 있도록 해준다.
5. 퍼사드(Facade)
- 복잡한 시스템을 단순화한다.
- 클라이언트는 단일 인터페이스만 사용하고 내부 구현은 숨긴다.
- 서브시스템 사이의 의사소통 및 종속성을 최소화하기 위하여 단순화된 하나의 인터페이스를 제공한다.
6. 플라이웨이트(Flyweight)
- 객체를 공유하여 메모리를 절약한다.
- 객체 생성 시간이 오래 걸리는 경우, 또는 객체가 많이 생성될 가능성이 있는 경우에 사용된다.
7. 프록시(Proxy)
- 다른 객체에 대한 접근 제어/중개하는 디자인 패턴이다.
- 특정 객체의 대리자나 대변인 역할을 하는 프록시 객체를 제공한다.
행위 패턴 - 알고리즘이나 책임 분배에 관련된 패턴
1. 책임 연쇄(Chain of Responsibility)
- 요청을 처리하는 객체들을 체인 형태로 연결하여 요청을 순서대로 전달한다.
- 각 객체는 요청을 처리할 수 있는지 판단하고, 처리할 수 없으면 다음 객체에 전달한다.
2. 커맨드(Command)
- 요청을 객체로 캡슐화하여 요청자와 처리자를 분리한다.
- 명령, 요청자, 클라이언트, 수신자로 구분된다.
3. 인터프리터(Interpreter)
- 문법 규칙을 기반으로 문장을 해석한다.
- 프로그래밍 언어의 문법을 해석하는 데 사용된다.
4. 반복자(Iterator)
- 컬렉션의 요소들을 순차적으로 접근하고 처리할 수 있도록 한다.
- 집합 객체의 요소들에 대해 순서대로 접근하는 방법을 제공한다.
- 배열, 배열리스트, 해시 테이블과 같은 객체를 처리하는 데 사용하는 패턴이다.
- 서로 다른 집합 객체 구조에 대한 동일한 방법으로 순회할 수 있다.
5. 중재자(Mediator)
- 여러 객체 간의 상호 작용을 중앙 집중식으로 관리한다.
- 객체 간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향의 목표를 달성한다.
- 여러 객체들이 서로 메시지를 주고받는 상호 작용을 특정 객체 안에 캡슐화하여 서로의 존재를 모르는 상태에서도 메시지를 주고받으며 협력할 수 있도록 한다.
6. 메멘토(Memento)
- 객체의 이전 상태를 저장하고 복원할 수 있도록 한다.
7. 옵저버(Observer)
- 객체의 상태 변화를 관찰하고 싶은 다른 객체들에게 자동으로 알린다.
- 일대다의 객체 의존 관계를 정의하며, 한 객체의 상태가 변화되었을 때, 의존 관계에 있는 다른 객체들에게 자동적으로 변화를 통지한다.
8. 상태(State)
- 객체의 내부 상태에 따라 객체의 동작을 변경한다.
- 객체의 상태에 따라 객체의 행위 내용을 변경해주는 패턴이다.
9. 전략(Strategy)
- 알고리즘을 객체로 캡슐화하고, 알고리즘을 선택하고 실행하는 방법을 제공한다.
- GPS 신호를 수신하는 경우와 수신하지 못하는 경우에 따라 차량의 위치를 구하는 다른 알고리즘을 선택하고자 할 때 가장 적합하다.
10. 템플릿 메서드(Template Method)
- 알고리즘의 핵심적인 골격은 그대로 유지하면서, 일부 단계는 하위 클래스에서 구체적으로 구현한다.
- 객체 구조를 변경하지 않고 객체에 새로운 연산을 추가한다.
11. 방문자(Visitor)
- 객체 구조를 변경하지 않고 객체에 새로운 연산을 추가한다.
요구사항 검증 방법
- 동료 검토(Peer Review) : 작성자가 명세서 내용을 직접 설명하면서 결함을 발견함
- 워크스루(Walk Through) : 미리 배포한 명세서를 사전 검토한 후 결함을 발견함
- 인스펙션(Inspection) : 작성자를 제외한 다른 검토 전문가들이 결함을 발견함
- 동료검토와 워크스루가 비공식적인 검토 방법인데 반해 인스펙션은 공식적인 검토 방법이다.
미들웨어(Middleware)
- 분산 컴퓨팅 환경에서 서로 다른 기종 간을 연결한다.
- 운영체제와 응용 프로그램 사이에서 다양한 서비스를 제공한다.
- 위치 투명성을 제공한다.
- 사용자가 미들웨어의 내부 동작을 확인하려면 별도의 응용 소프트웨어를 사용해야 한다.
미들웨어의 종류
- DB(DataBase)
- RPC(Remote Procedure Call)
- MOM(Message Oriented Middleware)
- TP(Transaction Processing)-Monitor
- ORB(Object Request Broker)
- WAS(Web Application Server)
'자격증 > 정보처리기사' 카테고리의 다른 글
| 소프트웨어 개발(2) (0) | 2025.05.26 |
|---|---|
| 소프트웨어 개발(1) (0) | 2025.05.12 |
| 소프트웨어 설계(3) (0) | 2025.04.28 |
| 소프트웨어 설계(2) (0) | 2025.04.09 |
| 소프트웨어 설계(1) (0) | 2025.03.25 |