디자인 패턴/생성 5

싱글톤

싱글톤은 자주 쓴다고 한다. 싱글톤이 뭐냐면 객체 하나만 있는 클래스이다. 즉 클래스를 만들면 class OneObject{ static OneObject oneObject = null; private OneObject(){} public static OneObject CreateOneObject(){ if( oneObject == null){ oneObject == new OneObject(); } return oneObject; } } 이 클래스의 생성에는 오직 CreateOneObject 하나만 관여를 한다. 장점은 전화번호부 관리클래스 등, 리스트를 관리하는 Manager나 Handler 클래스 등 딱 하나만 필요한 객체에 접근하기 좋다.

원형(prototype) 패턴

원형 패턴은 일종의 식당 메뉴와 같다. 미리 정해진 틀 대로 음식을 만들어 놓고, 손님이 주문하면 그 음식을 주는거다. 프로토타입 객체가 어떠한 객체들에 대한 원형을 가지고 있다가, 요청시 그 객체를 복사하여 주는 것이다. class MazePrototypeFactory extends MazeFactory { public Maze MakeMaze(); public Maze MakeRoom(int roomNum); public Maze MakeWall(); public Maze MakeDoor(Room room1, Room room2); private Maze prototypeMaze; private Maze prototypeRoom; private Maze prototypeWall; private Maz..

팩토리 메서드

팩토리 메서드란... 생성부분을 따로 빼놓는 거다. 추상클래스에 createGameObject() 라는 함수를 정의 하고, 이걸 다른 것들이 상속 받으면.. 장점은 객체 생성 후에 해야 할 공통적인 수행을 정의할 수 있고 GameObject를 인자로 받아 다형성이 가능해진다. (이건 그냥 추상 패턴의 장점) 그리고, 생성자는 private GameObject(){} 이런 식으로 해서 오직 create함수만 생성에 담당하게 하면 좋다. 템플릿을 사용한 서브클래싱은 피해야 한다.

빌더 패턴

빌더 패턴은 생성에 관련된 패턴이다. 우리가 클래스를 만들다 보면 상당히 많은 멤버변수들이 있다. 이름, 나이, 전화번호 등등 이러다보면 이 클래스를 생성(객체)할 때 생성자의 멤버변수의 위치 등 고려해야 할 사항이 많다. 그런데 이걸 내부 클래스나 이런 걸로 빌더로 정의해두면 정말 쉽다. 빌더는 음.. 일종의 임시 클래스라고 생각하면 좋을 것 같다. 어떤 클래스의 빌더는 그 클래스의 똑같은 멤버변수를 가지고 있는거다 (그렇다고 해서 그 클래스를 상속받는게 아니다. 다른 클래스다.) 상수로 사용하고 싶은 것은 생성자를 이용해 받아야 겠지만, 나머지는 기본값을 넣어두고, setter를 이용해 받는 것이다. 단, setter지만 목적과 방법이 조금 다르므로 빌더의 경우는 그냥 멤버변수의 이름으로 한다. Ga..

추상 팩토리

이게 책이 옛날 책인데 (GOF) 요새 객체지향 하면 다 이거 배운다. 그만큼 아주 효과적이여서 아예 abstract라는 명령어를 아예 DVE에서 제공을 해준다. 먼저 아예 추상적인 클래스를 정의해 주는거다. 그 다음 구체적인 내용들을 이 추상클래스를 상속받은 서브클래스들이 그 내용을 정의 해주는 거다. 이렇게 하면 엄청난 다형성이 생긴다. 예를 들면 동물의 추상적인 개념에서 개, 고양이, 말 같은 더 구체적인 객체를 위한 정의를 해준다. 동물이라는 추상 클래스에 bark()라는 추상 메소드를 정의 한 뒤, 각각의 서브 메소드 들이 overriding 하여 이를 구현하는 것이다. 이렇게 하면 인자로 Animal animal로 받아서 animal.bark()하면 알아서 다 각자의 소리를 낸다. 비슷한데 분..