[1. 소프트웨어 설계] 객체지향(구성요소, 기법, 설계 원칙, 분석, 방법론)
객체 지향(Object Oriented) 이란?
: 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현하는 기법
객체 지향 구성요소
1) 클래스(Class)
: 특정 객체 내에 있는 변수와 메서드를 정의하는 일종의 틀
: 하나 이상의 유사한 객체들을 묶어 하나의 공통된 특성을 표현
: 속성은 변수의 형태로, 행위는 메서드의 형태로 선언
2) 객체(Object)
: 물리적/추상적으로 자신과 다른 것을 식별 가능한 대상
: 객체마다 각각의 상태와 식별성을 가짐
: 클래스에서 정의한 것을 토대로 메모리에 할당
3) 메서드(Method)
: 클래스로부터 생성된 객체를 사용하는 방법
: 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산
4) 메시지(Message)
: 객체에게 어떤 행위를 하도록 지시하는 방법
: 객체에서 객체로 전달
5) 인스턴스(Instance)
: 객체 지향 기법에서 클래스를 통해 만든 실제의 실형 객체
: 실제로 메모리로 할당
6) 속성(Property)
: 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의
https://kcode-recording.tistory.com/206
[JAVA] 객체지향 프로그래밍(OOP) 기초, 클래스, 객체
객체지향 프로그래밍 : 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 : 클래스 > 처리 및 데이터 부분을 객체로 생성해 사용 : JAVA, C++, C# 등 대표적 언어 존재 클래스
kcode-recording.tistory.com
객체 지향 기법
1) 캡슐화(encapsulation)
: 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
: 결합도가 낮아지고 재사용성 용이
: 인터페이스 단순화
: 정보 은닉과 관계가 깊음
: 변경 발생 시 오류의 파급 효과가 적음
2) 상속성(Inheritance)
: 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용
(메서드 오버라이딩을 이용해 활용 가능)
3) 다형성(Polymorphism)
: 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답
: 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용 (오버라이딩, 오버로딩)
4) 추상화(Abstraction)
: 공통 성질을 추출하여 추상 클래스를 설정하는 기법
5) 정보 은닉(Information Hiding)
: 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술
: 필요치 않은 정보 접근을 허용하지 않도록 해 한 모듈 또는 하부 시스템이 다른 모듈의 구현에 영향을 받지 않음
: 요구사항 등 변화에 따른 수정이 가능하며, 독립성을 유지하는데 도움을 줌
6) 관계성(Relationship)
: 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 나타내는 기법
- 연관화 : 클래스와 객체의 참조 및 이용 관계로, 같은 계층에 속하는 클래스 사이의 상호 의존성을 보여주는 비계층적 관계
- 집단화: 관련있는 객체를 묶어 한 개의 상위 객체를 만들며, 상위 클래스의 성질이 하위 클래스로 상속되지 않음
- 분류화 : 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스
- 일반화 : 클래스 간의 개념적 포함관계로, 상위 클래스의 특성을 하위 클래스가 상속
- 특수화 : 상위 클래스 특성을 상속 받으면서 하위 클래스에서 수정을 가하고 자기 자신의 고유한 특성을 갖는 관계
객체 지향 설계 원칙(SOLID)
1) 단일 책임의 원칙(Single Responsibility Principle)
: 하나의 클래스는 하나의 목적을 위해 생성되며, 클래스 내 모든 서비스는 하나의 책임을 수행하는데 집중
: 객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙
2) 개방 폐쇄 원칙(Open Close Principle)
: 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 함
3) 리스코프 치환의 원칙(Liskov Substitution Principle)
: 서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 함
4) 인터페이스 분리의 원칙(Interface Sergregation Principle)
: 자신이 사용하지 않는 인터페이스는 구현하지 않아야 하며, 사용하지 않는 인터페이스에 영향을 받으면 안됨
5) 의존성 역전의 원칙(Dependency Inversion Principle)
: 실제 사용 관계는 변하지 않으며, 추상을 매개로 메시지를 주고받아 관계를 느슨하게 만듦
객체 지향 분석(OOA : Object Oriented Analysis)이란?
: 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계 등으로 나누어 분석하는 기법
: 데이터와 행위를 하나로 묶어 객체를 정의하고 추상화
: 동적 모델링 기법이 사용될 수 있고, 기본적응로 객체 지향 프로그래밍에서 사용하는 접근 방식인 상향식 방식
객체 지향 방법론 종류
1) OOSE(Object Oriented Software Engineering) / 야콥슨(Jacobson)
: 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용되는 방법론
: 분석, 설계, 구현 단계로 구성
: 기능적 요구사항 중심 시스템
2) OMT(Object Modeling Technology) / 럼바우(Rumbaugh)
: 그래픽 표기법을 이용하여 소프트웨어 구성요소를 모델링하는 방법론
- 객체 모델링(Object Modeling) >> 동적 모델링(Dynamic Modeling) >> 기능 모델링(Functional Modeling)
3) OOD(Object Oriented Design) / 부치(Booch)
: 설계 문서화를 강조하여 다이어그램 중심으로 개발하는 방법론