소개론 - 객체지향분석01
객체지향: 특정 기능을 수행하기 위한 데이터와, 데이터를 사용하는 연산을 하나로 묶어서 객체로 표현하는 접근 방법
특징
클래스와 오브젝트
클래스(붕어빵 틀, 템플릿): 실세계의 사물을 정의하기 위한 틀을 제공함. 공통 속성을 공유하는 객체의 집합. - 클래스로부터 생성되는 인스턴스가 객체(오브젝트)임.
객체(붕어빵, 메모리에 올라가는 것 그 자체): 상태, 동작, 고유 식별자를 가진 모든 실체 - 클래스 하나에서 여러개가 생성될 수 있으며, 실제로 연산에 사용됨
캡슐화와 정보 은닉
- 클래스는 속성과 연산을 하나의 단위로 모아서 정의 및 포장됨
이렇게 포장하는 것을 캡슐화라고 함 (즉, 껍질을 씌움)
캡슐화로 인해 클래스의 속성과 연산이 감춰짐
꼭 필요한 최소한의 정보만 외부에 공개(선언)됨
상속
일반화된 클래스가 갖는 속성과 연산을 하위 개념의 구체화된 클래스가 그대로 물려받는 것
- 구체화된 클래스들의 공통 속성과 공통 연산을 뽑아내서 추상 클래스로 선언함
다형성
같은 이름의 메시지를 다른 객체 또는 서브 클래스에 호출할 수 있는 특징
- 클래스에 정의된 요소들은 실제 클래스의 오브젝트가 사용되는 시점에서 행위를 결정함
- 동일한 속성과 어떤 연산이 클래스에 중복적으로 정의될 수 있음
- 어떤 시점에서 어떤 객체에 사용되는가에 따라 서로 다른 행위를 가짐
ex. 같은 getArea() 이름이지만 각각 내부에 구현된 내용은 다름 p. 9
구조 모델링
정적 모델: 객체들의 공통 구조와 동작들을 추상화시킨 것
객체지향 기본 개념의 이해가 필요함 - 객체와 속성, 연관, 집합, 상속, 다형성 등
클래스 다이어그램이 대표적임 - 클래스 및 클래스 사이의 관계를 표현 / 도메인 개념과 속성
개발 대상 소프트웨어가 어떤 구조적 요소들로 이루어질 수 있는지 분석함
업무 수행 과정에서 생성되고, 사용되어야 할 객체에 어떤 것들이 있는지 식별하여 그들 간 관계를 정의함
설계 단계에서는
- 분석 과정의 구조 모델에서 정의된 객체들이 어떻게 생성, 저장, 처리되는지, 그리고 파일과 DB로 어떻게 반영돼야 하는지를 나타냄
- 비즈니스에서 사용되는 용어들을 이용해 객체들을 정의함으로써, 실세계와 소프트웨어의 의미적 차이를 줄임
클래스 다이어그램
- 문제나 해결책의 정적인 구조를 보여 주는 다이어그램
- 시스템을 구성하는 클래스들과 그들 간의 관계를 보임 p. 13
- 연관: 서비스를 제공하는 객체와, 서비스를 요청하는 객체가 상호작용하는 관계
- 가시성: 객체의 접근 가능성
- 클래스 심봉: 클래스의 이름, 클래스 속성, 오퍼레이션 이렇게 세 부분으로 나눔. 추상 클래스에는 이탤릭체, 인터페이스 클래스에는 <<interface>> 추가
- 속성: 객체가 가지는 모든 필드를 포함함
- 오퍼레이션/메소드: 아주 흔한 메소드 get/set은 생략함
- 모델링이 진행되면서 상세화됨 (함수의 이름만 표현함 - 외부에 보이는 것/ 보이지 않는 것)