1. 객체지향의 구성요소
1) 오브젝트
- 데이터와 메서드들의 조합으로 이루어진 소프트웨어의 기본 단위
- State(attributes)와 Behavior(operation)을 가진다.
- 클래스를 생각하면 될듯하고 클래스는 객체를 생성하기 위한 템플릿이며 객체는 클래스의 인스턴스이다.
2) 인스턴스
- 객체지향 프로그래밍에서 클래스를 기반으로 생성된 실체
- 클래스는 객체를 생성하기 위한 템플릿이며 템플릿을 기반으로 생성된것이 인스턴스(객체)
2. 사용자 요구사항 분석
1) 객체지향 분석(OOA, Object-oriented Analysis)
- 도메인을 이해하고 시스템이 가져야 할 요구사항을 식별/분석하는 단계(Use Case Diagram)
- 사용자의 요구사항을 수집하고 분석해서 요구하는 객체를 식별해내는 단계
- What에 대한 설계
2) 객체지향 설계(OOD, Object-oriented Design)
- OOA에서 식별된 객체들을 클래스로 구조화해서 상호작용을 설계(Class Diagram)
- 객체들의 인터페이스와 동작을 정의하고 소통방법을 정의(Sequence Diagram)
- How에 대한 설계
두 과정을 통해 사용자의 요구사항을 이해하고 요구사항을 객체들의 집합으로 모델링한다.
관련 용어
1) 도메인 모델(Domain Model)
- 특정 도메인에 대한 현실 세계의 개념과 규칙을 반영하는 소프트웨어 모델
- 해당 도메인의 핵심객체, 관계, 동작, 규칙등을 포함한다.
- 도메인 모델은 클래스 다이어그램과 비슷하지만 operation이 없고 attribute만 존재한다.
2) 통합 프로세스(Unified Process)
- 위의 OOA와 OOD에 대한 프로세스로 소프트웨어 개발을 위한 반복적인 접근 방식
- 요구사항분석 -> 설계 -> 구현 -> 테스트의 단계를 반복한다.
- 도입(Inception) -> 구체화(Elaboration) -> 구축(Construction) -> 전이(Trasition)
3. 명세서
1) SRS(Software Requirements Specification)
- 소프트웨어 요구사항 명세서
- 프로젝트 개발 초기단계에서 작성하며 개발자/고객/프로젝트 관리자 등의 모든 요구사항을 이해하고 합의하는데 사용하는 명세서
2) SDS(Software Design Specification)
- 소프트웨어 설계 명세서
- 시스템의 구조, 구성요소, 작동방식을 설명
- 시스템을 개발하기위한 설계단계에서 작성
- 시스템 아키텍처, DB구조, 모듈 인터페이스, 알고리즘등에 대한 세부정보를 작성하는 명세서
4. 그 외 용어
1) 의존성 부패(Dependency Rot)
- 여러 구성요소간의 의존성이 증가하는 현상
- 상위모듈이 하위모듈에 의존하고, 하위 모듈이 상위모듈에 의존하면 의존성 부패가 발생한다.
- 객체지향 설계 5대원칙인 SOLID의 D를 담당하는 의존 역전 원칙을 지켜야하는 이유
2) 원자성(Atomicity)
- 트랜잭션 생각하면 된다.
- 연산이 진행되는 도중에 중단되지 않도록 전체가 완료되거나/아예 실행되지 않거나 하는 것
- 원자성이 지켜져야 멀티스레드 환경에서 동시성 문제를 해결할 수 있다.
3) 지연 로딩(Lazy Loading)
- 객체나 자원을 처음 사용될때까지 초기화나 로딩을 지연시키는 기법
- 대규모 시스템에서 굳이 모든 객체를 프로그램 시작부터 초기화시키거나 로딩할 필요가 없는 경우에 필요한 시점에 로딩해서 성능을 향상시키는 기법
- 게으른 초기화 혹은 지연된 초기화 라는 이름으로 싱글턴 패턴에서도 사용하는것을 본적있음
4) 느슨한 결합(Loose Coupling)
- 소프트웨어 구성 요소간의 의존성을 최소화하는 디자인 원칙
- 최소 지식 원칙(한 요소가 다른 요소에 대해 최소한 적은 정보만 알아야 한다)
- 두 객체가 상호작용은 하지만 서로의 내부 동작은 잘 모르는 상태를 의미한다.
- 인터페이스와 추상화를 통해 구현할 수 있고 유지보수/재사용성/테스트용이성을 챙기기 좋다.
5) 응집도(Cohesion)
- 모듈이나 클래스가 하나의 목적을 가지고 있는 정도를 나타내는 개념
- 응집도가 높다는 것은 서로 연관된것들끼리 묶여있다는 것이고, 응집도가 낮다는 것은 서로 상관 없는 기능들이 묶여있다는 것을 말한다.
※ 참고 문헌