반응형
객체지향의 정의
- 실세계의 개체(Entity)를 속성(Attribute)과 메소드(Method)로 결합한 객체(Object)로 표현하는 개념
- 프로그램을 객체라는 기본 단위로 분할하고 객체들의 상호작용을 통해 서술하는 방식
객체지향의 등장배경
개발 측면 | - 전통적인 개발 방법론의 문제점 극복 |
- 저품질, 고위험요소로 인한 개발 생산성 저하 | |
- 소프트웨어 위기를 해결하기 위한 필요성 증대 | |
- 재사용성과 확장성의 필요성 | |
사용자 측면 | - 사용자들의 욕구 증대 |
- 더 많은 기능, 단순성, 사용 편의성 요구 | |
소프트웨어 위기 극복 | - 낮은 생산성, 납기 지연과 경영 환경의 변화 |
규칙 혼선 발생 | - 사용자 요구사항 조사시 명확한 요구사항 제시 부족 |
- 짧은 개발 주기와 더 많은 융통성을 원하는 사용자 | |
- 초기 요구사항에 대한 반영이 부족 | |
위험관리 실패 가능성 증가 | - 전통적인 Waterfall 방법은 문제 발견이 늦어질 수 있음 |
소프트웨어 복잡성 증가 | - 시스템의 규모가 커지면서 전체 이해가 어려워짐 |
- 소프트웨어는 계속 진화하며 확장됨 |
객체지향의 구성요소
클래스(Class) | - 공통적인 속성(Attribute)과 행위(Method)를 추상화한 자료형 |
- 객체를 생성하는 구조와 정보를 가지고 있는 틀 | |
- 재사용 가능하며, 외부 클래스와 독립적으로 설계 | |
객체(Object) | - 문제 영역에서 잘 정의된 역할을 가지고 각각 구분할 수 있는 단위 |
- 데이터와 함수로 구성 | |
인스턴스(Instance) | - 클래스에서 생성된 객체로 클래스의 속성과 성질을 가진 실제적인 개체 |
속성(Attribute) | - 클래스가 가지는 데이터 또는 멤버 변수 |
메소드(Method) | - 객체의 속성을 조작하기 위한 함수 |
메시지(Message) | - 객체 간 상호작용을 위한 방법으로, 다른 객체에 특정 행위를 요청하는 신호 |
- 객체명 / 메소드명 / 매개변수로 구성 |
객체지향의 기본원리
캡슐화(Encapsulation) | 서로 연관된 데이터와 관련된 메소드를 한 묶음으로 처리 | - 객체 간 인터페이스를 이용하여 종속성 최소화 |
추상화(Abstraction) | 불필요한 부분을 생략하고 핵심적인 것에 일반화하여 개략적으로 표현 | - 클래스를 이용하여 데이터와 행위 추상화 |
다형성(Polymorphism) | 다른 객체가 동일한 메시지에 대해 고유한 방식으로 응답 | - 오버로딩, 오버라이딩 |
정보은닉(Information Hiding) | 객체의 상세한 내용을 외부에 숨기고 메시지만을 통해 객체 간 상호작용 | - 클래스와 객체의 접근 제어 |
상속(Inheritance) | 상위 클래스의 속성과 메소드를 하위 클래스에서 재사용하고 확장하는 것 | - 클래스 체계화와 확장의 용이성 |
객체지향 프로그래밍의 장단점
장점
- 재사용성, 신뢰성, 신속한 설계, 개발 용이성, 선언형 명세 설계, 캡슐화로 인한 유지보수 용이성, 설계 독립성
단점
- 프로그래밍 구현을 지원해주는 정형화된 분석 및 설계 방법이 없음
- 실행 시간이 지연될 수 있음
- 유지보수의 어려움으로 인해 다형성, 상속, 오버로딩, 다중 상속 등 객체지향 특성이 제한될 수 있음
구조적 설계와 객체지향 설계의 비교
접근방법 | Top Down | Bottom Up |
설계방향 | 프로세스 중심(기능 위주) | 데이터 중심(데이터 + 연산) |
확장성/재사용성 | 확장이 어려움, 중복이 많음 | 확장 용이, 재사용성 높음 |
상속과 위임
상속(Inheritance)
- "is-a" 관계를 나타냄
- 구현이 쉽지만 부모 클래스가 변경되면 자식 클래스에도 영향을 줌
- 결합도(커플링)가 강함
- 상속은 "is-a" 관계보다 한 객체가 다른 객체처럼 행동할 때 사용
위임(Delegation)
- "has-a" 관계를 나타냄
- 런타임에 행동의 복합을 가능하게 하고 방식을 변경할 수 있음
- 주로 인터페이스(interface)를 통해 구현됨
- 결합도가 약함
상속과 위임의 비교
상속(Inheritance)위임(Delegation)
클래스 간의 관계 | 인스턴스 간의 관계 | 동적인 관계 |
정적인 관계 | 동적인 관계 | 실행 타임에 변경 가능 |
결합도 | 부모 클래스가 변경되면 자식 클래스에 영향을 줌 | 변경에 유연하고, 클래스 간의 결합도가 낮음 |
사용 사례 | 상속 관계보다 한 객체가 다른 객체처럼 행동할 때 사용 | 런타임에 객체의 행동을 조정하고, 객체의 행동을 다른 객체에 위임할 때 사용 |
이와 같이 객체지향 프로그래밍은 객체를 중심으로 한 개발 방법론으로, 캡슐화, 추상화, 다형성, 정보은닉, 상속 등의 원리를 통해 유지보수 용이성과 재사용성을 강조합니다. 구조적 설계와 비교했을 때 객체지향 설계는 데이터 중심으로 접근하며 확장성과 재사용성이 높은 특징을 가지고 있습니다. 또한, 상속과 위임은 객체 간의 관계를 나타내는 방법으로, 상속은 "is-a" 관계를, 위임은 "has-a" 관계를 표현합니다.
반응형
'IT의 모든것 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 일정 관리 기법, 일정 단축 기법 (0) | 2023.06.21 |
---|---|
XP(eXtreme Programming) 정의, 구성요소 ,특징 (0) | 2023.06.21 |
[소프트웨어공학] 정보공학방법론(Information Engineering Methodology) (0) | 2023.05.06 |
[소프트웨어공학] RAD (Rapid Application Development) (0) | 2023.05.05 |
[소프트웨어공학] V모델 (0) | 2023.05.04 |
[소프트웨어공학] 나선형 (Spiral) 모델 (0) | 2023.05.04 |
[소프트웨어공학] 프로토타입 모델(Prototype Model) (0) | 2023.01.02 |
[소프트웨어공학] 폭포수 모델 (Waterfall Model) (0) | 2023.01.01 |
댓글