어댑터

Adapter

 

 

 

어댑터 패턴은 다른 이름으로 Wrapper라고 불리기도 하며 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록 타 클래스의 인터페이스를 기존 인터페이스에 덧씌우는 패턴이다.

이미 만들어진 클래스를 새로운 인터페이스에 맞게 개조시킬 때 사용하거나 기존 클래스를 개조해 필요한 클래스를 만들 때 사용한다. 

 

 

어댑터 패턴의 구현에는 두 가지 종류가 있다. 

◎ 객체 (Object) Adapter 패턴과 클래스 (Class) Adapter 패턴

 

출처; 위키/어댑터 패턴

1. 객체(Object) : 위임을 사용한 객체 어댑터 패턴

어댑터가 변환하려고 하는 클래스의 인스턴스를 가지고 있다.

 

 

 

출처; 위키/어댑터 패턴

2. 클래스(Class) : 상속을 사용한 클래스 어댑터 패턴

어댑터가 여러개의 다형성 인터페이스를 사용한다.

여러 개의 인터페이스를 상속하거나 구현해서 어댑터가 생성된다. 

 

 

 

◎ 장/단점

  객체 어댑터 클래스 어댑터
장점 상속이 아닌 구성(Composition)을 사용하기 때문에 더 유연 1. 어댑터가 Adaptee의 서브클래스이기 때문에 Adaptee의 행동을 오버라이드할 수 있다.
2. Adaptee 객체를 만들지 않아도 된다. 
단점 Adaptee 객체를 만들어야 사용 가능 1. 다중 상속이 지원되는 언어에서만 사용이 가능하다.
2. 상속을 이용하므로 한 어댑터 클래스가 특정 Adaptee 클래스에만 적용이 가능하다

 

 

 

 

 

 

참고 자료;

https://en.wikipedia.org/wiki/Adapter_pattern

https://arisu1000.tistory.com/27679

https://invincibletyphoon.tistory.com/20

https://ansohxxn.github.io/design%20pattern/chapter13/

 

 

상태

FSM(Finite State machine) ; 유한 상태 기계

 

 

FSM이란 여러 제한된 상태가 존재하며 그 존재들이 특정 조건에 따라 상태를 전이하는 형태의 개념적 모델이다.

간단하게 말하자면 보스의 패턴 구현 시 어느 특정 조건을 달성해 공격을 할 수 있게 되는 상황을 만들었다면 IDLE -> ATTACK 으로 상태가 바뀌는 것도 간단한 FSM 구현에 속한다. 

키 입력 등을 통해 '입력'이나 '이벤트가' 현재 움직여야 하는 머신에 전달이 되면 그에 해당하는 상태를 머신이 갖게 되는 것이다. 

 

 

◎ FSM의 장점?

1. 가질 수 있는 '상태'가 한정되며 한 번에 '한 가지' 상태만을 갖는다. 

상태란 행동이나 현재의 기능을 뜻한다. 예를 들어 플레이어의 움직임에서 생각해보면 걷기, 달리기, 점프 등은 각각 상태인 것이다. 

여기서 동시에 두 가지 상태가 일어나지 않게 하기 위해 사용하는 것이 FSM이다.

 

 

2. 내부 구조와 구현이 쉽다

머신의 행동을 직관적으로 간단하게 구현할 수 있다. 

 

3. 오류의 수정이 용이하며 유연성이 있다. 

 

4. 각 상태에는 입력에 따라 다음 상태로 바뀌는 '전이'가 있다.

입력이 들어왔을 때 현재 상태에 해당하는 전이가 있다면 전이가 가리키는 다음 상태로 변경한다.

예를 들어 기본 IDLE 상태에서 Down 키를 누르면 엎드리기 상태로 바뀌지만 점프 상태에서 Down키를 누르면 내려찍기로 전이한다.

 

 

 

 

◎ FSM의 단점

1. 규모가 커지면 설계가 복잡해 진다.

 

2. 제한된 범위의 문제에만 적용이 가능하다.

 

 

 

 

 

참고 자료;

더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴 게임 프로그래밍 (저; 로버트 나이스트롬 , 역; 박일, 출판사; 한빛미디어)


https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=debuff9710&logNo=221333379009 

 

'Study > 디자인패턴' 카테고리의 다른 글

[디자인패턴] 어댑터 (Adapter)  (0) 2021.10.12
[디자인패턴] 싱글톤(Singletone)  (0) 2020.10.23

 

 

싱글톤

Singletone

 

 

 

싱글톤은 오직 한 개의 인스턴스만을 갖도록 보장해주며 해당 인스턴스를 전역에서 접근할 수 있는 메서드를 제공한다는 점에서 큰 장점을 제공한다. 

 

 

◎ 싱글톤을 사용하는 이유

1. 한 번도 사용하지 않으면 아예 인스턴스 자체를 생성하지 않는다.

처음 사용될 때 초기화되므로 사용되지 않으면 아예 초기화 되지도 않는다.

 

2. 런타임에 초기화된다.

애초에 전역으로 접근하기 위해 정적 클래스를 사용하기도 하지만 정적 멤버 변수는 컴파일러가 main 함수를 호출하기 전에 초기화하기 때문에 프로그램 실행 후에 알 수 있는 정보들은 활용할 수 없다.따라서 싱글톤을 이용하면 1번과 같이 사용할 때 초기화가 되므로 원하는 시점에서 초기화 하여 사용할 수 있다.

 

3. 싱글톤을 상속할 수 있다.

C# 같은 경우는 제네릭 클래스를 이용해 싱글톤을 상속받아 사용하는 방식도 많이 사용한다. 

 

4. 메모리 낭비 방지

한번의 new로 고정된 메모리 영역을 얻어 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.

 

 

◎ 싱글톤의 문제는?

싱글톤의 전역에서 접근할 수 있다는 장점은 곧 단점이 되기도 한다.

 

1. 버그 관리가 힘들 수 있다.

만약 싱글톤으로 호출한 함수에 버그가 있으면 해당 함수 뿐 아니라 해당 함수를 호출한 모든 부분을 확인해야 한다.

 

2. 커플링을 조장한다.

커플링이란 결합도를 뜻한다. 코드는 다른 코드들과의 의존성이 낮을 수록 좋다. 하지만 커플링은 하나의 모듈이 다른 모듈의 내부 데이터를 직접 접근할 때 발생하며, 다른 부분의 내용을 수정할 수 있게 된다. 

싱글톤을 이용하면 코드를 짜면서 나도 모르게 의존성이 높은 코드를 짜게 된다. 

 

3. 멀티스레딩 같은 동시성 프로그래밍에 알맞지 않다

무언가를 전역으로 만들면 모든 스레드가 보고 수정할 수 있는 메모리 영역이 생기게 되는 것이다. 다른 스레드가 전역 데이터에 무슨 작업을 하는지 모를 때도 있다. 그러다 보면 교착상태, 경쟁상태 등 찾기 어려운 스레드 동기화 버그가 생기기 쉽다. 

 

 

 

 

참고 자료;

더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴 게임 프로그래밍 (저; 로버트 나이스트롬 , 역; 박일, 출판사; 한빛미디어)

+ Recent posts