-
고급 객체지향 프로그래밍(2)객체지향 2020. 1. 17. 23:04
2. 객체
2.1. 객체의 정의
객체는 객체지향 패러다임에서 프로그램을 구성하는 기본 단위이다.
개발하려는 목표 시스템의 업무 영역에 실제로 존재하는 어떤 사물, 개체 또는 개념이 바로 객체가 된다.
- Person: 인사관리 시스템에 사용되며, 조직의 직원을 나타내는 객체
- Car: 자동차 생산관리 시스템에 사용되며, 생산된 자동차를 나타내는 객체
- Book: 서점의 도서판매 시스템에 사용되며, 판매할 책을 나타내는 객체
객체지향 프로그램은 여러 개의 객체들로 구성되어 있으며, 각 객체는 상태(State) 정보를 기록 유지하기 위한 속성들과 이 속성들을 처리하는 오퍼레이션 집합으로 정의된다. 즉, 각 객체는 관련성이 높은 속성들과 오퍼레이션들을 포함하고 있다. 잘 설계된 객체는 재사용의 기본 단위가 된다.
2.1 객체의 예제
- 책 (Book)
속성: 책 제목, 출판사, 출판연도, ISBN 번호, 구매일, 책 상태, ···
오퍼레이션:
책 정보를 검색하다
책 상태를 변경하다
- 자동차 (Car)
속성: 자동차 모델, 자동차 고유번호, 자동차 번호, 연도, 주행거리, ···
오퍼레이션:
연간 평균 주행거리를 계산하다
자동차 번호를 교체하다
위의 예제들을 통해 살펴본 것처럼, 각 객체는 소수 개의 속성들을 가지며, 이 속성값들을 사용하는 오퍼레이션들로 구성된다. 따라서 각 객체는 응집도가 높은 프로그램의 단위가 된다.
2.2 객체의 조건
객체는 아래의 그림과 같이 세 가지 조건을 모두 갖추어야 한다.
이 중에서 하나의 조건이라도 충족되지 않으면 객체의 역할을 다 하지 못하고, 객체지향 프로그래밍의 장점을 살릴 수 없다.
2.2.1. 조건 1. 상태 (State) 유지
객체는 현재 상태 정보를 저장하고 유지하여야 하며, 이를 위해서는 속성을 가져야 한다. 분석 설계 단계에서 사용하는 용어인 속성은 프로그래밍 언어의 변수로 구현된다.
2.2.2. 조건 2. 기능성 (Functionality) 제공
좋은 설계를 위해서는 객체는 잘 정의된 오퍼레이션을 가지고 있어야한다. 이는 대부분 객체 속성들이 외부 객체로부터 직접적인 접근을 허용하지 않고 객체 내부의 오퍼레이션들에 의해서만 처리되기 때문이다. 잘 정의된 오퍼레이션들을 찾기 위한 방법은 다음 장에서 캡슐화의 원칙에서 상세하게 다루고자 한다.
2.2.3. 조건 3. 고유의 식별자 (Identity) 제공
동일한 모델에 대한 여러 대의 자동차가 있어도, 각 자동차는 고유 식별자인 차대번호나 자동차에 부착된 차량 번호판으로 구별될 수 있는 것과 같다. 객체도 이와 같이 고유한 식별자를 가져야 하는데, 그 용도에 따라서 식별자의 형태가 다양하다.
- 식별자 유형 1. 프로그램 세션 내에서의 식별자
객체지향 프로그램 실행과 종료 사이의 시간인 한 프로그램 세션 동안에만 유효한 식별자가 있다.
- 식별자 유형 2. 영구 식별자
프로그램 세션 내의 식별자는 프로그램 실행 세션이 종료되면 그 객체가 가지고 있는 내부 정보, 즉 상태 정보와 함께 지워진다. 그러나 어떤 객체들은 세션이 종료된 이후에도 그 상태값을 저장하고 이후 세션에서 그 상태값을 참조해서 기능성을 수행해야하는 경우도 있다. 이러한 객체를 영구 객체라고 하며, 이런 객체들은 영구 식별자를 가져야 한다.
- 은행 고객의 계좌 객체의 식별자
- 전자상거래의 주문 객체의 식별자
- 병원진료 시스템의 환자 진료 객체 식별자
객체의 영구성을 구현할 때 자주 사용되는 방법은 객체와 관계형 데이터베이스 간의 매핑이다. 이는 객체의 각 속성을 데이터베이스 테이블의 열에 매핑을 하고, 객체의 상태를 그 테이블의 행에 저장하는 방법이다.
- 식별자 유형 3. 글로벌 식별자
객체의 글로벌 식별자는 이미 정의된 표준을 사용하거나, 시스템 별로 자체적으로 정의한 식별자 체계를 사용하면 된다.
2.3. 세 가지 조건을 갖춘 객체
Car myCar = new Car //식별자 int carNumber; String carName; String carColor; //상태 move(); changeColor(); //기능성
세 가지 조건을 갖춘 객체의 예로 자동차 객체를 정의한 것이다.
2.4. 물리적 객체
물리적 객체는 문제 영역에서 눈으로 식별하거나, 직접 만져볼 수 있는 형태를 갖춘 대상을 나타낸다.
- 도서 대출 시스템
책, 잡지, 논문, 직원, 이용자 등
- 전자상거래 시스템
물품, 창고, 회원, 직원, 납풉 회사 등
이처럼, 물리적인 객체는 문제 영역에서 실제 공간을 차지하고 있어서 보거나 만질 수 있기 때문에 식별하기 쉽다.
2.5. 개념적 객체
개념적 객체는 물리적인 형태를 가지고 있지 않으며 문제 영역의 업무를 수행하는 과정에서 생성되는, 즉 비지니스 프로세스 처리의 결과물을 나타낸다.
예를 들면 쇼핑몰 시스템의 '상품을 구매하다' 라는 비즈니스 프로세스는 고객과 상품이라는 물리적 객체들을 사용하여 구매 업무를 처리하며, 그 결과는 '구매' 라는 개념적 객체에 저장된다. 따라서 이 객체는 구매의 결과물을 저장할 수 있는 충분한 속성들을 가지고 있어야한다.
'객체지향' 카테고리의 다른 글
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) 2021.01.19 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) 2021.01.17 고급 객체지향 프로그래밍(3) (0) 2020.01.20 고급 객체지향 프로그래밍(1) (1) 2020.01.17