프로그래밍/Design Patterns | 2021. 8. 16. 17:00
빌더 패턴 (Builder)?
UML
Product 클래스
Builder
다양한 파츠를 생성하기 위해 인터페이스를 제공.
ConcreteBuilder
제품의 각 구성품을 만드는 것에 관여한다.
Director
생성 프로세스에 관여하며, 정형화된 조립 과정으로 조립한다.
참고 사이트
[Design Pattern] 추상 팩토리 패턴 (Abstract Factory) (0) | 2021.08.15 |
---|---|
[Design Pattern] 팩토리 메소드 패턴 (Factory Method) (0) | 2021.08.14 |
프로그래밍/Design Patterns | 2021. 8. 15. 19:05
[Design Pattern] 빌더 패턴 (Builder) (0) | 2021.08.16 |
---|---|
[Design Pattern] 팩토리 메소드 패턴 (Factory Method) (0) | 2021.08.14 |
프로그래밍/Design Patterns | 2021. 8. 14. 17:27
많은 설계는 FactoryMethod를 사용하는 것으로 시작하므로 알아두어야 좋다!
예를들어 아메리카노, 라떼 커피를 제조한다고 하자.
GetName() 가상함수를 추가하여 Coffee 추상클래스를 만들었다.
SubClass인 아메리카노, 라떼에서 GetName()을 구현.
이번에도 FactoryMethod()를 가상함수로 만들었고, SubClass들에서 구현을 한다.
생성클래스답게 new로 각 클래스의 객체를 생성한다.
장점
단점
[Design Pattern] 빌더 패턴 (Builder) (0) | 2021.08.16 |
---|---|
[Design Pattern] 추상 팩토리 패턴 (Abstract Factory) (0) | 2021.08.15 |
프로그래밍/C++ | 2018. 1. 2. 15:45
explicit에 대한 이야기
Explicit란 단어의 사전적 의미는 '분명한, 명쾌한' 입니다.
단어만 봐도 느낌이 옵니다. 개발자의 의도와는 다르게 사용될 여지가 있거나, 그러면 안되는 곳에 쓰일 것 같아요.
간단한 예제입니다.
int형을 클래스 A에 대입하는 이 때 암시적 타입 변환이 이루어 집니다. 만약 생성자를 explicit으로 선언한다면
Effective C++ 책에는
필자의 경우, 암시적 타입 변환에 생성자가 사용될 여지를 남겨둘 뚜렷한 이유가 없는 한, 생성자는 explicit 선언을 우선적으로 합니다. 여러분도 주저 마시고 이런 식으로 해 보시기를 적극 추천하는 바입니다.
라고 쓰여있다.
앞으로 생성자를 만들땐 explicit을 붙이는 것을 습관화 해야겠습니다.
[C++] 스택(Stack), 선형큐(Queue) 구현하기 (0) | 2015.04.26 |
---|---|
[C++] 선행처리자에 대한 이야기( 매크로 함수 #define, const 상수, 인라인 함수 inline) (0) | 2014.07.10 |
[C++] 포인터, 값에 의한 전달, 주소에 의한 전달, 참조에 의한 전달에 대한 이야기 (0) | 2014.07.10 |
[C++] 기억클래스에 대한 이야기(자동변수 auto, 외부변수 extern , 정적변수 static, 레지스터 변수 register) (0) | 2014.07.10 |
[C++] 클래스의 설계 (0) | 2014.07.09 |
프로그래밍/자료구조 | 2015. 4. 28. 01:09
시퀀스 컨테이너 = list, vector, deque.
적은 자료를 보관.
연관 컨테이너 = map, set, hash_map, hash_set.
Key값이 중복되어도 괜찮다면, 컨테이너 앞에 'multi'를 붙인다.
multi_map, multi_set, hash_multimap, hash_multiset을 사용한다.
map, set, hash_map, hash_set 뭔 차이?
map, set = 자료를 정렬하여 저장. 따라서 데이터를 순회할때 정렬된 순서대로 순회한다.
hash_map, hash_set = 정렬 X 저장. 그래서 검색 속도가 map,set보다 빠름.
BUT!
해시 테이블은 저장한 자료가 적으면.... 메모리 낭비, 검색시 오버헤드가 생긴다.
hash_map
hash_map을 이용하여, 반복되지 않는 첫 번째 문자 찾기.
[자료구조] 자료구조 & 알고리즘에 대한 짧은 이야기 (0) | 2014.07.09 |
---|
프로그래밍/C++ | 2015. 4. 26. 15:15
[C++] explicit에 대한 이야기 (0) | 2018.01.02 |
---|---|
[C++] 선행처리자에 대한 이야기( 매크로 함수 #define, const 상수, 인라인 함수 inline) (0) | 2014.07.10 |
[C++] 포인터, 값에 의한 전달, 주소에 의한 전달, 참조에 의한 전달에 대한 이야기 (0) | 2014.07.10 |
[C++] 기억클래스에 대한 이야기(자동변수 auto, 외부변수 extern , 정적변수 static, 레지스터 변수 register) (0) | 2014.07.10 |
[C++] 클래스의 설계 (0) | 2014.07.09 |
프로그래밍/C | 2015. 4. 25. 16:15
데이터 영역(Data Area)
전역변수, static 변수.
프로그램 시작과 동시에 할당.
프로그램 종료되어야만 메모리에서 소멸.
전역변수가 데이터 영역에 올라가는 일은 main 함수의 호출보다 먼저 진행된다.
스택 영역(Stack Area)
지역변수, 매개변수.
힙 영역(Heap Area)
프로그래머가 관리하는 메모리 영역.
배열의 크기 선언을 반드시 상수로 사용해야 하는 이유
스택, 데이터 영역에 할당될 메모리의 크기는 런타임(run-time)이 아닌 컴파일되는 동안(컴파일 타임)에 결정되어야 한다.
힙에 메모리를 할당하는 것을 두고 '동적 할당(Dynamic Allocation)'이라 한다.
반대로 스택과 데이터 영역에 메모리를 할당하는것 '정적 할당(Static Allocation)이라 한다.
malloc 함수 & free 함수.
malloc 함수.
동적으로 메모리를 할당하는 함수이다. = 힙 영역에 메모리를 할당하는 함수.
할당한 메모리의 주소(첫번째 바이트의 주소)를 리턴한다.
만약에 메모리 부족으로 인해서 메모리 할당에 실패했다면, NULL 포인터가 리턴되므로, 리턴된 포인터가 NULL인지 아닌지 확인해야한다.
[C언어] strlen, strcpy, strncpy, strcat, strncat, strcmp, strncmp (0) | 2015.04.25 |
---|---|
[C언어] 표준 입 출력과 버퍼(Buffer) (0) | 2015.04.25 |
[C언어] puts,fputs, gets, fgets, (0) | 2015.04.25 |
[C언어] 포인터, const 키워드 (0) | 2015.04.23 |
[C언어] 문자열 상수, 포인터 배열 함수 (0) | 2015.04.23 |
[C언어] 재귀적 함수 호출, n!(Factorial 계산) (0) | 2015.04.22 |
[C언어] static 변수, register 변수 (0) | 2015.04.22 |
[C언어] printf, scanf, %e, %E (0) | 2015.04.22 |
[C언어] 리터럴(literal) 상수, 심볼릭(Symbolic) 상수 (0) | 2015.04.22 |
[C언어] sizeof 연산자, double형, unsigned (0) | 2015.04.22 |
프로그래밍/C | 2015. 4. 25. 03:14
1. strlen 함수
문자열의 길이를 반환해 주는 함수이다. NULL 문자는 문자열 길이에 포함되지 않는다.
2. strcpy 함수
문자열을 복사. BUT. 저장할 버퍼가 입력받은 문자열 길이보다 작으면 오버플로우 발생.
따라서 strncpy함수를 선호한다.
3. strncpy 함수
최대 길이 n을 넘지 않고 문자열을 복사한다.
strncpy로 NULL문자를 뺀 길이까지만 복사하고, 맨 뒤에 '\0'(NULL) 을 넣어준다.
5. strcmp 함수, strncmp함수
문자열의 길이를 비교하는 것 X. 문자열 내용 자체를 비교 O.
위에 예제는 str1 == str2 (배열 이름 = 포인터) 이므로 포인터를 비교한 것임.
strcmp 함수예제
strncmp함수는 처음부터 n까지 비교하는 함수이다.
[C언어] 데이터 영역(Data Area), 스택 영역(Stack Area), 힙 영역(Heap Area) (0) | 2015.04.25 |
---|---|
[C언어] 표준 입 출력과 버퍼(Buffer) (0) | 2015.04.25 |
[C언어] puts,fputs, gets, fgets, (0) | 2015.04.25 |
[C언어] 포인터, const 키워드 (0) | 2015.04.23 |
[C언어] 문자열 상수, 포인터 배열 함수 (0) | 2015.04.23 |
[C언어] 재귀적 함수 호출, n!(Factorial 계산) (0) | 2015.04.22 |
[C언어] static 변수, register 변수 (0) | 2015.04.22 |
[C언어] printf, scanf, %e, %E (0) | 2015.04.22 |
[C언어] 리터럴(literal) 상수, 심볼릭(Symbolic) 상수 (0) | 2015.04.22 |
[C언어] sizeof 연산자, double형, unsigned (0) | 2015.04.22 |
프로그래밍/C | 2015. 4. 25. 02:54
표준 입 출력 함수를 사용하는 경우에는 버퍼라는 것을 제공받게 된다는 특징이 있다.
버퍼 = 여분의 임시 메모리 공간.
키보드를 통해서 입력하는 데이터는 실행중인 프로그램으로 바로 읽혀지는 것이 아니라, 일단은 입력 버퍼라는 곳에 저장이 된다는 것을 알 수 있다.
그리고 나서 입력 버퍼에 존재하는 데이터가 프로그램으로 이동하는 것이다.
프로그램상에서 printf와 같은 함수 호출을 통해서 모니터에 데이터를 출력하려는 경우에도 바로 출력이 이루어지는 것이 아니라, 일단 출력 버퍼라는 곳에 저장이 되었다가 출력 스트림을 통해서 모니터로 전송된다.
버퍼링(Bufferint)을 하는 이유는?
버퍼링이란 데이터를 전송하는데 있어서 목적지로 바로 보내는 것이 아니라, 중간에 버퍼(여분의 임시 저장소)를 둬서 전송하고자 하는 데이터를 임시 저장해 두는 것을 말한다.
임시 저장된 데이터가 어느정도 채워지면 한꺼번에 전송한다. -> 성능 향상을 위해서임.
fflush 함수 ?
버퍼를 비우는 작업을 하는 함수.
fflush 함수의 인자로 전달되는 스트림의 버퍼를 비워버린다.
stdin 과 같은 입력 스트림이 전달되면 입력 버퍼 안에 존재하는 데이터들은 모두 지워진다.
stdout과 같은 출력 스트림이 전달되면 출력 버퍼 안에 존재하는 데이터들은 즉시 출력된다.
[C언어] 데이터 영역(Data Area), 스택 영역(Stack Area), 힙 영역(Heap Area) (0) | 2015.04.25 |
---|---|
[C언어] strlen, strcpy, strncpy, strcat, strncat, strcmp, strncmp (0) | 2015.04.25 |
[C언어] puts,fputs, gets, fgets, (0) | 2015.04.25 |
[C언어] 포인터, const 키워드 (0) | 2015.04.23 |
[C언어] 문자열 상수, 포인터 배열 함수 (0) | 2015.04.23 |
[C언어] 재귀적 함수 호출, n!(Factorial 계산) (0) | 2015.04.22 |
[C언어] static 변수, register 변수 (0) | 2015.04.22 |
[C언어] printf, scanf, %e, %E (0) | 2015.04.22 |
[C언어] 리터럴(literal) 상수, 심볼릭(Symbolic) 상수 (0) | 2015.04.22 |
[C언어] sizeof 연산자, double형, unsigned (0) | 2015.04.22 |
Recent Comments