2015. 3. 11. 18:43
  • 파일(file) 클래스는 문서(document) 객체에 포함되는 객체이다. 그리고, 버전 정보는 파일에 포함되는 속성이다.
    '버전 정보'는 객체로 봐야 하는가? 혹은 기본형 데이터 타입(primitive type)의 집합으로 정의해야 하는가? 이에 대해 답을 하기 위해 몇가지 문제를 검토해 봐야 한다.

  • 기본형과 객체형의 차이
    • 객체지향 프로그래밍 언어에서 기본형 데이터는 정수 및 실수 값을 나타내는 숫자형(number type), 문자형(character type), 부울린형(boolean type), 바이트형(byte type) 등이 있다. 기본형과 객체형의 차이는 기본형은 데이터 만을 담을 수 있고, 메소드(기능)은 포함하지 못한다는 점이다.
    • 기본형 타입은 하나의 값(value) 만을 담을 수 있고, 객체형 혹은 클래스는 복수의 속성 혹은 값들을 담을 수 있다.

  • 동적인 측면에서의 설계
    버전 정보는 버전 순번(version sequence), 버전 생성일시(generation time), 버전 설명(description) 등 3가지 항목으로 구성된다. 각각의 항목은 버전 정보가 생성된 이후에 수정되어서는 안된다. 즉, 버전 정보는 읽기 전용 (read-only) 혹은 불변(immutable 타입)이다. 따라서, 필요한 기능은 생성자와 조회 메소드 (read-only access methods) 뿐이다. 객체 혹은 클래스를 소프트웨어의 동적인 부품(part)으로 보는 관점에서는 버전 정보를 굳이 클래스로 식별(혹은 분리)하는 것이 좋은 선택은 아니다. 파일 객체 내에 버전 객체를 포함시키면, 버전 숫자를 얻기 위해 파일 객체에서 버전 객체를 꺼낸 후에 다시 버전 객체에서 버전 숫자 조회 메소드를 호출해야 하는 번거로움이 있다.

  • 정적인 측면(구조적인 측면)에서의 설계
    객체지향 설계의 목적은 주어진 문제를 최대한 빠르게 풀어내는 프로그램을 제작하는 것이 아니다. 최대한 빠르거나, 최소한의 자원(메모리/네트워크 사용량 등)을 사용하는 프로그램을 작성하는 기법을 연구하는 것은 '알고리즘'의 고유 영역이다. 객체지향 설계의 목적은 '인간'의 사고 체계를 바탕으로(응용하여) 현실 세계의 문제를 가상 공간(컴퓨터)내에 이식하는 것이다.
    버전 정보를 앞서 제시한 3개의 항목으로 분리하여 표현하는 것보다, 버전 정보라는 하나의 객체로 표현하는 것이 인간이 소프트웨어 구조를 인지(recognition)하는데 있어서 유리하다. 달리 말해, 직관적인 구조라고 할 수 있다.

  • 위와 같은 이유 (컴퓨터보다는 인간 지향)로 파일 클래스를 '파일'과 '버전' 클래스로 분리한다.


Posted by 곽중선