App/소프트웨어공학

[소프트웨어공학] 05 설계

건망망고 2024. 4. 21. 12:01

05 설계

01 설계의 이해

사용자의 요구사항에 따라 요구분석명세서가 만들어지면 이를 참조해 개발팀에서 설계서를 작성한 뒤 이를 기반으로 구현 작업을 진행한다.

설계(개발자들이 읽기 편하게)

  • 설계서 - 요구분석명세서의 내용 모두 포함
  • 유지보수 용이

02 설계의 원리

  1. 분할과 정복정복 - 어느정도 수준까지 분할했다면 말단에 있는 것부터 하나씩 개발
  2. 분할 - 세분화해서 나누는 작업
  3. 추상화 : 자신에게 필요한 특징만 표현한 것
    1. 과정 추상화 : 주어진 문제에 대해 프로그래밍하기 전에 상세 부분은 생략하고 전체흐름만 파악할 수 있는 알고리즘 형태로 작성하는 것
    2. 데이터 추상화 : 데이터와 데이터 구조를 감추는 것→ 사용자에게는 꼭 필요한 기능만 사용할 수 있게 개방한 구조
    3. 클래스 : 데이터와 함수를 하나로 묶어 캡슐화한 구조로 사용자는 클래스에서 제공하는 기능만 알고 사용한다
    4. 제어 추상화 : 프로그래밍 언어에서 쓰는 제어 구조를 추상화하는 것
    5. 단계가 올라갈수록 표현이 더욱 간결해지고 특징만 나타낸다는 장점
  4. 캡슐화
  5. 사용자에게 해당 객체의 기능(서비스)과 사용법만 제공해 사용하기 쉽게 하고 내부는 함부로 변경할 수 없게 감추는 개념
  6. 정보은닉 : 외부에서 객체의 내부를 들여다 볼 수 없다는 개념다른 클래스가 접근할 수 없고 해다 ㅇ클래스의 메서드와 클래스를 상속받은 하위 클래스만 접근할 수 있다.
    1. + : 공개(public), 모든 클래스가 접근할 수 있다
    2. - : 은닉(private), 같은 시스템 내의 다른 클래스가 직접 접근 할 수 없고 해당 클래스의 메서드를 통해서만 접근할 수 있다. 
    3. # : 부분공개(protected), 다른 클래스가 접근할 수 없고 해다 ㅇ클래스의 메서드와 클래스를 상속받은 하위 클래스만 접근할 수 있다. 
  7. 상속상속 관계를 이용하면 개별 클래스를 상속 관계로 묶어서 구조를 파악하기 쉽고 상속 관계에 속한 클래스, 데이터, 메서드를 추가하기도 쉽다
  8. 상위클래스의 모든것을 하위 클래스가 물려받아 내 것처럼 사용함을 의미
  9. 다형성 : 여러 개의 형태를 갖는다
    1. 오버로딩(중복 정의)
      1. 연산자 중복 정의
      2. 똑같은 형태인데 서로 다른 용도로 사용되는 경우
      3. 메서드 중복 정의구별하는 방법 : 매개변수의 개수로 구별, 매개변수의 자료형으로 구변
      4. →시그니처 : 동일한 메서드가 호출되었을 때 구별할 수 있는 개수가 자료형 같은 요소
      5. 한 클래스 안에서 이름이 같은 메서드를 중복해서 사용
    2. 오버라이딩(재정의) : 앞에서 정의한 것을 다 무시하고 내가 새로 정의해서 사용리스코프 교체 원칙 : 상위 클래스의 객체는 언제나 자신의 하위 클래스의 객체로 교환할 수 있어야한다.
    3. 매서드 재정의 : 상위 클래스에서 정의한 메서드는 무시하고 하위 클래스에서 다시 정의해 사용하는 것

03 모듈화

기능에 집중을 해서 모듈화 - 실제로 개발할 수 있는 작은 단위로 나누는 것

  • 모듈의 특징 : 모듈 - 소프트웨어 구조를 이루는 기본단위
  • 모듈화의 원칙 : 모듈의 크기가 작아지면 그만큼 개수가 많아지고 모듈 간의 통신횟수도 많아져 복잡하다
  • 모듈화의 장점 :
  • 모듈화의 적정 수준 : 모듈의 크기가 너무 작아 개수가 많아지면 모듈 간의 통합 비용이 많이 들고, 모듈의 크기가 너무 크면 모듈 간의 통합 비용은 상대적으로 줄어드는 대신 모듈 하나를 개발하는 데 드는 비용이 커져 모듈화의 효과를 많이 볼 수 없다 → 최소 비용 영역
  • 모듈 간 관계(호출관계, 데이터 전달, 제어)

모듈 평가 기준

  1. 응집도
    1. 기능적 응집 : 응집도가 가장 높은 경우로 단일 기능의 요소가 하나의 모듈 구성
    2. 순차적 응집 : 요소 1의 출력을 요소 2의 입력으로 사용하므로 두 요소가 하나의 모듈로 구성, 두 요소가 아주 밀접하므로 하나의 모듈로 묶을 만한 충분한 이유가 됨
    3. 교환적 응집 : 정보적 응집, 구성 요소가 동일한 출력을 만들어낼때도 교환적 응집, 순차적 응집보다는 조금 약한 관계
    4. 절차적 응집 : 순서가 정해진 몇개의 구성요소, 한 요소의 출려깅 다음 요소의 입력으로 사용되지 않으므로 순차적 응집보다는 묶인 이유가 조금 약하다
    5. 시간적 응집 : 같은 시간대에 함께 실행, 초깃값 설징 모듈이 예시
    6. 논리적 응집 : 그냥 공통점이 있어서 하나의 모듈로
    7. 우연적 응집 : 응집도가 가장 낮다
  2. 응집도가 높을수록 꼭 필요한 구성 요소만 모여있고, 응집도가 낮을수록 서로 관련성이 적은 구성요소들이 모여있다.
  3. 결합도좋은 관계 : 데이터만 주고받는 관계
    1. 데이터 결합 : 가장 좋은 모듈 간 결합, 다른 모듈에 미치는 영향이 아주 적다
    2. 스탬프 결합 : 필요한 데이터만 주고 받을 수 없고 필요 없는 데이터까지 전체를 주고 받아야 하는 경우, 데이터 하나가 변경되면 관련된 모듈에 있는 자료구조 모두 바꿔야함
    3. 제어결합 : 제어 플래그를 매개변수로 사용된다, 정보 은닉을 크게 위배하는 것, 호출하는 모듈이 호출되는 모듈의 내부구조를 잘 알 고 논리적 흐름을 변경하는 관계로 묶이는 결합
    4. 공통 결합 : 어디서든 접근 할 수 있다. 공통되는 데이터를 가지고 여러가지 모듈이 접근하는 경우, 변숫값이 변하면 모든 모듈이 함께 영향을 받는다는 문제, 유지보수 어려우니 꼭 필요한 경우에만 데이터를 공유하고 공통 기억 장소를 최소화해 독립성을 보장해야한다. 데이터를 개별 모듈 내부에서 지역변수로 선언하는 것
    5. 내용 결합 : 모듈 간의 인터페이스를 사용하지 않고 직접 왔다갔다 하는 것, 모듈의 독립성이 보장되지 않으므로 유지보수가 매우 어렵다
    6. 모듈 간의 좋은 관계 : 꼭 필요한 데이터만 주고 받는 관계
  4. 모듈과 모듈 사이의 관계에서 관련 정도를 나타낸다, 모듈과 모듈 사이에 데이터만 주고받는 것 , 관련이 적을수록 상호 의존성이 줄고 모듈의 독립성의 높아지고 모듈간의 영향이 적어진다

04 사용자 인터페이스 설계

  1. 사용자 인터페이스 설계의 이해
  2. 화면 중심의 사용자 인터페이스 GUI
  3. 사용자 인터페이스 설계 지침
  4. 배우기 쉽게,사용하기 편리하게, 데이터 입력 제어가능하게, 사용자의 입력에 반응하게,도움말을 제공, 일관성 유지, 입력작업 최소, 효율성을 고려, 되돌리기 기능을 제공,삭제 또는 취소시 재확인을 요구, 직관적