일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- 표준 입출력
- 강의
- 원격 제어 프로그램
- 소켓 통신
- 표준 라이브러리 함수
- 파이썬
- 독립기념관
- 실습
- C++
- 실습으로 다지는 c#
- 프로젝트
- 산책하기 좋은 곳
- c언어
- 클래스 다이어그램
- 유튜브 동영상 강의
- 캡슐화
- 언제나 휴일
- 추천
- Windows Forms
- 알고리즘
- 언제나휴일
- 충남 천안
- 무료 동영상 강의
- 졸업 작품 소재
- 소스 코드
- 동영상
- 안드로이드 앱 개발
- c#
- 동영상 강의
- 네트워크 프로그래밍
- Today
- Total
목록C & C++ (217)
프로그래밍 언어 및 기술 [언제나휴일]
안녕하세요. 언제나휴일의 언휴예요.조건문 if else [C언어] C언어에서는 프로그램의 수행 순서를 제어하는 제어문을 제공하고 있어요. 조건에 따라 수행을 결정하는 조건문, 값에 따라 수행할 구문을 선택하는 선택문, 특정 조건이 참일 때 반복하는 반복문과 원하는 영역으로 점핑하는 분기문이 있어요. 프로그래밍 언어에서 제어문은 문법을 이해하는 것은 어렵지 않아요.하지만 원하는 문제를 해결하기 위해 어떻게 제어문을 표현해야 할 지 판단하는 것은 많은 경험을 통해 얻어나가야 합니다.프로그래밍 언어를 학습하는 단계에서 제어문을 이용하여 문제를 해결하는 것이 어렵다고 두려워하지 마세요.경험을 통해 극복할 수 있으며 조금씩 해결할 때마다 희열을 느낄 수도 있을 거예요.C언어의 제어문 중에 조건문을 먼저 살펴봅시다..
안녕하세요. 언제나 휴일의 언휴예요.대입 연산의 왼쪽(좌항)에 오는 표현을 l-value [C언어]대입 연산자와 l-value복합 대입 연산자1. 대입 연산자와 l-value프로그래밍에서 변수에 원하는 값을 설정할 때 대입 연산자를 사용하죠.당연히 대입 연산자 왼쪽(좌항)에는 상수 표현은 올 수 없어요.정수형 변수 i가 있을 때 i+3=7; 표현은 문법적 오류가 발생해요.i+3의 연산 결과는 상수이며 l-value로 사용할 수 없어요.#include int main(){ int i = 0;//초기화 i = 7;//변수 i에 7을 설정 i + 3 = 7;//i+3에 7을 설정. i+3의 연산 결과는 상수 return 0;} 위 코드를 빌드하였을 때 나오는 결과를 보면 l-value로 ..

안녕하세요. 언제나 휴일에 언휴예요.비트 자리 이동 연산, 쉬프트 연산 [C언어] 이번 강의는 비트 자리 이동 연산, 쉬프트 연산을 알아볼게요.1. 왼쪽 쉬프트 >1. 왼쪽 쉬프트 왼쪽 쉬프트 연산은 1자리를 이동할 때 2로 곱한 결과와 같습니다. 다음의 소스 코드는 부호 없는 정수 3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.그리고 부호 있는 정수 -3을 4자리 왼쪽으로 자리 이동 시키는 소스 코드입니다.#include int main(){ unsigned u1 = 3, u2; u2 = u1 실행 결과는 다음과 같습니다.16진수: 3 3010진수: 3 4816진수: FFFFFFFD FFFFFFD010진수: -3 -48결과를 보면 부호 없는 정수는 원래 값 3에 2의 4승인 16..
안녕하세요. 언제나 휴일에 언휴예요.mask를 이용한 암호화 및 이진수 출력[C언어]이번 강의는 비트 연산을 이용한 mask입니다.^ mask를 이용하여 암호화하는 것과 & mask를 이용하여 이진수를 출력하는 실습이예요.1.^mask를 이용한 암호화2.&mask를 이용한 이진수 출력1. ^mask를 이용한 암호화비트 연산 이용하면 간단한 대칭형 암호화를 할 수 있어요.대칭형 암호화는 암호화할 때와 복호화할 때 같은 키를 이용하는 암호화를 말합니다.다음의 코드는 ^연산을 이용하여 평문을 암호화하고 복호화하는 예제입니다.#include int main(){ int pd = 0x12345678; int key = 0x2345873a; int sec = pd ^ key; int data ..

안녕하세요. 언제나 휴일에 언휴예요.비트 연산 & | ^ ~ [C언어] 이번 강의는 비트 연산입니다. 비트 연산은 같은 자리의 비트끼리 논리 연산을 수행합니다.그리고 C언어의 비트 연산의 피 연산자는 정수 형식이예요.1. 비트 연산 & | ^ ~2. 비트 and mask1. 비트 연산 & | ^ ~예를 들어 정수 6과 5의 비트 연산을 알아봅시다.정수 6은 이진수로 0000 0000 0000 0110이고 5는 0000 0000 0000 0101 입니다.만약 비트&(and)를 수행하면 다음 그림처럼 끝에서 세 번째 자리만 모두 1입니다. 이진수로 0000 0000 0000 0100입니다.따라서 6&5의 결과는 4입니다.만약 비트|(or)를 수행하면 다음 그림처럼 끝에서 세 자리는 둘 중 하나는 1입니다.이..
안녕하세요. 언제나 휴일에 언휴예요.비교 연산 [C언어] 이번 강의는 비교 연산입니다.1. 비교 연산2. 비교 연산에서 주의할 점1. 비교 연산비교 연산은 연산 기호 및 하는 일이 직관적입니다. 기본적인 비교 연산은 어려움이 없다는 것이죠.#include //표준 입출력 헤더int main(){ printf("%d\n", 1 2); printf("%d\n", 1 >= 2); return 0;}비교 연산의 연산 결과도 참이면 1, 거짓이면 0입니다.1101002. 비교 연산에서 주의할 점비교 연산을 이용하여 세 가지 이상의 값을 비교할 때는 논리 연산을 이용하세요. 수학에서 2C언어에서는 연산을 하나씩 수행합니다.22결국 0#include //표준 입출력 헤더int main(){ ..

안녕하세요. 언제나 휴일에 언휴예요.논리 형식과 논리 연산[C언어] 이번 강의는 논리 형식과 논리 연산을 다룰 거예요.1. 논리 형식2. 논리 값, 참과 거짓3. 논리부정(NOT) 연산자는 !4. 논리곱(AND) 연산자는 &&, 논리합(OR) 연산자는 ||5. 논리 연산에서 주의할 점 16. 논리 연산에서 주의할 점 21. 논리 형식C언어에는 논리 형식을 제공하지 않아요. 대신 기본 형식(char, short, int, long, float, double 등)과 메모리 주소처럼 수로 나타낼 수 있는 것은 모두 논리 형식으로 사용할 수 있습니다.이번 강의를 통해 피 연산자로 다양한 형식을 사용할 수 있다는 것을 느낄 수 있었으면 합니다.2. 논리 값, 참과 거짓C언어는 논리 형식을 제공하지 않습니다.논리..
안녕하세요. 언제나 휴일에 언휴예요.나머지 연산을 사용하면 편한 곳 [C언어 동영상] 이번에는 나머지 연산을 사용하여 문제를 해결하는 대표적인 예를 알아볼게요. 프로그램을 작성하다보면 0123401234012… 처럼 특정 범위 내의 수를 순환하며 사용할 때가 발생합니다.원형 큐에서 front와 rear를 이동시킬 때는 대표적인 예로 들 수 있어요.원형 큐다음처럼 코드를 작성하여 실행시켜 보면 어떻게 동작하는지 느낌이 오실 거예요./* https://ehpub.co.kr 언제나 C언어 나머지 연산, 이럴 때 사용하자. 0123401234012...*/#include //표준 라이브러리 헤더#include //표준 입출력 헤더int main(){ int i = 0; printf..
안녕하세요. 언제나 휴일에 언휴예요. 산술 연산과 overflow [C언어 강의 동영상] 이번 강의는 산술 연산과 overflow 현상을 알아볼게요.1. 산술 연산2. overflow1. 산술 연산이번 강의에서 다루는 산술 연산은 사칙 연산과 나머지 연산입니다. 연산 기호는 +, -, *, /, %입니다.사칙 연산 중에 더하기, 빼기, 곱하기는 우리가 생각하는 것과 전혀 차이가 없습니다.나누기 연산은 사람에 따라 생각이 다소 차이가 있을 수 있어요.피연산자가 정수일 때 나누기 연산과 나머지 연산을 제공하고 있습니다.나누기 연산의 결과는 몫입니다. 근사값(반올림 값)이 아닌 몫입니다.코드로 확인하는 것이 제일 정확합니다.#include //표준 입출력 헤더int main(){ //+, -, *, /,..

안녕하세요. 언제나 휴일에 언휴예요. 이번 글은 강의는 아닙니다. 이 내용을 모르더라도 C언어를 익히는 데 영향이 없습니다.실수 형식의 메모리 구조C언어에서 실수는 메모리에 2진 체계에 의해 부호부, 지수부, 가수부로 표현합니다.double 형식은 부호부(1), 지수부(11), 가수부(52)로 구성합니다.float 형식은 부호부(1), 지수부(8), 가수부(23)로 구성합니다.실수를 메모리에 표현하는 방법은 별도의 게시글로 제공하고 있으니 참고하세요.실수를 메모리에 표현하는 방법 알아보기FLT_MIN, FLT_MAX실수 형식의 양수는 FLT_MIN~FLT_MAX까지 표현 가능한 것으로 알고 있습니다.float.h에 이 값을 약속하고 있죠. 그런데 이러한 값이 메모리에 어떻게 표현하는지 아시나요?FLT_M..
IEEE754 4바이트 실수 메모리 표현0에서 1 사이에도 실수는 셀 수 없다는 것을 알고 계시죠. 결국 메모리에 실수를 표현하다보면 오차가 발생할 수 있다는 것을 알아야 한다는 것이죠. 이 또한 알고 계실거예요. 그렇다면 다음의 실행 결과는 어떻게 나올까요?printf(“%.20f\n”,0.1+0.2);결과를 보고 “이건 뭐지?” 라는 생각을 하신 분들도 있을 거예요. 실수 표현에 오차가 있다고 하더라도 이런 정도에서 오차가 발생할 것이라 생각하기 쉽지 않죠. 사실 우리는 10진수로 사고하지만 컴퓨터에 데이터를 표현할 때는 2진수 체계를 사용합니다. 이 또한 아는 사실이겠지만 여전히 우리의 사고는 10진수 체계 속에 있다보니 오판할 때가 종종 있어요. IEEE754 표준 방식으로 4바이트 실수를 표현하..
안녕하세요. 언제나 휴일에 언휴예요.실수 형식 double, float 표현과 출력 [C언어 동영상 강의] 이번 강의에서는 실수 형식 강의예요. 실수 형식을 표현하는 방법과 출력하는 방법을 알아봅시다.1. 실수 형식의 메모리 크기2. 실수 리터럴 표현3. 실수 출력 - 소숫점 이하 출력할 자리 표현4. 실수 출력 포멧 %f %g %e5. 실수 사용에서 주의할 점1. 실수 형식의 메모리 크기먼저 sizeof로 실수 형식의 메모리 크기를 알아보아요.#include //표준 입출력 헤더int main(void){ printf("sizeof(double):%d bytes, sizeof(float):%d bytes\n", sizeof(double),sizeof(float)); retur..
안녕하세요. 언제나 휴일에 언휴예요. 확장 문자 형식 wchar_t와 한글 문자 [C언어 동영상 강의]이번 강의는 확장 문자 형식 wchar_t와 한글 문자 표현을 다룰거예요.1. char 형식의 한계2. wchar_t 형식3. wchar_t 형식 크기 및 출력 함수1. char 형식의 한계이전 강의에서 char 형식은 ASCII 코드를 표현할 수 있는 문자 형식이라고 했었죠. 영문 알파벳이 아닌 한글처럼 ASCII 코드가 아닌 문자는 char 형식으로 표현하는데 한계가 있어요.한글 문자 하나를 char 형식으로 다루지 못하는 것이죠.#include //표준 입출력 헤더int main(){ char ch = 'ㄱ'; printf("%c\n", ch); return 0;}위 코드의 ..

안녕하세요. 언제나 휴일에 언휴예요. 이번 강의는 문자 형식 char와 ASCII 코드에 관해 다루기로 할게요.1. ASCII 코드와 char 형식 크기2. 숫자 문자, 소문자, 대문자 ASCII 코드 값 확인3. 문자 리터럴4. char 형식의 한계5. ASCII 코드1. ASCII 코드와 char 형식 크기 C언어는 미국에서 만들었죠. C언어의 문자 표현은 미국 표준 문자인 ASCII 코드를 표현하도록 만들었어요.ASCII , American Standard Code for Information Interchange C언어에서 문자를 표현할 때 char 형식을 사용합니다. char 형식은 미국의 표준 문자인 ASCII 코드를 표현할 수 있는 크기로 설계한 거예요. 영문 알파벳 소문자, 대문자, 숫자..
안녕하세요. 언제나 휴일에 언휴예요. 정수 형식과 표현 범위(char, short, int, long,...)[C언어 동영상 강의]이번 강의에서는 정수 형식과 표현 범위를 알아볼게요.== 다루는 내용1. 정수 형식의 종류2. 정수 형식의 메모리 크기3. 정수 형식의 표현 범위정수 형식의 종류C언어에서 제공하는 정수 형식은 다음처럼 여러 가지 정수 형식을 제공합니다.char, short, int, long, long longC언어에서 제공하는 정수 형식은 음수를 포함하지 않는 정수 형식도 제공합니다. unsigned 키워드가 붙는 형식은 모두 음수를 포함하지 않는 정수 형식입니다.unsigned char, unsigned short, unsigned int, unsigned long, …형식을 unsign..
안녕하세요. 언제나 휴일에 언휴예요. 정수 표현 및 출력 - 10진수, 8진수, 16진수 [C언어] 동영상 강의 이번 강의에서는 정수 표현과 출력을 알아봅시다.== 다루는 내용1. 정수 표현(10진수, 8진수, 16진수)2. 정수 출력 (10진수, 8진수, 16진수)3. 왜 8진수와 16진수 표현과 출력을 제공할까?1. 정수 표현(10진수, 8진수, 16진수)C언어에서 일반적인 수 표현은 당연히 10진수입니다. 8진수를 표현하려면 표현 앞에 숫자 0을 추가하세요.16진수를 표현하려면 표현 앞에 숫자 0과 알파벳 x를 추가하세요.#include //표준 라이브러리 헤더 파일#include //표준 입출력 헤더 파일int main()//프로그램 진입점{ //10진수 출력 printf("%d..
안녕하세요. 언제나 휴일입니다.자신의 정보 출력하기, puts, printf 함수 동영상 강의 첫 번째 프로그램은 자신의 정보를 콘솔 화면에 출력하는 것으로 할게요.== 다루는 내용 1. main - 프로그램의 진입점 함수2. #include //표준 입출력 헤더3. puts 함수 - 라인 단위로 출력4. printf 함수 - 개발자가 원하는 포멧에 맞게 출력1. main – 프로그램의 진입점 함수C언어로 작성한 콘솔 응용은 언제나 main함수부터 시작합니다.이러한 이유로 main 함수를 프로그램 진입점이라고 말합니다.함수 는 특정 기능을 수행할 수 있게 작성한 코드를 말합니다.이번 강의에서 출력에 사용할 putchar와 printf도 함수입니다.다음은 함수 구조입니다.자연스럽게 다룰 내용이므로 한..

C언어 시작안녕하세요. 언제나 휴일의 언휴입니다. 최근에 Python, Google Go, R언어 등 새롭게 뜨고 있죠. 그럼에도 C언어는 50년 가까이 자기 자리를 굳건히 하고 있네요.중학생이 facebook의 프로그래밍 관련 학습 그룹에 C언어 관련 학습 질문이 올라 온 것이 있었습니다. 자신은 카이스트 IT 교육센터에서 C언어 특강을 받고 있는데 어떻게 학습해 나가면 좋은지 질문하더군요.그런데 어느 한 분께서 왜 Python으로 가시지 C언어를 선택했냐고 답변을 올리더군요. 지금이라도 Python을 선택하라고 조언을 하는 것을 보고 깜짝 놀랐습니다. 아마도 그 분은 Python의 강력함에 빠지신 것 같아요. Python으로 프로그래밍 할 때 이미 제작한 라이브러리를 이용하여 필요한 것을 쉽게 만..

[C++] 최종 실습 – 클래스 추가하기 이제 클래스를 추가하고 클래스 사이의 관계에 따라 헤더 파일을 포함합시다. 여기에서는 헤더 파일에 포함문을 작성하는 것 까지만 할 거예요. 클래스 다이어그램을 보면서 클래스를 추가하세요. 현재 EhNara, Place, Downtown, School, Village 클래스를 추가한 상태죠. 앞에서 작성한 확장 가능한 순차 배열인 SeqArray 템플릿 클래스를 추가하세요. 그리고 상속과 다형성 최종 실습에서 작성한 프로그램에서 Student, MStudent, SStudent, PStudent 클래스를 이용할게요. 소스 파일과 헤더 파일을 복사하여 프로젝트에 추가하세요. 이 외에 Man, IStudy, IRelax, IPlay를 추가하세요. 그리고 이를 기반으로 ..
[C++] 최종 실습 – 확장 가능한 순차 배열 EhNara 프로그램에서는 EhNara 클래스, 학생 공장에서 학생 개체를 보관합니다. 그리고 장소에서는 사람 개체를 보관합니다. 여기에서는 순차적으로 보관할 수 있는 확장 가능한 배열을 템플릿으로 정의합시다. 확장 가능한 배열은 저장소가 꽉 차면 내부에서 저장소의 크기를 늘려 주어 사용하는 개발자가 저장소의 크기에 신경을 쓰지 않고 사용할 수 있는 동적 배열입니다. 여기에서는 순차 보관하는 기능과, 특정 인덱스의 요소를 제거, 특정 알고리즘이 참인 인덱스를 구하는 등의 기능을 제공하는 확장 가능한 배열을 만듭시다. template class SeqArray { 먼저 저장소와 저장소의 크기, 보관 개수를 기억하고 있어야 합니다. data *base; //저..

[C++] 최종 실습 – 프로토 타이핑 이번에는 앞에서 작성한 EhNara 뼈대에 요구 분석 및 정의에서 작성한 유즈케이스 다이어그램을 보며 프로토 타이핑을 작성합시다. GUI(Graphic User Interface) 프로그램에서는 이해관계자의 요구 사항을 제대로 파악한 것인지 확인하기 위해 프로토 타이핑을 작성하곤 합니다. 이해관계자의 요구 사항은 고정적인 것이 아니라 시시 때때로 변할 수 있는데 자주 변하는 부분이 대부분 User Interface에 관한 것이 많습니다. 즉 내부적인 것 보다 외형적인 부분에서 요구 사항이 자주 바뀔 수 있습니다. 이러한 것을 개발 앞 단계에 배치하여 이해관계자의 요구 사항을 반영하기 위해 프로토 타이핑을 합니다. EhNara 프로그램은 GUI 프로그램이 아니라서 이..
[C++] 최종 실습 – 기본 뼈대 이번 실습에서는 유즈케이스 별로 시퀀스 다이어그램 설계하고 구현하는 것을 반복할 것입니다. 먼저 이제까지 작업한 것을 구현하고 유즈케이스 별로 시퀀스 다이어그램 작성 맟 구현으로 들어갈게요. EhNara의 뼈대를 만들고 난 후에 기본적인 사용자와 상호 작용의 프로토 타이핑을 할게요. 프로젝트에 Program.cpp 파일과 EhNara 클래스를 추가하세요. EhNara 형식 개체는 프로그램에 유일하며 대부분의 콘솔 응용 프로그램은 프로그램 초기화, 사용자와 상호 작용, 해제화 순으로 진행합니다. class EhNara { 단일체를 표현하기 위해 생성자와 소멸자의 접근 지정은 private으로 설정합니다. 대신 유일한 단일개체를 정적 멤버로 선언할게요. static EhN..

[C++] 최종 실습 – 설계(클래스 다이어그램) 설계 단계에서는 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의하는 것과 유즈케이스 별로 수행 흐름을 정의하는 작업이 있습니다. 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의한 것은 클래스 다이어그램으로 표현합니다. 유즈케이스 별로 수행 흐름을 정의하는 것은 여러 가지 다이어그램으로 표현할 수 있는데 여기에서는 시퀀스 다이어그램으로 작성할게요. 먼저 프로그램에 정의할 형식을 정하고 이들 사이에 관계를 정의합시다. 제일 먼저 이 에이치 나라와 학생 공장이 있죠. 그리고 학교, 주거지, 다운타운이 있죠. 그런데 이 세 개의 형식은 학생이 올 수 있고 초점을 받아 사용자와 상호작용을 수행하는 등의 공통점이 있습니다. 논리적으로 보았을 때도 ..

[C++] 최종 실습 – 요구 분석 및 정의 요구 분석 및 정의 단계에서는 이해관계자를 파악하고 이해관계자 별로 프로젝트에 요구하는 사항을 조사하는 것에서 출발합니다. 이번 실습에서의 이해관계자는 프로그램 사용자와 프로그램 개발자 정도로 생각할 수 있습니다. 시나리오를 제외한 특별한 요구 사항은 없으니 시나리오를 바탕으로 유즈케이스 다이어그램을 작성하는 것부터 시작합시다. 유즈케이스 다이어그램을 작성할 때는 액터를 조사하고 액터 별로 유즈케이스를 정의한 후에 관계를 정의합니다. 액터는 개발하는 시스템 주변의 모든 것을 말합니다. 시스템을 사용하는 사용자 뿐만 아니라 시스템을 사용하는 프로그램이나 시스템이 사용하는 외부 시스템도 액터입니다. 이 에이치 프로그램은 최종 사용자 외에 다른 액터가 존재하지 않습..
[C++] 최종 실습 – 개발 공정 및 시나리오 전산 기술은 하루가 다르게 발전하고 새로운 기술이 나오고 있습니다. 그리고 프로젝트의 규모가 점점 늘어나고 있으며 다른 산업 분야와 접목하는 형태로 발전하고 있습니다. 프로그램의 규모가 커지고 많은 인력이 필요한 형태로 변하면서 효과적인 개발 공정과 많은 이해 관계자에게 프로그램의 구조를 설명하고 개발자 사이에 의사 소통할 수 있는 방법들이 생기고 있습니다. 여기에서는 여러 가지 개발 방법론 중에 많은 이들이 사용하는 CBD 개발 방법론을 적용해서 마지막 실습을 진행할게요. 일반적인 CBD 개발 방법론에서는 요구 분석 및 정의 단계, 아키텍쳐 단계, 설계 단계, 구현 단계, 배포 단계로 나누고 있습니다. 이 중에 아키텍쳐 단계는 프로그램을 컴포넌트 형태로 ..

[C++] 실현(REALIZATION) 관계 실현 관계는 기능 구현을 약속한 형식과 이를 구체적으로 구현한 형식 사이에 관계입니다. 기능 구현을 약속한 형식을 인터페이스라고 부릅니다. 따라서 실현 관계는 인터페이스 형식과 약속한 기능을 구체적으로 구현한 형식 사이의 관계입니다. CPP에서는 이 둘 사이의 관계는 파생 문법을 사용합니다. 이에 관한 사항은 이미 앞에서 인터페이스를 소개하면서 다룬 내용입니다. #include using namespace std; #define interface struct interface IStudy { virtual void Study()=0; }; class Student : public IStudy { public: void Study() { cout

[C++] 의존(DEPENDENCY) 관계 의존 관계는 다른 개체의 변화가 발생했을 때 자신에 영향을 받는 개체 사이의 관계입니다. 그리고 특정 개체의 생성을 담당할 때도 의존 관계로 표현합니다. GUI(Graphic User Interface) 프로그램에서 특정 데이터의 정보를 화면에 표시하는 컨트롤과 데이터 사이에는 의존 관계로 표현할 수 있습니다. UI 컨트롤을 통해 사용자가 개체의 속성을 입력하면 의존 관계에 있는 개체의 속성을 변경해야겠죠. 혹은 개체의 속성이 변하면 UI 컨트롤을 통해 변경한 정보를 사용자에 알려주어야 할 것입니다. 이 책에서는 GUI를 다루고 있지 않아 이와 같은 의존 관계는 표현하지 않을 거예요. 소프트웨어 설계에 관한 많은 레퍼런스에서는 UI 컨트롤과 개체 사이의 의존 관..

[C++] 연관(ASSOCIATION) 관계 연관 관계는 명령 개체와 피 명령 개체가 명확하지 않은 관계입니다. 프로그램에서는 연관 관계로 표현하지 말고 직접 연관 관계로 표현하는 것이 안전합니다. 연관 관계는 약사와 의사처럼 “약사와 의사는 환자 치료에 연관이 있다.”와 같이 수평적인 관계입니다. 의사는 환자 치료를 위해 어떠한 약을 처방받아 먹고 있는지 알 수 있어야 합니다. 또한 약사는 약을 조재하기 위해서는 의사의 처방이 필요합니다. 그런데 이와 같은 관계에서 프로그램을 잘못 작성하여 버그가 날 위험이 많습니다. 예를 들어 의사의 “치료하다” 기능에서 약사의 “조재하다”를 호출하게 구현하고 약사의 “조재하다” 기능에서 의사의 “치료하다”를 호출한다면 스택 오버 플로우가 발생할 것입니다. 물론 주의..

[C++] 직접 연관(DIRECTED ASSOCIATION) 관계 직접 연관 관계는 프로그램에서 가장 흔하게 볼 수 있는 관계로 명령을 내리는 개체와 명령을 받아 수행하는 개체의 관계입니다. “고용자는 피 고용자에게 일을 시킬 수 있다.” 처럼 프로그램 세계에서는 매우 자연스러운 관계입니다. 목적 집단에서 목적을 달성하기 위해 상하 관계가 존재하는 것처럼 프로그램도 특정 목적을 수행하기 위한 코드 집합이어서 직접 연관 관계가 필요합니다. 특히 직접 연관 관계는 집합 관계나 구성 관계와 혼합 형태일 때도 많습니다. 예를 들어 회사 내부에 사원들이 있고 회사에서 특정 사원에게 일을 시킨다면 회사와 사원은 집합 관계이면서 직접 연관 관계입니다. 다음은 Company와 Worker 사이에 직접 연관 관계와 집합..

[C++] 구성(COMPOSITION) 관계 구성 관계는 소유 개체와 피 소유 개체 사이의 관계입니다. 이러한 관계는 집합 관계도 마찬가지입니다. 두 가지 관계 모두 “가지다.”로 표현할 수 있으며 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고 말합니다. 집합 관계는 소유 개체와 피 소유 개체의 생성과 소멸은 독립적으로 진행합니다. 필통과 연필의 관계처럼 개체의 생성과 소멸은 독립적인 특징을 갖습니다. 구성 관계는 소유 개체를 생성할 때 피 소유 개체를 생성하고 소유 개체를 소멸할 때 피 소유 개체를 함께 소멸합니다. 사람과 눈의 관계처럼 소유 개체를 생성할 때 피 소유 개체도 함께 생성하고 소유 개체를 소멸할 때 피 소유 개체도 함께 소멸합니다. CPP에서 구성 관계를 구현하는 방법은 ..