일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 패턴인식
- 삼성소프트웨어멤버십
- 삼성
- Google App Engine
- SSM
- 멤버십
- BAM
- 빅데이터
- Python
- Neural Network
- 물걸레자동세척로봇청소기
- Friendship
- 인공지능
- 고려대학교
- NarwalFreo
- 하이퍼바이저
- 패턴 인식
- 동아리
- hopfield network
- Bidirectional Associative Memory
- 나르왈프레오
- 신경망
- 갤럭시탭S8울트라
- 구글 앱 엔진
- 증강현실
- 파이썬
- 물걸레로봇청소기추천
- 가상화
- 신경회로망
- 삼성전자 소프트웨어멤버십 SSM
- Today
- Total
정보공간_1
[6기 수원 최웅엽] c++ 을 이용한 디자인패턴 본문
디자인 패턴이란 무엇일까요
소프트웨어의 디자인 패턴은 소프트웨어 설계에서 공통적인 문제에 대한 표준적인 해법입니다. 이 패턴들을 반드시 알아야 하는 것은 아니지만 여러 공통적인 문제와 이슈를 풀어내기 쉽기 때문에 몇 가지를 조사해 보았습니다.
0. 객체의 상속
디자인패턴을 살펴보기 전에 객체의 상속에 대하여 알아보았습니다. 객체의 상속은 객체지향 프로그래밍에서 코드의 재활용성, 코드의 일관성 등 다양한 이유로 권장되고 사용되고 있습니다. 그 여러가지 이유 중에서 지금은 객체의 핸들링에 초점을 맞추서 설명해 보겠습니다.
위의 코드를 보면 여러 개의 아이템들이 Items라는 class를 상속받고 이를 이용하여 Items[] 리스트를 이용하여 한번에 조작 하는 것을 볼 수 있습니다.
이런 특징을 다양한 디자인 패턴에도 이용할 수 있습니다.
1. 상태 패턴
상태 패턴이란 객체의 상태에 따라 각각의 행위를 변경할 수 있게 캡슐화하는 패턴을 이야기합니다. 이를 State라는 상위 class를 상속받아 예제를 만들어 보도록 하겠습니다.
우리는 main의 코드를 통해 동적으로 상태를 바꿀 수 있을 것이라 예상할 수 있습니다. 이로써 하드코딩이 아닌 각 상태를 객체지향으로 만들 수 있습니다.
2. 널 오브젝트 패턴
우리는 가끔 null exception을 처리하지 않아서 오류를 겪고는 합니다. 또한 null처리를 하려고 하면 try, catch나 if를 이용하게 되고 코드가 길어지며 가독성이 떨어질 수 있습니다. 이때 null을 처리하는 함수를 아무일도 하지 않게 구성하여 보다 깔끔하게 처리를 할 수 있습니다.
만약 할당되지 않았거나 데이터베이스의 정보가 없다고 할지라도 main에서 실행하는 insert 함수는 null에의한 오류가 나오지 않습니다. 물론 각 객체들이 쓸데없이 커질수도 있다는 단점이 있지만 null로 인한 문제가 커질 경우에는 좋은 해결책이 될 수 있습니다.
3. 싱글톤 패턴
싱글톤은 단 하나의 인스턴스만을 생성하는 기법입니다. 특히나 Java와 같이 메모리해제가 가비지컬렉터에 의해 일어나는 언어에서 이미 사용되고 있는 인스턴스를 new를 할 때마다 새로 생성하는 문제를 해결하기에 적합합니다.
싱글톤 패턴은 이미 인스턴스가 있는지 확인 후 없으면 다시 만들고 있으면 그대로 반환하는 방법으로 쓰레드 환경에서 주의해서 사용해야 합니다.
4. 팩토리 패턴
하나의 팩토리 클래스가 모든 타입을 처리하도록 설계하는 패턴입니다.
위의 Shape 팩토리가 각각 rect, circle, triangle을 만드는 함수를 구현하고 있습니다.
5. 컴포지트 패턴
컴포지트 패턴은 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴입니다.
이 외에도 여러가지 싱글톤 패턴이 있습니다. 또한 promise 패턴처럼 특정 언어를 대상으로 한 패턴도 있습니다. 이런 패턴을 익히게 되면 다양한 문제를 쉽게 풀 수 있습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강북 윤덕진]Cross compile과 Bootloader (0) | 2014.09.15 |
---|---|
[6기 전주 황규하] Tizen Platform 분석하기 - Tizen platform 개발환경 구축하기1 (0) | 2014.09.15 |
[6기 수원 정재윤] Hardware 기초#2 _ 3D Printer의 세계page.1 (0) | 2014.09.13 |
[6기 대구 허정욱] Detours 3.0 Express #2.Class Member Hooking (0) | 2014.09.13 |
[6기 대전 민창기] Control System #2 (0) | 2014.09.13 |