목록Dev. Study Note/Design Pattern (14)
Priv's Blog
1. 프린터 관리자 만들기 회사의 영업 부서에서 10명의 직원들이 프린터 1개를 공유하여 사용한다고 가정하자. 이러한 상황에서 프린터를 코드로 구현하려면 어떻게 해야 할까? 먼저 아래와 같이 리소스를 받아서 출력하는 Printer 클래스를 작성했다. public class Printer { public Printer() { } public void print(Resource r) { } } 이제 여기서 Printer 클래스로 프린터를 사용하려면, 클라이언트 쪽에서 new Printer()를 1번만 호출되도록 주의를 기울여야 한다. 이 문제를 해결하기 위해서는 생성자를 외부에서 호출할 수 없도록 제한하는 것이다. public class Printer { private Printer() { } public ..
1. 로봇 만들기 이번 시간에는 Atom 클래스와 TaekwonV 클래스를 만들어볼 것이다. Atom 클래스는 로봇 '아톰'을 정의하는 클래스이며, TaekwonV 클래스는 '태권 V'를 정의하는 클래스이다. 이 두 로봇은 공격과 이동 기능이 존재한다. 아톰은 공격할 때 주먹만 사용하지만 하늘을 날 수 있다. 태권 V는 미사일로 공격할 수 있지만 날 수는 없고 걸어 다닐 수만 있다. 이 두 로봇을 클래스 다이어그램으로 나타내면 다음과 같다. 다이어그램의 구조를 보면 TaekwonV 클래스, Atom 클래스 모두 Robot이라는 추상 클래스의 자식 클래스이다. 이는 아톰과 태권 V 모두 공격(attack)과 이동(move) 메서드를 가지고 있기 때문이다. 다만 어떻게 공격하고 이동하는지에 대해서는 서로 다..
1. 디자인 패턴이란? SW를 설계할 때, 특정 맥락에서 자주 발생하는 고질적인 문제들을 해결하기 위한 가이드라인을 말한다. 과거부터 오랫동안 축적된 고질적인 문제들의 해결책들을 하나의 패턴 형태로 만들어 둔 것이다. 1.1) 디자인 패턴의 구조 디자인 패턴 구조는 콘텍스트(context), 문제(Problem), 해결(Solution)이라는 필수 구성 요소 3가지로 구성된다. 콘텍스트: 문제가 발생하는 여러 상황을 기술한다. 즉, 패턴이 적용될 수 있는 상황을 의미한다. 경우에 따라 패턴이 유용하지 못한 상황을 나타내기도 한다. 문제: 패턴이 적용되어 해결할 필요가 있는 여러 디자인 문제들을 기술한다. 이때 여러 제약 사항, 영향력도 문제 해결을 위해 고려해야 한다. 해결: 문제를 해결하도록 설계를 구..
1. 단일 책임 원칙 1.1) 책임 객체지향 설계 관점에서 단일 책임 원칙이 말하는 '책임'의 기본 단위는 객체이다. 즉, 객체는 하나의 책임만을 가져야 한다는 것이다. 책임이란, '해야 하는 것' 또는 '할 수 있는 것'으로 간주한다. 객체는 다른 어떤 객체보다도 가장 잘 수행할 수 있는 일을 책임으로 할당받아야 한다. 또한 객체는 책임에 수반되는 모든 일을 자신만이 수행해야 한다. 책임 == 해야 하는 것 == 할 수 있는 것 == 해야 하는 것을 잘할 수 있는 것 예를 들어, Student 클래스가 수강 과목을 추가/조회하고, 데이터베이스에 객체 정보를 저장/읽는 작업도 처리하고, 성적표와 출석부에 출력하는 일도 실행한다고 가정한다. // 코드 3-1 public class Student { pub..
1. 추상화 사람의 속성과 행동을 표현한 책을 쓰고자 할 때, 그 분량은 상상하기 힘들 정도로 엄청나게 방대하고 복잡할 것이다. 하지만 사람의 속성과 행동 중에서 필요와 조건에 따라 선별한 요소들을 골라내 사용할 수는 있다. 예를 들어 학생을 표현한다고 가정하면, 학교에서는 항상 교복을 입으며, 가방을 멘다는 속성이 있고, 월~금에는 학교에 등교한다는 행동이 존재한다. 하지만 이는 병원에서 진료를 보는 상황에서는 쓸데없는 정보일 뿐이다. 병원에서는 그 사람의 이름, 혈액형, 과거 진료 내역 등에 더 집중할 것이다. 추상화란, 사물들의 공통적인 특징을 파악해 인식의 대상으로 삼는 것을 말한다. 즉, 매우 복잡한 개념을 처음부터 끝까지 모두 설명하는 것 대신, 상황과 조건에 따라 파악한 공통점들로 집합을 구..
1. 모델링 소프트웨어 개발에서 모델은 소프트웨어의 전체적인 구조를 파악할 수 있게 해주는 역할을 한다. 서로의 해석을 공유해 합의를 이루거나, 해석의 타당성을 검토하게 만들어주며, 현재 시스템 또는 앞으로 개발할 시스템의 원하는 모습을 가시화하는 데 도움을 줄 수 있다. 또한 시스템의 구조, 행위를 명세하여 시스템 구축에 필요한 틀과 구축된 시스템의 문서화 기능을 제공할 수도 있다. 모델은 추상화(Abstraction)를 바탕으로 만들어져야 한다. 추상화는 대상의 세부적인 모든 것을 표현하지 않고, 그 대상의 특징을 부각할 수 있는 핵심 요소들만 표현해준다. 예를 들어, 대학 전산 처리 과정에서 한 학생을 추상화하여 모델링할 때, 그 학생의 머리카락 수나 피부색 등은 생략하고, 수강하는 과목, 지도 교..