CRC 카드는 객체 지향 소프트웨어 설계에서 사용되는 브레인 스토밍 툴이다. CRC는 "Class - Responsibility - collaborator"(객체 - 책임 - 공동 작업자)의 약자. 워드 커닝엄이 고안하였다. 일반적으로 디자인을 시작할 때 어떤 객체가 필요하고 그들이 어떻게 상호 연계할지 여부를 결정하는 데 사용한다.
[CRC Card Example]
imagine that you want to keep track of your library.
당신은 당신의 라이브러리 내용을 파악합니다.
Each book is of a particular format (hardback, paperback, trade paperback. ect) and has a title and an author.
각 책의 (하드커버, 종이커버, 등)에는 자세한 형식 그리고 제목과 저자명이 있고
You also want to know how many books you have.
또한 당신은 당신의 책이 어느정도 양인지 파악합니다.
Design, implement, and demonstrate a class book that meets the previous requirements.
이전 조건에 해당하는 클래스 책의 설계, 방법을 증명합니다.
Include a CRC card and a UML diagram that gives only the class names and the associations between them.
오직 클래스 명과 클래스 명을 합쳐서 CRC card와 UML 다이어그램에 포함합니다.
글에 나온 키워드를 보면은 library, book, writer , bookname, bookform, bookcount 가 있다. 이제 CRC카드로 만들어 보자.
CRC카드란 Candidate, Responsiblity, Collaboration 의 약자로 클래스를 정의 하기위한 키워드 산출및 클래스간의 관계를 간단하게 표기하는 문서라고 생각하면 된다.
CRC카드의 형태는 다음과 같다.
이제 위에서 뽑은 키워드 들로 간단한 CRC 카드를 만들어보면 다음과 같은 형태가 나온다.
각 클래스에 해당하는 책임 즉 클래스가 해야될 임무는 간단하게 말로 풀이 하였다.
그러면 위의 산출물을 근거로 클래스다이어그램을 그려보았다.
클래스 다이어그램은 CRC카드와 비슷하지만 코딩에 바로 쓰일수 있는 명칭들과 변수들, 매개변수들이 포함되었다고 생각하면 된다.
Library 클래스는 간단하다. Book을 생성해서 담을 벡터와(물론 배열,해쉬 등 다른걸 써도 되지만 개인적으로 벡터가 편해서 벡터로 했다.) 책의 갯수를 확인하기 위한 함수 getBookcount()가 있다. 책의 갯수를 세는것은 간단하게 vector의 .length 쓰면 return만 해주면 끝날거라 생각한다. getBookInfo()의 경우 안에 들어갈 함수는 Book클래스의 함수들을 호출하면 될거라 예상된다.
Book 클래스는 정보를 읽고 쓰는 클래스다. Book 본연의 임무인 형식,제목,저자명을 넣을수 있고 꺼내올수 있는 함수와 변수들로 구성된다.
간단하게 CRC카드와 클래스 다이어그램으로 표현해 보았다. 사실 간단해도 다른 사람은 다르게 그릴수 도 있고 내가 그린 설계가 틀릴수도 있으니 참고만 하셨으면 한다.