Upload
taeung-ra
View
288
Download
7
Embed Size (px)
DESCRIPTION
GPG 1.1 객체지향적 프로그래밍과 설계기법
Citation preview
GPG1.1 객체지향적 프로그래밍과 설계기법
P. 44 - 58
NHN NEXT남현욱
:견고하고 재사용가능한 코드의 작성을 위한 기법들
객체지향적 프로그래밍과 설계기법
• 코딩 스타일
• 클래스 설계
• 클래스 계통 구조의 설계
객체지향적 프로그래밍과 설계기법
코딩 스타일
• 어떤 스타일이든 하나의 스타일을 결정하고 항상 일관되게 그 스타일을 사용할 것.
- 헝가리안 표기법(Hungarian notation), 카멜 케이스(camel-case) 등
• 코딩 스타일에 지나치게 집착하지 말 것. - 1,2페이지 내외로 적당하게. 너무 길고 복잡하면 귀찮아서 아무도 안 지킴.
• 클래스 이름도 유지보수와 가독성을 고려해서 지을 것. - ex) C로 시작하면 구체화된 클래스(concrete class), I 로 시작하면 인터페이스 클래스.
객체지향적 프로그래밍과 설계기법
class Sample{public: Sample() {Clear();} ~Sample(){Destroy();}
void Clear(); bool Create(); void Update(); void Destroy();};
• 생성자는 반환값이 없으므로, 실패할 수 있는 작업을 생성자 안에서 수행하는 건 좋지 않음.
• 각 역할에 따른 함수 이름을 통일시키는 것이 전체 개발 팀에 큰 도움이 됨.
클래스 설계
객체지향적 프로그래밍과 설계기법
가장 기본적인 두 방식은 상속inheritance과 포함layering, containtment
is-a 관계면 상속, has-a 관계면 포함을 쓸 것.
ex)Class Tico is-a type of Class CarClass Tico has-a Class Tire
이게 어색하면 뭔가 잘못된 설계
클래스 계통 구조의설계
객체지향적 프로그래밍과 설계기법
:일반적 설계 문제를 해결하기 위한 방법을 체계화한 것.
디자인 패턴
• 단일체 패턴(Singleton Pattern)
• 퍼사드 패턴(Facade Pattern)
• 상태 패턴(State Pattern)
• 팩토리 패턴 (Factory Pattern)
객체지향적 프로그래밍과 설계기법
단일체 패턴singleton pattern
의도 해당 클래스의 인스턴스가 오직 하나 뿐임을 보장하고, 이에 대한 전역적인 접근점을 제공하기 위함.
구조Singleton
static GetInstance()SingletonOperation()GetSingletonData()
static uniqueInstancesingletonData
return uniqueInstancepublic
private
객체지향적 프로그래밍과 설계기법
단일체 패턴singleton pattern
예시코드Singleton.h
class Singleton
{
public:
static Singleton* GetInstance();
static void ReleaseInstance();
protected:
Singleton();
virtual ~Singleton();
private:
static Singleton* m_pInstance;
};
Singleton.cpp
#include “Singleton.h”
Singleton* m_pInstance = nullptr;
Singleton* Singleton::GetInstance()
{
if (m_pInstance == nullptr)
{
m_pInstance = new Singleton();
}
return m_pInstance;
}
void Singleton::ReleaseInstance()
{
if (m_pInstance != nullptr)
{
delete m_pInstance;
m_pInstance = nullptr;
}
}
객체지향적 프로그래밍과 설계기법
단일체 패턴singleton pattern
장점
• 접근에 대한 통제가 가능하다
• 전역변수를 사용하는 것보다 더 편하고 좋다
• 상속시켜 서브 클래스에서 새로운 인터페이스를 만들 수 있다
객체지향적 프로그래밍과 설계기법
퍼사드 패턴facade pattern
의도 하나의 서브 시스템에 대해 획일화된 하나의 인터페이스를 제공하기 위함. → 커플링의 최소화
class
class
class
class
class
class
class
subsystem 1 subsystem 2
객체지향적 프로그래밍과 설계기법
퍼사드 패턴facade pattern
의도 하나의 서브 시스템에 대해 획일화된 하나의 인터페이스를 제공하기 위함. → 커플링의 최소화
class
class
class
class
class
class
class
subsystem 1 subsystem 2
facadeclass
facadeclass
서브 시스템끼리는 퍼사드 클래스를 통해서만 소통
객체지향적 프로그래밍과 설계기법
퍼사드 패턴facade pattern
장점
• 서브 시스템의 구성요소를 보호할 수 있다
• 의존성(커플링)을 줄여 재사용성을 높일 수 있다
객체지향적 프로그래밍과 설계기법
상태 패턴state pattern
의도 게임 내에 존재하는 수많은 상태들을 적절히 관리하기 위함. 객체 내부 상태에 따라 스스로 행동을 변화시킬 수 있게 함.
구조StateManager
func1()func2()
BaseState* m_state
BaseState
func1()func2()
state1 state2 state3
상속
런타임에 동적으로 상태를 변환. 각 상태 객체들(state)은 모두 단일체(Singleton)
객체지향적 프로그래밍과 설계기법
상태 패턴state pattern
StateManager
func1()func2()
BaseState* m_state
BaseState
func1()func2()
state1 state2 state3
상속
m_state가 현재 가리키는 객체가 뭐냐에 따라 각 함수(func1, func2)가 하는 행동이 달라진다.
객체지향적 프로그래밍과 설계기법
상태 패턴state pattern
장점• 각 상태를 서로 다른 객체로 관리하기 때문에 관리하기 편하다.
• 상태의 전이를 명확하게 만든다.
객체지향적 프로그래밍과 설계기법
팩토리 패턴factory pattern
의도 하나의 클래스가 다양한 종류의 객체들을 생성하는 역할을 책임지는 것.
BaseClass* ClassFactory::CreateObject(int id){ BaseClass* pClass = 0; switch (id) { case 1: pClass = new Class1; break; case 2: pClass = new Class2; break; case 3: pClass = new Class3; break; default: assert(!“Error! Inval id class ID passed to factory!”); }; // 여기서 공통적인 초기화 작업을 수행한다. pClass->Init(); return pClass;}
• 메모리 할당이 일어나는 것을 통제하기 편함.
• 각 객체들에 대한 공통적인 처리를 수행하기 쉬움.
객체지향적 프로그래밍과 설계기법
요약
• 코드의 모든 부분에 객체지향 기법을 잘 활용하면 유지보수성과 확장성이 크게 증가한다.
• 참고 자료 -effective C++
-more effective C++
-GoF의 디자인 패턴
객체지향적 프로그래밍과 설계기법
끝
‘ GPG를 공부하자’ 페이스북 페이지https://www.facebook.com/gpgstudygogo