KoreanFoodie's Study
디자인 패턴 (GOF) #1 - Single Responsibility Principle (단일 책임 원칙) 본문
Game Dev/Design Patterns
디자인 패턴 (GOF) #1 - Single Responsibility Principle (단일 책임 원칙)
GoldGiver 2022. 6. 7. 15:39
GoF 의 디자인 패턴과 강의를 참고하여 디자인 패턴에 대한 내용을 정리하고 있습니다.
Single Responsibility Principle (단일 책임 원칙)
Single Responsibility Principle, 줄여서 SRP 는 단일 책임 원칙으로, 모든 클래스가 하나의 책임을 가지며, 클래스가 그 책임을 완전히 캡슐화해야 함을 의미한다.
아래 코드를 보자.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <boost/lexical_cast.hpp>
using namespace std;
struct Journal
{
string title;
vector<string> entries;
explicit Journal(const string& title)
: title{title}
{
}
void add(const string& entry);
// persistence is a separate concern
void save(const string& filename);
};
void Journal::add(const string& entry)
{
static int count = 1;
entries.push_back(boost::lexical_cast<string>(count++)
+ ": " + entry);
}
void Journal::save(const string& filename)
{
ofstream ofs(filename);
for (auto& s : entries)
ofs << s << endl;
}
struct PersistenceManager
{
static void save(const Journal& j, const string& filename)
{
ofstream ofs(filename);
for (auto& s : j.entries)
ofs << s << endl;
}
};
void main()
{
Journal journal{"Dear Diary"};
journal.add("I ate a bug");
journal.add("I cried today");
//journal.save("diary.txt");
PersistenceManager pm;
pm.save(journal, "diary.txt");
}
위의 코드에서, Journal 은 Diary 에 내용을 추가하는 기능을 수행한다. 그런데 만약 Journal 클래스 안에 내용을 txt 파일에 저장하는 기능을 또 만드는 것은 SRP 를 위배할 수 있다.
따라서 이 경우, PersistenceManager 구조체를 이용해 파일을 저장하는 기능을 분리하는 것이 좋다.
'Game Dev > Design Patterns' 카테고리의 다른 글
디자인 패턴 (GOF) #5 - Dependency Injection Principle (의존성 역전 원리) (0) | 2022.06.08 |
---|---|
디자인 패턴 (GOF) #4 - Interface Segregation Principle (인터페이스 분리 원칙) (0) | 2022.06.08 |
디자인 패턴 (GOF) #3 - Liskov Substitution Principle (리스코프 치환 원칙) (0) | 2022.06.07 |
디자인 패턴 (GOF) #2 - Open-Closed Principle (개방-폐쇄 원칙) (0) | 2022.06.07 |
Comments