6. 설계및구현 1
주요내용 프로젝트에서설계란무엇인가? 프로젝트에서설계는왜중요한가? 프로젝트에서설계원리는무엇인가? 효과적인모듈설계는어떠해야하는가? 객체지향설계란무엇인가? 구현작업이란무엇인가? 2
목차 강의내용 팀프로젝트 (10, 11 주차 ) - 설계의정의 - 상위설계와하위설계 - 설계원리 - 효과적인모듈설계 - 객체지향의개념 - 구현 - 설계문서작성및제출 3
설계란? 정의 - 설계는개발될제품에대한의미있는공학적표현 - 설계는고객의요구사항으로추적가능해야하며, 동시에좋은설계라는범주에들도록품질에대해서도검증되어야한다 [IEEE-Std-610] 소프트웨어의설계 (design) - 본격적인프로그램의구현에들어가기전에소프트웨어를구성하는뼈대를정의 해구현의기반을만드는것 - 종류 상위설계 (High-Level Design) 하위설계 (Low-Level Design) 4
상위설계와하위설계 상위설계 (High-Level Design) - 의미 아키텍처설계 (Architecture Design), 예비설계 (Preliminary Design) 라고함 시스템수준에서의소프트웨어구성컴포넌트들간의관계로구성된시스템의전체적인구조 시스템구조도 (Structure Chart), 외부파일및 DB 설계도 ( 레코드레이아웃, ERD), 화면및출력물레이아웃등이포함됨 하위설계 (Low-Level Design) - 의미 모듈설계 (Module Design), 상세설계 (Detail Design) 이라고함 시스템의각구성요소들의내부구조, 동적행위등을결정 각구성요소의제어와데이터들간의연결에대한구체적인정의를하는것 - 하위설계방법 절차기반 (Procedure-Oriented), 자료위주 (Data-Oriented), 객체지향 (Object-Oriented) 설계방법 5
상위설계와하위설계의구조도 상위설계 하위설계 구조 DB 인터페이스 컴포넌트 자료구조 알고리즘 설계 설계 설계 설계 설계 설계 6
설계프로세스 7
설계프로세스 좋은설계란 - 요구사항명세서의모든내용을구현해야한다 - 이해가쉬워서구현또는테스트로추적이가능해야한다 - 유지보수시변경이용이해야한다 설계방식 - 프로세스지향설계 (Process Oriented Design) - 객체지향설계 (Object Oriented Design) 8
설계방식 프로세스지향설계 (Process Oriented Design) - 업무의처리절차를중심으로설계의구성요소들을구분 - 어떠한절차를거쳐서작업을수행하는가, 어떠한입출력자료를생성하는가에초점 - 시스템은 기능과데이터 들이노드를이루고이들의관계가링크를형성하는그래프 객체지향설계 (Object Oriented Design) - 시스템의실제객체요소를중심으로설계 - 자료구조와그에대한연산을묶어서구성되는객체들을정의하고이들이상호작용의기본이되도록설계 - 객체들이노드를이루고이들간의관계가링크를형성하는그래프 9
시스템을해석하는관점의차이 기능 데이터 객체 ( 기능 + 데이터 ) 기능 기능 데이터 객체 ( 기능 + 데이터 ) 객체 ( 기능 + 데이터 ) 데이터 객체 ( 기능 + 데이터 ) 기능 기능 객체 ( 기능 + 데이터 ) (a) 프로세스지향설계 (b) 객체지향설계 10
설계원리 11
설계원리 추상화 (Abstraction) 단계적분해 (Stepwise refinement) 모듈화 (Modularization) 12
추상화 (Abstraction) 의미 - 자세한구현에전에, 상위레벨에서의제품의구현을먼저생각해보는것 단계 - 상위레벨에서설계를생각해본후점차구체적인단계로옮겨가는것 종류 - 과정추상화 (Procedure Abstraction) - 데이터추상화 (Data Abstraction) - 제어추상화 (Control Abstraction) 13
추상화의종류 (1/2) 과정추상화 - 수행과정의자세한단계를고려하지않고, 상위수준에서수행흐름만먼저설계 데이터추상화 - 데이터구조를대표할수있는표현으로대체하는것 - 예 ) 날짜구조를단순히 날짜 로추상화하는것 제어추상화 - 3-A 와 3-B 를 3. 윤년여부에따라요일계산을수행한다. 로추상화하는것 14
추상화의종류 (2/2) 예제 - 원하는날짜를입력으로받아요일을알려주는만년달력프로그램 과정추상화단순히만년달력의큰흐름만을먼저생각해보는것 데이터추상화 연, 월, 일 을 날짜 로추상화함 1. 사용자로부터원하는날짜를입력받는다. 2. 그해가윤년여부를확인한다. 3. 윤년여부에따른요일계산을수행한다. 3-A 윤년이면, 윤년요일계산을수행한다. 3-B 윤년이아니면, 즉평년이면, 평년요일계산을수행한다. 4. 요일을출력한다. 15 제어추상화 3-A 와 3-B 를 3 번으로추상화함
단계적분해 (Stepwise Refinement) 의미 - Niklaus Wirth 에의해제안됨 - 문제를상위개념부터더구체적인단계로분할하는하향식기법의원리 - 모듈에대한구체설계를할때사용 과정 - 문제를하위수준의독립된단위로나눈다. - 구분된문제의자세한내용은가능한한뒤로미룬다. - 점증적으로구체화작업을계속한다. 16
모듈화 모듈의의미 - 수행가능명령어, 자료구조또는다른모듈을포함하고있는독립단위 특성 - 이름을가지며 - 독립적으로컴파일되고 - 다른모듈을사용할수있고 - 다른프로그램에서사용될수있다 모듈의예 - 완전한독립프로그램, 라이브러리함수, 그래픽함수등 모듈의크기 - 되도록쉽게이해될수있도록가능한한작아야함 - 너무작은모듈로나눠지지않도록함 17
효과적인모듈설계 18
정보은닉 (Information Hiding) 의미 - 각모듈내부내용에대해서는비밀로묶어두고, 인터페이스를통해서만메시지를전달할수있도록하는개념 - 설계상의결정사항들이각모듈안에감추어져다른모듈이접근하거나변경하지못하도록함 장점 - 모듈의구현을독립적으로맡길수있음 - 설계과정에서하나의모듈이변경되더라도설계에영향을주지않음 19
정보은닉의예 예제 A 예제 B 20
모듈의응집력 (1/2) 모듈의응집력이란? - 모듈을이루는각요소들의서로관련되어있는정도 - 강력한응집력을갖는모듈을만드는것이모듈설계의목표 Myers 의응집력정도구분 1. 기능적응집 (Functional cohesion) 응집력강함 2. 교환적응집 (Communication cohesion) 3. 절차적응집 (Procedural cohesion) 중간 4. 시간적응집 (Temporal cohesion) 5. 논리적응집 (Logical cohesion) 6. 우연적응집 (Coincidental cohesion) 응집력약함 21
모듈의응집력 (2/2) 응집력의종류 - 기능적응집 (Functional cohesion) 모듈이잘정의된하나의기능만을수행할때기능적응집도가높아짐 - 교환적응집 (Communication cohesion) 동일한입 / 출력을사용하는작은작업들이모인모듈에서볼수있음 - 절차적응집 (Procedural cohesion) 모듈안의작업들이큰테두리안에서같은작업에속하고, 입출력을공유하지않지만순서에따라수행될필요가있는경우 - 시간적응집 (Temporal cohesion) 프로그램의초기화모듈같이한번만수행되는요소들이포함된형태 - 논리적응집 (Logical cohesion) 비슷한성격을갖거나특정형태로분류되는처리요소 - 우연적응집 (Coincidental cohesion) 아무관련없는처리요소들로모듈이형성되는경우 22
모듈의결합도 (1/2) 의미 - 모듈간에연결되어상호의존하는정도 - 낮은결합도를갖는모듈 (Loosely coupled) 을만드는것이모듈설계의목표 모듈간의의존도 자료결합 (Data coupling) 결합도약함구조결합 (Stamp coupling) 제어결합 (Control coupling) 공통결합 (Common coupling) 내용결합 (Content coupling) 결합도강함 23
모듈의결합도 (2/2) 결합도의종류 - 자료결합 (data coupling) 모듈간의인터페이스가자료요소로만구성된경우 가장이상적인형태의결합 - 구조결합 (stamp coupling) 모듈간의인터페이스로배열이나레코드등의자료구조가전달되는경우 - 제어결합 (control coupling) 한모듈이다른모듈에게제어요소 (function code, switch, tag 등 ) 를전달하는경우 - 공통결합 (common coupling) 여러모듈이공동자료영역을사용하는경우 - 내용결합 (content coupling) 한모듈이다른모듈의일부분을직접참조또는수정하는경우 24
객체지향 (Object-Oriented) 개념 25
객체지향 객체지향의등장배경 - 기존의구조적기법으로유지보수가어렵다는단점을극복하기위해등장 객체란? - 특성 (Attribute) 와행위 (Behavior) 를가지고있는인지할수있는개체 (Entity) 특성 해당객체에저장되어있는데이터 행위 객체가할수있는일, 객체의상태가변하게하는원인을제공 - 다른객체와구별할수있는정체성 (identity) 을가짐 정체성 해당객체를다른개체와구별할수있는식별값 객체의예 : 차 - 특성 : 검정색차체, 6기통엔진, 자동변속기, 4개의바퀴등 - 행위 : 출발하다, 정지하다, 가속하다, 감속하다등 - 정체정 : 차량번호 26
클래스와객체 클래스 (Class) - 여러객체들을위한대표적구조 - 객체들이내부적으로어떻게구성되어있는지설명 - 객체의특성은클래스의변수로, 행위는메소드로표현됨 객체 (Object) - 클래스의실례또는실체 (Instance) 라고도부름 객체가클래스에서정의하는변수, 메소드를그대로가지면서메모리에할당되기때문 - 각객체내부의변수이름은같지만서로독립적임 public class Car { String carname; // 차이름 Int carnumber; // 차번호 } Car mycar = new Car(); 클래스 객체 27
객체지향방법의특징 절차를강조하는구조적방법 - 데이터를소홀히하게됨 객체지향방법 - 시스템을구성하는요소들은객체로, - 시스템개발의복잡한문제들을캡슐화 (Encapsulation), 상속 (Inheritance), 다형 성 (Polymorphism) 개념으로해결하려함 28
캡슐화 (Encapsulation) (1/2) 의미 - 소프트웨어모듈인객체의내부에가진상세한정보와처리방식을외부로부터감추는것 - 객체의추상화를통해독립성을보장해주는개념 29
캡슐화 (Encapsulation) (2/2) 캡슐화의예 class Car { private String carname; // 차이름 private Int carnumber; // 차번호 public String getcarname() // 차이름반환 { return carname; } private 이용외부에감춤 } public Int getcarnumber() // 차번호반환 { return carnumber; } public 이용외부에공개 30
상속 (Inheritance) (1/2) 의미 - 다른클래스의속성을물려받아내것처럼쓰는것 상위클래스 (Super-class) - 바퀴가굴러서나아감 - 사람이나짐을실어옮기는기관 하위클래스 (Sub-class) - 각각의구체적인기능 31
상속 (Inheritance) (1/2) 상속의예 class Car { String carname; // 차이름 Int carnumber; // 차번호 } class Bus extends Car{ int seatcount; // 좌석수 } 상위클래스 하위클래스 32
다형성 (Polymorphism) 의미 - 하나의인터페이스를통해서로다른구현을제공하는것 Different objects Same message: Text doc Graphic doc print 33
구현 34
구현 (1/2) 의미 - 코드작성또는프로그래밍이라고함 - 설계의최하위상세화과정 - 코드작성, 디버깅, 통합, 개발자테스트 ( 단위테스트, 통합테스트 ) 작업을포함 개발자의코딩스타일 - 일의효율에영향을끼칠수있음 - 각개발사는코딩스타일지침서를구비하여팀원들이지침대로코드를작성하도록조율하기도함 35
구현 (2/2) 코딩스타일 - 한줄에한문장만써라 - 선언문과실행문을구분하라 - 단락을구분하라 - 내부블록과피제어부는들여써라 - 쓸데없는들여쓰기를하지마라 - 한줄주석과주석상자를구분하라 - 프로그램의앞부분에머리주석을반드시달아라 - 함수의역할을접두사로활용하라 - 이름을의미있게지어라 - 이름은의미를잃지않는범위에서짧게지어라 [ 좋은코딩나쁜코딩중 ] 36
연습문제 1. 설계품질을평가하기위해서는반드시좋은설계에대한기준을세워야한다. 좋은설계기준은 무엇인가? 2. 결합도 (coupling) 가강한순서대로나열하라. 3. 한모듈이다른모듈의내부기능및그내부자료를참조하는경우를무슨결합이라고하는가? 4. 데이터설계에있어서응집도 (Cohesion) 는무슨의미인가? 5. 효과적인모듈화설계방안은무엇인가? 6. 응집도가강한것부터약한순서로나타내어라. 7. 모듈의구성요소가하나의활동으로부터나온출력자료를그다음활동의입력자료로사용하는같은모듈내에서의응집의정도를나타내는것은무엇인가? 8. 소프트웨어개발방법론에서구현에대해설명하라. 37
팀프로젝트 10, 11주차 38
이번주할일 각팀은설계단계에들어간다 설계문서평가기준 (5 점만점 ) - 요구사항명세서에맞게설계되었는가 - 모듈설계가 3 개이상으로되어있는가 - UML 작성은명확한가 - 구현에들어갈만큼상세화되어있는가 결과 - 35 3.5 점이상이면통과함 39
다음주제출문서 설계문서를제출한다 40