App/소프트웨어공학
[소프트웨어공학] 05 설계
건망망고
2024. 4. 21. 12:01
05 설계
01 설계의 이해
사용자의 요구사항에 따라 요구분석명세서가 만들어지면 이를 참조해 개발팀에서 설계서를 작성한 뒤 이를 기반으로 구현 작업을 진행한다.
설계(개발자들이 읽기 편하게)
- 설계서 - 요구분석명세서의 내용 모두 포함
- 유지보수 용이
02 설계의 원리
- 분할과 정복정복 - 어느정도 수준까지 분할했다면 말단에 있는 것부터 하나씩 개발
- 분할 - 세분화해서 나누는 작업
- 추상화 : 자신에게 필요한 특징만 표현한 것
- 과정 추상화 : 주어진 문제에 대해 프로그래밍하기 전에 상세 부분은 생략하고 전체흐름만 파악할 수 있는 알고리즘 형태로 작성하는 것
- 데이터 추상화 : 데이터와 데이터 구조를 감추는 것→ 사용자에게는 꼭 필요한 기능만 사용할 수 있게 개방한 구조
- 클래스 : 데이터와 함수를 하나로 묶어 캡슐화한 구조로 사용자는 클래스에서 제공하는 기능만 알고 사용한다
- 제어 추상화 : 프로그래밍 언어에서 쓰는 제어 구조를 추상화하는 것
- 단계가 올라갈수록 표현이 더욱 간결해지고 특징만 나타낸다는 장점
- 캡슐화
- 사용자에게 해당 객체의 기능(서비스)과 사용법만 제공해 사용하기 쉽게 하고 내부는 함부로 변경할 수 없게 감추는 개념
- 정보은닉 : 외부에서 객체의 내부를 들여다 볼 수 없다는 개념다른 클래스가 접근할 수 없고 해다 ㅇ클래스의 메서드와 클래스를 상속받은 하위 클래스만 접근할 수 있다.
- + : 공개(public), 모든 클래스가 접근할 수 있다
- - : 은닉(private), 같은 시스템 내의 다른 클래스가 직접 접근 할 수 없고 해당 클래스의 메서드를 통해서만 접근할 수 있다.
- # : 부분공개(protected), 다른 클래스가 접근할 수 없고 해다 ㅇ클래스의 메서드와 클래스를 상속받은 하위 클래스만 접근할 수 있다.
- 상속상속 관계를 이용하면 개별 클래스를 상속 관계로 묶어서 구조를 파악하기 쉽고 상속 관계에 속한 클래스, 데이터, 메서드를 추가하기도 쉽다
- 상위클래스의 모든것을 하위 클래스가 물려받아 내 것처럼 사용함을 의미
- 다형성 : 여러 개의 형태를 갖는다
- 오버로딩(중복 정의)
- 연산자 중복 정의
- 똑같은 형태인데 서로 다른 용도로 사용되는 경우
- 메서드 중복 정의구별하는 방법 : 매개변수의 개수로 구별, 매개변수의 자료형으로 구변
- →시그니처 : 동일한 메서드가 호출되었을 때 구별할 수 있는 개수가 자료형 같은 요소
- 한 클래스 안에서 이름이 같은 메서드를 중복해서 사용
- 오버라이딩(재정의) : 앞에서 정의한 것을 다 무시하고 내가 새로 정의해서 사용리스코프 교체 원칙 : 상위 클래스의 객체는 언제나 자신의 하위 클래스의 객체로 교환할 수 있어야한다.
- 매서드 재정의 : 상위 클래스에서 정의한 메서드는 무시하고 하위 클래스에서 다시 정의해 사용하는 것
- 오버로딩(중복 정의)
03 모듈화
기능에 집중을 해서 모듈화 - 실제로 개발할 수 있는 작은 단위로 나누는 것
- 모듈의 특징 : 모듈 - 소프트웨어 구조를 이루는 기본단위
- 모듈화의 원칙 : 모듈의 크기가 작아지면 그만큼 개수가 많아지고 모듈 간의 통신횟수도 많아져 복잡하다
- 모듈화의 장점 :
- 모듈화의 적정 수준 : 모듈의 크기가 너무 작아 개수가 많아지면 모듈 간의 통합 비용이 많이 들고, 모듈의 크기가 너무 크면 모듈 간의 통합 비용은 상대적으로 줄어드는 대신 모듈 하나를 개발하는 데 드는 비용이 커져 모듈화의 효과를 많이 볼 수 없다 → 최소 비용 영역
- 모듈 간 관계(호출관계, 데이터 전달, 제어)
모듈 평가 기준
- 응집도
- 기능적 응집 : 응집도가 가장 높은 경우로 단일 기능의 요소가 하나의 모듈 구성
- 순차적 응집 : 요소 1의 출력을 요소 2의 입력으로 사용하므로 두 요소가 하나의 모듈로 구성, 두 요소가 아주 밀접하므로 하나의 모듈로 묶을 만한 충분한 이유가 됨
- 교환적 응집 : 정보적 응집, 구성 요소가 동일한 출력을 만들어낼때도 교환적 응집, 순차적 응집보다는 조금 약한 관계
- 절차적 응집 : 순서가 정해진 몇개의 구성요소, 한 요소의 출려깅 다음 요소의 입력으로 사용되지 않으므로 순차적 응집보다는 묶인 이유가 조금 약하다
- 시간적 응집 : 같은 시간대에 함께 실행, 초깃값 설징 모듈이 예시
- 논리적 응집 : 그냥 공통점이 있어서 하나의 모듈로
- 우연적 응집 : 응집도가 가장 낮다
- 응집도가 높을수록 꼭 필요한 구성 요소만 모여있고, 응집도가 낮을수록 서로 관련성이 적은 구성요소들이 모여있다.
- 결합도좋은 관계 : 데이터만 주고받는 관계
- 데이터 결합 : 가장 좋은 모듈 간 결합, 다른 모듈에 미치는 영향이 아주 적다
- 스탬프 결합 : 필요한 데이터만 주고 받을 수 없고 필요 없는 데이터까지 전체를 주고 받아야 하는 경우, 데이터 하나가 변경되면 관련된 모듈에 있는 자료구조 모두 바꿔야함
- 제어결합 : 제어 플래그를 매개변수로 사용된다, 정보 은닉을 크게 위배하는 것, 호출하는 모듈이 호출되는 모듈의 내부구조를 잘 알 고 논리적 흐름을 변경하는 관계로 묶이는 결합
- 공통 결합 : 어디서든 접근 할 수 있다. 공통되는 데이터를 가지고 여러가지 모듈이 접근하는 경우, 변숫값이 변하면 모든 모듈이 함께 영향을 받는다는 문제, 유지보수 어려우니 꼭 필요한 경우에만 데이터를 공유하고 공통 기억 장소를 최소화해 독립성을 보장해야한다. 데이터를 개별 모듈 내부에서 지역변수로 선언하는 것
- 내용 결합 : 모듈 간의 인터페이스를 사용하지 않고 직접 왔다갔다 하는 것, 모듈의 독립성이 보장되지 않으므로 유지보수가 매우 어렵다
- 모듈 간의 좋은 관계 : 꼭 필요한 데이터만 주고 받는 관계
- 모듈과 모듈 사이의 관계에서 관련 정도를 나타낸다, 모듈과 모듈 사이에 데이터만 주고받는 것 , 관련이 적을수록 상호 의존성이 줄고 모듈의 독립성의 높아지고 모듈간의 영향이 적어진다
04 사용자 인터페이스 설계
- 사용자 인터페이스 설계의 이해
- 화면 중심의 사용자 인터페이스 GUI
- 사용자 인터페이스 설계 지침
- 배우기 쉽게,사용하기 편리하게, 데이터 입력 제어가능하게, 사용자의 입력에 반응하게,도움말을 제공, 일관성 유지, 입력작업 최소, 효율성을 고려, 되돌리기 기능을 제공,삭제 또는 취소시 재확인을 요구, 직관적