자격증/정보처리기사

소프트웨어 설계(4)

짱뚱짱 2025. 5. 9. 10:19

효과적인 모듈 설계 방안

  • 결합도는 줄이고 응집도는 높인다.
  • 복잡도와 중복성을 줄인다.
  • 일관성을 유지시킨다.
  • 모듈의 기능은 지나치게 제한적이어서는 안 된다.
  • 유지보수가 용이해야 한다.

주요 코드

  • 순차 코드 : 일정 기준에 따라서 차례로 일련번호를 부여하는 방법
  • 표의 숫자 코드 : 코드화 대상 항목의 중량, 면적, 용량 등의 물리적 수치를 적용시키는 방법

디자인 패턴(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