객체 지향 개념
객체란
- 특성(Attribute)과 행위(Behavior)를 가지고 있는 인지할 수 있는 개체(Entity)
- 특성: 해당 객체에 저장되어 있는 데이터
- 행위: 객체가 할 수 있는 일, 객체의 상태가 변하게 하는 원인을 제공
- 다른 객체와 구별할 수 있는 정체성(identity)를 가짐
클래스와 객체
클래스
- 여러 객체들의 공통된 속성을 나타내기 위한 대표적 구조
- 객체들이 내부적으로 어떠헥 구성되어 있는지 설명
객체
- 클래스의 실체(instance)라고도 함
- 각 객체 속성은 같지만 서로 독립적임
객체지향 방법의 특징
절차를 강조하는 구조적 방법은 데이터를 소홀히 하게됨
객체지향 방법의 특징
- 시스템을 구성하는 요소들은 객체로
- 시스템 개발의 복잡한 문제들을 캡슐화, 상속, 다형성 개념으로 해결하려 함
캡슐화
- 객체 내부에 가진 상세한 정보와 처리 방식을 외부로 부터 감추는 것
- 은닉성을 보장 (의존성을 낮춤 -> 유지보수를 용이하게함)
- 변수에 직접 접근 못하도록 하고 getter, setter를 사용
- public은 외부에 공개, private은 공개X -> public은 함부로 수정해선 안됨
상속
- 다른 클래스의 속성을 물려받아 내 것처럼 쓰는 것
다형성
- 하나의 인터페이스를 통해 서로 다른 구현을 제공하는 것
Car truck = new truck();
Car Bus = new bus();
UML 기반 설계
UML : 객체지향 기반 모델링 언어
4+1 View
시스템 개발 이해관계자들 마다 역할 및 관점이 다름
- 각각의 관점을 중점으로 시스템을 정의함
유스케이스 관점 (What)
- 모든 이해관계자가 시스템에 대해 이해할 수 있도록 요구사항을 정의
- 모든 개발의 기반
- UML-diagram : Uscase Diagram
논리 관점 (How)
- 기능들을 프로그래밍 시각으로 변경
- 객체를 추출하고, 객체들의 세부적인 속성과 동작에 대해 정의
프로세스 관점
- Integrator가 이해관계자들이 수행한 작업을 통합하기 위해 사용
- 시스템 개발 전반의 작업 수행 주체와 작업의 흐름 정의
개발 관점
- 실제 코드를 작성하는 개발자들의 관점에서 정의
- 계층 구조, 제약 사항, 코드 재사용 등과 같은 시스템 구현을 위한 요건을 정의
물리 관점
- 설치 방법과 실행 환경
Tip
프로젝트를 진행할 때 UML overuse를 피하자
책 - UML, 실전에서는 이것만 쓴다 (로버트 C 마틴)
클래스 다이어그램
클래스들과 그들의 관계를 나타내는 다이어그램
구성 요소와 표기법
클래스
클래스이름, 특성, 메소드 등으로 구성
관계
종류
일반화(generation): 상속 받은 경우
연관(directional association): 클래스가 의존하고 있는 경우 (서로 영향을 미치슨 경우)
- 직접 연관: 하나의 클래스만 다른 클래스의 행위를 요청하고 사용하는 관계
집합(aggregation): 여러 개의 독립적 클래스들이 하나의 클래스를 구성하는 경우
다중성: 클래스들에게 허용되는 객체의 수
표현 방법 내용 1 한 객체와 연관된다. 0..1 0개 또는 1개의 객체와 연관된다. 0..* 0개 또는 그 이상의 객체가 연관된다. n n개의 객체와 연관된다. n..m n개에서 m개까지의 객체가 연관된다.
클래스 다이어그램 작성
먼저 어떤 종류의 클래스들이 있고, 그 클래스들이 어떤 역할을 하는지를 알아야 한다.
클래스 타입
- 경계 클래스(Boundary)
- 시스템 외부의 액터와 상호작용하는 클래스 - 사용자 인터페이스의 역할
- 화면 요구사항을 참고해 클래스 추출
- 제어 클래스(Control)
- 경계 클래스와 엔티티 클래스의 중간 역할을 담당
- 유스케이스를 참고해 클래스를 추출
- 엔티티 클래스(Entity)
- 문제 영역을 구성하는 컴포넌트
- 명사 추출법을 이용해 추출
- 요구사항의 명사들을 식별한 후 적당하지 않은 명사들을 삭제해 엔티티 클래스를 추출
시퀀스 다이어그램
- 객체들 사이 시간에 따라 발생하는 상호작용을 보여주는 다이어그램
- 유스케이스 기술서를 바탕으로 작성된 요구사항과 클래스 다이어그램을 기반으로 작성
구성 요소와 표기법
- 객체, 액터
- 라이프라인
- 활성화
- 메시지
구현
- 설계의 최하위 상세화 과정
- 코드 작성, 디버깅, 통합, 개발자 테스트 작업을 포함
코딩 스타일
SW 개발은 유지보수의 비중이 가장 크기 때문에 약속된 코딩 스타일이 중요함
회사마다 언어마다 스타일 가이드가 있음
코딩은 깔끔하고 읽기 쉬운 코드가 제일 중요함
코딩 스타일
- 한 줄에 한 문장만
- 선언문과 실행문을 구분
- 괄호가 문장의 이해를 돕는다면 적극 활용
SOLID 원칙을 따르는 설계를 하도록 노력할 것
reference
- 상명대학교 한종대교수님 소프트웨어공학 수업
'컴퓨터과학 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 형상 관리 - 형상 항목, 형상 식별자, 베이스라인 (0) | 2021.06.03 |
---|---|
[소프트웨어공학] 검증과 확인 - 테스팅(화이트박스/블랙박스/기본경로) (0) | 2021.06.02 |
[소프트웨어공학] 설계 1 - 추상화, 모듈화, 정보은닉, 응집력, 결합도 (0) | 2021.05.11 |
[소프트웨어공학] 프로젝트 계획 및 통제 - WBS, PERT, Gantt, EVM (0) | 2021.04.13 |
[소프트웨어공학] 프로젝트 산정 - Delphi, LOC, COCOMO, FP (0) | 2021.04.12 |
댓글