객체지향 기법의 개요
객체지향 기법 : 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할수 있도록 하는 기법
1. 객체 : 데이터와 데이터를 처리하는 함수를 묶어놓은(캡슐화)한 하나의 소프트웨어 모듈
데이터 : 객체가 가지고 있는 정보로 속성이나, 상태 분류등을 나타낸다.
메소드 : 객체가 수행하는 기능으로, 객체가 갖는 데이터를 처리하는 알고리즘이다.
2. 클래스 : 공통된 속성과 연산(행위)를 갖는 객체의 집합으로 객체의 일반적인 타입
3. 메시지 : 메시지는 객체들간에 상호작용을 하는데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령또는 요구사항
객체지향 기법 기본원칙
1. 캡슐화 (Encapsulation): 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는것을 의미한다.
2. 정보은닉 (Information Hiding) : 다른객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
3. 추상화(Abstraction) : 불필요한 부분을 생략하고 객체의 속성중 가장 중요한 것에만 중점을 두어 개략하는것, 즉 모델화 하는것이다.
4. 상속성(Inheritance) :이미 정의된 상위클래스(부모 클래스)의 모든 속성과 연산을 하위클래스가 물려 받는 것이다.
다중 상속석 (Multiple Inheritance) : 한개의 클래스가 두개이상의 상위 클래스로부터 속성과 연산을 상속받는것이다.
5. 다형성(Polymorphism) : 메시지에 의해 객체(클래스)가 연산을 수행하게 될때 하나의 메시지에 대해 각 개체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할수 있는 능력이다.
객체지향 기법의 생명주기
객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스 , 메소드, 속성등이 동일한 개념으로 사용된다는 것이다.
생명주기 순서
계획 및 분석 -> 설계 -> 구현 -> 테스트 및 검증
1. 객체지향 분석 ( OOA; Object Oriented Analysis) : 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 관련된 속성과 연산, 그들간의
관계등을 정의하여 모델링하는 작업이다.
2. 객체지향 설계 (OOD; Object Oriented Design) : 객체지향 분석(OOA)을 사용해서 생성한 여러가지 분석 모델을 설계모델로 변환하는 작업으로, 시스템 설계와 객체 설계를 수행한다.
설계 순서 : 문제정의 -> 요구 명세화 -> 객체 연산자 정의 -> 객체 인터페이스 결정 -> 객체 구현
3. 객체지향 구현 : 설계단계에서 생선된 설계모델과 명세서를 근거로 하여 코딩하는 단계
객체지향 프로그래밍 (OOP) : 객체지향 프로그래밍은 새로운 개념의 모듈 단위, 즉 객체라는 단위를 중심으로 하여 프로그램을 개발하는 기법
객체 기반 언어 : Ada, Actor와 같이 객체의 개념만을 지원하는 언어
클래스 기반 언어 : Clu와 같이 객체와 클래스의 개념을 지원하는 언어
객체 지향성 언어 : 객체 , 클래스 상속의 개념을 모두 지원하는 언어 (초기에 발표된 Simula로부터 Smalltalk, C++, Objective C, Java등)
4. 객체지향 테스트
- 클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사
- 통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로, 스레드 기밭 테스트와 사용기반 테스트로 분류
- 확인 테스트 : 사용자 요구사항에 대한 만족 여부를 검사
- 시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사
아키텍쳐 스타일(어플리케이션 개발모델)
아키텍쳐 스타일 : 개발자간에 서로 설계방식이 달라 코드를 분석하는데 어려움이 따라서 이를 해결하기위해 많은 사람들 또는 신뢰있는 기관에서 검증된 보편적인 설계방법의 양식.
1. IEEE 1471 : ANSI/IEEE 1471-2000의 약어로, 소프트웨어 집약적인 시스템에서 아키텍쳐가 표현해야 하는 요소와 내용들, 이들간의 관계를 규정하고 있는
국제표준
특징
- 표준화 : 아키텍처 관련 용어와 개념들을 통일함
- 중립성 : 모델링 언어와 방법론을 제시하지 않고, 독립적인 메타모델을 제공
- 유연성 : 표현을 위한 요소들과 관계의 일반화로 규모에 상관없이 시스템 구축에 적용 가능함
- 의사소통 : 이해당사자 간의 의사소통을 지원하고, 다양한 관점에서 표현함.
2. 저장소 구조 (Repository Architecture) : 중앙자료구조와 독립된 컴포넌트로 구성된 아키텍쳐이다. 큰 데이터의 이동 및 공유에 적합하며, 컴포넌트 간의 통신을 이뤄 지지 않는다.
장점
- 대량의 데이터를 저장하는데 효과적
- 컴포넌트의 추가 . 삭제 편리
- 중앙 집중화를 통해 데이터 관리 용이하고 보안측면 뛰어남.
단점
- 저장소에 오류가 발생하면 시스템 전체에 문제 발생
- 데이터의 분산이 어려움.
3. MVC구조 : 상호작용 어플리케이션을 모델, 뷰, 컨트롤러의 세개의 컴포넌트로 구분하는 아키텍쳐로 , 유저 인터페이스와 비즈니스 로직들을 서로 분리하여 개발 하는 방법
장점
- 동일한 모델에 대해 다양한 뷰를 제공
- 효율적인 모듈화 가능
- 모델과 뷰의 구분으로 사용자 인터페이스에 대한 요구 사항을 적용시키는데 용이
단점
- 간단한 어플리케이션에 적용하기에는 복잡
- 모델이 자주 변경되는 경우 업데이트 요청이 많아 뷰의 갱신이 따라가지 못함.
4. 클라이언트/서버 구조 : 클라이언트와 서버로 나뉘는 아키텍쳐를 말한다. 하나의 서버에 다수의 클라이언트가 접속하는 일대다 관계로 구성되며, 서버는 하나의 중 앙 서버 또는 분산된 여러 서버가 존재가능
특징
- 새로운 서버의 추가 및 업그레이드 용이
- 데이터가 서버에 집중되어 데이터 관리 용이
- 보안적인 측면 뛰어남
5. 계층구조(Layered Architecture) : 계층적으로 조직화가 가능한 어플리케이션에 적합한 아키텍쳐, 각 계층이 특정 측면만을 전문적으로 다루기 때문에 응집력 있 는 설계 가능하여 설계를 더욱 쉽게 이해 할수 있음(대표적으로 OSI 7계층)
6. 파이프 필터 구조 : 데이터의 흐름을 점진적으로 처리하는 시스템을 위한 아키텍처, 프로세싱을 위한 시스템이 각 필터에 캡슐화 되어 있으며, 데이터는 인접 필터 사이의 파이프를 통해 전달되는 형태
장점
- 설계자는 몇 개의 필터들을 간단히 조합하여 시스템의 입출력 행위를 이해할수 있다.
단점
- 상태 정보를 공유하는데 유연하지 못하다.
댓글