소프트웨어 설계 - 객체지향설계
#객체지향설계 ★★★★★
#객체 지향 (Object Oriented)
속성과 메서드가 결합한 형태의 객체로 표현하는 기법
#객체 지향 구성요소
@클객 메 메인속
■ 클래스
- 변수와 메서드를 정의하는 일종의 틀
- 데이터를 추상화하는 단위
- 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성 표현
■ 객체
- 물리적,추상적으로 자신과 다른 것을 식별한 대상
- 객체마다 각각의 상태와 식별성을 가짐
■ 메서드
- 생성된 객체를 사용하는 방법
- 객체의 구체적인 연산 (함수, 프로시저)
■ 메세지
- 상호 작용을 하기 위한 수단
- 객체에게 어떤 행위를 하도록 지시하는 방법
■ 인스턴스
- 클래스를 통해 만든 실제의 실형 객체
- 클래스에 속한 각각의 객체
- 실제 메모리에 할당
■ 속성
- 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의
#객체 지향 기법
@캡상다추정관
■ 캡슐화 (Encapsulation)
- 외부와 경계를 만들고, 필요한 인스턴스만을 밖으로 드러내는 기법
- 결합도가 낮아지고, 재사용이 용이
- 인터페이스가 단순화 됨
- 정보 은닉과 관계가 깊음
- 오류의 파급 효과가 적음
■ 상속성 (Inheritance)
- 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법
■ 다형성 (Polymorphism)
- 상속받은 여러개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질
- 오버로딩(Overloading): 같은 이름의 메서드를 여러개 가지는 기법
1
2
3
void fn(int a);
void fn(char a);
void fn(init a, int b);
- 오버라이딩(Overriding): 상위 클래스의 메소드를 하위클래스에서 재정의할 수 있는 기법
1
2
3
4
5
6
class A {
void fn(int a);
}
class B : public A {
void fn(int a);
}
■ 추상화 (Abstraction)
- 공통 성질을 추충하여 추상 클래스를 설정
- 종류: 과정/ 자료/ 제어 추상화
■ 정보 은닉 (Information Hiding)
- 코드 내부 데이터와 메서드를 숨기고, 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술
- 요구 사항 등 변화에 따른 수정이 가능
- 독립성을 유지하는데 도움을 줌
■ 관계성 (Relationship)
- 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법
- 연관화: is-member-of 관계
- 집단화: is part of 관계, part-whole 관계
- 분류화: is-instance-of 관계
- 일반화: is-a 관계
- 특수화: is-a 관계 (상속받으며 나름대로 수정해 고유한 특성을 갖는 관계)
#객체 지향 설계 원칙 (SOLID)
■ 단일 책임의 원칙 (Single Responsibility)
- 하나의 클래스는 하나의 목적을 위해 생성,
- 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는데 집중되어야 한다는 원칙
■ 개방 폐쇄 원칙 (Open Close Principle)
- 컴포넌트, 클래스, 모듈, 함수는 확장에는 열려있고, 변경에는 닫혀 있어야 한다는 원칙
■ 리스코프 치환의 원칙 (Liskov Substitution Principle)
- 상속받은 하위 클래스는 어디서나 상위 클래스로 교체할 수 있어야 한다는 원칙
■ 인터페이스 분리의 원칙 (Interface Segregation Principle)
- 자신이 사용하지 않는 인터페이스는 구현하지 말아야한다는 원칙
■ 의존성 역전의 원칙 (Dependency Inversion Principle)
- 의존성 관계를 맺을 때 변화하기 쉬운 것보다는 변화가 없는 것에 의존 관계를 맺어야한다는 원칙
#객체 지향 분석 (OOA; Object Oriented Analysis)
- 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스, 속성과 연산, 관계 등으로 나누어 분석하는 기법
- 데이터와 행위를 묶어 객체를 정의하고 추상화 시킴
- 동적 모델링 기법이 사용될 수 있음
- 상향식 방식
#객체 지향 방법론 종류
■ 야콥슨 (Jacobson)
- OOSE (Object Oriented Software Engineering)
- 유스케이스에 의한 접근 방법
- 기능적 요구사항 중심의 시스템
■ 럼바우 (Rambaugh)
- OMT (Object Modeling Technology)
- 그래픽 표기법을 이용해 구성요소를 모델링하는 방법론
- @객동기
구분 | 설명 |
---|---|
객체 모델링 | ● 정보 모델링 ● 시스템에서 요구하는 객체를 찾고 객체 간의 관계를 정의 ● 가장 중요하며 선행되어 진행 ● 객체 다이어그램 활용 |
동적 모델링 | ● 시간의 흐름을 따라 객체들 사이의 동적인 행위를 표현 ● 상태 다이어그램 활용 |
기능 모델링 | ● 자료 흐름 중심으로 처리과정을 표현 ● 자료 흐름도를 활용 |
■ 부치 (Booch)
- OOD (Object Oriented Design)
- 다이어그램 중심으로 개발하는 방법론
- 분석과 설계의 분리가 불가능
■ 코드-요든 (Coad-Yourdon)
- E-R 다이어 그램 사용하여 객체의 행위를 모델링
- 객체/구조 식별, 주체/속성/관계/서비스 정의 등의 과정으로 구성
■ 워프-브록(Wirfs-Brock)
- 분석과 설계 간의 구분이 없고, 고객의 명세서를 평가하여 실제 작업까지 연속적으로 수행하는 분석 기법
This post is licensed under CC BY 4.0 by the author.