SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
GPG 
P. 44 - 58 
1.1 객체지향적 프로그래밍과 설계기법 
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 Car 
Class Tico has-a Class Tire 
이게 어색하면 뭔가 잘못된 설계
객체지향적 프로그래밍과 설계기법 
디자인 패턴 
:일반적 설계 문제를 해결하기 위한 방법을 체계화한 것. 
• 단일체 패턴(Singleton Pattern) 
• 퍼사드 패턴(Facade Pattern) 
• 상태 패턴(State Pattern) 
• 팩토리 패턴 (Factory Pattern)
객체지향적 프로그래밍과 설계기법 
단일체 패턴singleton pattern 
의도 
해당 클래스의 인스턴스가 오직 하나 뿐임을 보장하고, 이에 대한 전역적인 접근점을 제공하기 위함. 
구조 
Singleton 
static GetInstance() 
SingletonOperation() 
GetSingletonData() 
static uniqueInstance 
singletonData 
return uniqueInstance 
public 
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 
facade 
class 
facade 
class 
서브 시스템끼리는 
퍼사드 클래스를 
통해서만 소통 
subsystem 1 subsystem 2
객체지향적 프로그래밍과 설계기법 
퍼사드 패턴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

Weitere ähnliche Inhalte

Was ist angesagt?

Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements민태 김
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5민태 김
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디quxn6
 
비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1민태 김
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guideSungchul Park
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2Injae Lee
 
Monad programming
Monad programmingMonad programming
Monad programmingAlgorigoInc
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] GenericsBill Kim
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 

Was ist angesagt? (20)

Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5비개발자를 위한 Javascript 알아가기 #5
비개발자를 위한 Javascript 알아가기 #5
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1비개발자를 위한 Javascript 알아가기 #5.1
비개발자를 위한 Javascript 알아가기 #5.1
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guide
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
Monad programming
Monad programmingMonad programming
Monad programming
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
8.다중메서드
8.다중메서드8.다중메서드
8.다중메서드
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] Generics
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 

Ähnlich wie GPG 1.1 객체지향적 프로그래밍과 설계기법

[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법Sehyeon Nam
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티Sehyeon Nam
 
[Swift] Prototype
[Swift] Prototype[Swift] Prototype
[Swift] PrototypeBill Kim
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화sung ki choi
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
Clean code
Clean codeClean code
Clean codebbongcsu
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheetYoungkwon Lee
 

Ähnlich wie GPG 1.1 객체지향적 프로그래밍과 설계기법 (20)

[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
[GPG 스터디] 1.1 객체지향적 프로그래밍과 설계기법
 
Gpg 1.1
Gpg 1.1Gpg 1.1
Gpg 1.1
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
 
[Swift] Prototype
[Swift] Prototype[Swift] Prototype
[Swift] Prototype
 
Java script
Java scriptJava script
Java script
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
Flyweight
FlyweightFlyweight
Flyweight
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
Clean code
Clean codeClean code
Clean code
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 

Mehr von Taeung Ra

GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산Taeung Ra
 
1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법Taeung Ra
 
Super Meat Boy 포스트모템
Super Meat Boy 포스트모템Super Meat Boy 포스트모템
Super Meat Boy 포스트모템Taeung Ra
 
Nhn next this plus technical report
Nhn next this plus technical reportNhn next this plus technical report
Nhn next this plus technical reportTaeung Ra
 
인디 소프트웨어 개발기
인디 소프트웨어 개발기인디 소프트웨어 개발기
인디 소프트웨어 개발기Taeung Ra
 

Mehr von Taeung Ra (6)

GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
GPG 1.2 템플릿 메타프로그래밍을 이용한 빠른 수학 연산
 
1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법1.0데이터 주도적 설계의_마법
1.0데이터 주도적 설계의_마법
 
Super Meat Boy 포스트모템
Super Meat Boy 포스트모템Super Meat Boy 포스트모템
Super Meat Boy 포스트모템
 
Nhn next this plus technical report
Nhn next this plus technical reportNhn next this plus technical report
Nhn next this plus technical report
 
행렬
행렬행렬
행렬
 
인디 소프트웨어 개발기
인디 소프트웨어 개발기인디 소프트웨어 개발기
인디 소프트웨어 개발기
 

Kürzlich hochgeladen

클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료Softwide Security
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)Wonjun Hwang
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료Softwide Security
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdfssuserf8b8bd1
 

Kürzlich hochgeladen (6)

클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 

GPG 1.1 객체지향적 프로그래밍과 설계기법

  • 1. GPG P. 44 - 58 1.1 객체지향적 프로그래밍과 설계기법 NHN NEXT 남현욱
  • 2. 객체지향적 프로그래밍과 설계기법 :견고하고 재사용가능한 코드의 작성을 위한 기법들 • 코딩 스타일 • 클래스 설계 • 클래스 계통 구조의 설계
  • 3. 객체지향적 프로그래밍과 설계기법 코딩 스타일 • 어떤 스타일이든 하나의 스타일을 결정하고 항상 일관되게 그 스타일을 사용할 것. - 헝가리안 표기법(Hungarian notation), 카멜 케이스(camel-case) 등 • 코딩 스타일에 지나치게 집착하지 말 것. - 1,2페이지 내외로 적당하게. 너무 길고 복잡하면 귀찮아서 아무도 안 지킴. • 클래스 이름도 유지보수와 가독성을 고려해서 지을 것. - ex) C로 시작하면 구체화된 클래스(concrete class), I 로 시작하면 인터페이스 클래스.
  • 4. 객체지향적 프로그래밍과 설계기법 클래스 설계 class Sample { public: Sample() {Clear();} ~Sample(){Destroy();} void Clear(); bool Create(); void Update(); void Destroy(); }; • 생성자는 반환값이 없으므로, 실패할 수 있 는 작업을 생성자 안에서 수행하는 건 좋지 않음. • 각 역할에 따른 함수 이름을 통일시키는 것 이 전체 개발 팀에 큰 도움이 됨.
  • 5. 객체지향적 프로그래밍과 설계기법 클래스 계통 구조의설계 가장 기본적인 두 방식은 상속inheritance과 포함layering, containtment is-a 관계면 상속, has-a 관계면 포함을 쓸 것. ex) Class Tico is-a type of Class Car Class Tico has-a Class Tire 이게 어색하면 뭔가 잘못된 설계
  • 6. 객체지향적 프로그래밍과 설계기법 디자인 패턴 :일반적 설계 문제를 해결하기 위한 방법을 체계화한 것. • 단일체 패턴(Singleton Pattern) • 퍼사드 패턴(Facade Pattern) • 상태 패턴(State Pattern) • 팩토리 패턴 (Factory Pattern)
  • 7. 객체지향적 프로그래밍과 설계기법 단일체 패턴singleton pattern 의도 해당 클래스의 인스턴스가 오직 하나 뿐임을 보장하고, 이에 대한 전역적인 접근점을 제공하기 위함. 구조 Singleton static GetInstance() SingletonOperation() GetSingletonData() static uniqueInstance singletonData return uniqueInstance public private
  • 8. 객체지향적 프로그래밍과 설계기법 단일체 패턴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; } }
  • 9. 객체지향적 프로그래밍과 설계기법 단일체 패턴singleton pattern 장점 • 접근에 대한 통제가 가능하다 • 전역변수를 사용하는 것보다 더 편하고 좋다 • 상속시켜 서브 클래스에서 새로운 인터페이스를 만들 수 있다
  • 10. 객체지향적 프로그래밍과 설계기법 퍼사드 패턴facade pattern 의도 하나의 서브 시스템에 대해 획일화된 하나의 인터페이스를 제공하기 위함. → 커플링의 최소화 class class class class class class class subsystem 1 subsystem 2
  • 11. 객체지향적 프로그래밍과 설계기법 퍼사드 패턴facade pattern 의도 하나의 서브 시스템에 대해 획일화된 하나의 인터페이스를 제공하기 위함. → 커플링의 최소화 class class class class class class class facade class facade class 서브 시스템끼리는 퍼사드 클래스를 통해서만 소통 subsystem 1 subsystem 2
  • 12. 객체지향적 프로그래밍과 설계기법 퍼사드 패턴facade pattern 장점 • 서브 시스템의 구성요소를 보호할 수 있다 • 의존성(커플링)을 줄여 재사용성을 높일 수 있다
  • 13. 객체지향적 프로그래밍과 설계기법 상태 패턴state pattern 의도 게임 내에 존재하는 수많은 상태들을 적절히 관리하기 위함. 객체 내부 상태에 따라 스스로 행동을 변화시킬 수 있게 함. 구조 StateManager func1() func2() BaseState* m_state BaseState func1() func2() 상속 state1 state2 state3 런타임에 동적으로 상태를 변환. 각 상태 객체들(state)은 모두 단일체(Singleton)
  • 14. 객체지향적 프로그래밍과 설계기법 상태 패턴state pattern StateManager func1() func2() BaseState* m_state BaseState func1() func2() 상속 state1 state2 state3 m_state가 현재 가리키는 객체가 뭐냐에 따라 각 함수(func1, func2) 가 하는 행동이 달라진다.
  • 15. 객체지향적 프로그래밍과 설계기법 상태 패턴state pattern 장점 • 각 상태를 서로 다른 객체로 관리하기 때문에 관리하기 편하다. • 상태의 전이를 명확하게 만든다.
  • 16. 객체지향적 프로그래밍과 설계기법 팩토리 패턴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; } • 메모리 할당이 일어나 는 것을 통제하기 편함. • 각 객체들에 대한 공통 적인 처리를 수행하기 쉬 움.
  • 17. 객체지향적 프로그래밍과 설계기법 요약 • 코드의 모든 부분에 객체지향 기법을 잘 활용 하면 유지보수성과 확장성이 크게 증가한다. • 참고 자료 -effective C++ -more effective C++ -GoF의 디자인 패턴
  • 18. 객체지향적 프로그래밍과 설계기법 끝 ‘ GPG를 공부하자’ 페이스북 페이지 https://www.facebook.com/gpgstudygogo