분류 전체보기 254

첫 번째 응용, Form 배경색 Toggle [WinForm with C#]

안녕하세요. 언제나 휴일에 언휴예요.첫 번째 응용, Form 배경색 Toggle [WinForm with C#]Windows Forms 프로그래밍 실습 강의 “WinForm with C#”을 시작할게요.첫 번째 실습은 Form 배경색을 Toggle하는 응용입니다.1. Windows Forms 응용 만들기2. Form 속성 설정하기 Form의 Text 속성3. Form 이벤트 핸들러 만들기 Form의 Load 이벤트 핸들러 Form의 MouseClick 이벤트 핸들러4. 소스 코드 구현 이벤트 핸들러 구현 배경 색 Toggle 변경 메서드 구현1. Windows Forms 응용 만들기첫 번째 실습이죠. Visual Studio를 실행한 이후에 만드는 과정을 소개할게요.이 강의에서 사용할 ..

[파이썬 입문] 5. 모듈 – 01) 모듈 개요와 random 모듈

[파이썬 입문] 모듈 개요와 random 모듈파이썬에서 모듈은 관련있는 것을 하나의 파이썬 소스 파일에 작성한 것입니다.이렇게 정의한 모듈은 import 문법을 이용하여 다른 파이썬 소스에서 사용할 수 있습니다.예를 들어 mylib.py 파일에 다음과 같은 내용이 있다고 가정할게요.[In]#mylib.pydef foo(): print("foo")만약 다른 곳에서 import 구문 없이 mylib에 정의한 foo 함수를 사용하려고 하면 NameError가 발생합니다.[In]foo()[out]---------------------------------------------------------------------------NameError Trac..

[파이썬 입문] 4. 함수 – 3) 람다와 콜백 등

[파이썬 입문] 함수 람다와 콜백람다람다는 간단한 알고리즘 코드 블록입니다.lambda 입력인자목록: 수행코드함수는 알고리즘 코드 블록에 이름(함수명)을 명명하여 호출하여 사용할 수 있게 만든 재사용성 높은 코드입니다.반면 람다는 이름을 명명하지 않은 알고리즘 코드로 간단하게 알고리즘을 표현할 수 있다는 장점을 갖습니다.다음은 입력 인자로 전달받은 값에 1을 더한 값을 반환하는 함수를 정의하고 호출한 코드입니다.[In]def add_one(x): return x+1print(add_one(1))[out]2이를 람다로 표현한다면 다음처럼 표현할 수 있어요.[In]fun = lambda x: x+1print(print(fun(1))[out]2콜백콜백은 호출 방향이 반대 방향이라는 의미입니다.사용자 정의 코..

[파이썬 입문] 4. 함수 – 2) 내장 함수

[파이썬 입문] 4. 함수 – 내장 함수타입 관련이미 앞에서 형식을 변환(CAST 연산)할 때 형식 이름을 함수처럼 사용했었죠.[In]num = int(input("정수:"))print(num)[out]정수:123123여기에서는 타입 관련 내장 함수 type, isinstance를 소개할게요.type은 특정 값이나 변수가 참조하는 것이 어떤 자료형인지 알고 싶을 때 사용합니다.데이터 분석이나 머신 러닝 등의 작업에서 사용할 데이터의 특정 필드 값이 “1234”처럼 숫자처럼 보이는 문장열일 때가 상당히 많습니다. 이럴 때 합계를 확인하거나 산술 연산을 하면 엉뚱한 결과를 도출할 수 있겠죠.이 때 자료형을 확인한 후 적절하게 코드를 수정할 필요가 있어요.다음은 특정 값이 어떤 자료형인지 확인하는 코드입니다...

[파이썬 입문] 4. 함수 – 1) 함수 개요

[파이썬 입문] 4. 함수함수 기본 구조함수는 자주 사용하는 기능을 정의하여 필요할 때 호출하여 사용하는 핵심 문법입니다. 함수를 만들 때는 def 키워드로 시작하여 함수명과 입력 매개변수 목록 및 수행할 구문을 정의합니다.def 함수명([입력 매개변수 목록]):    수행할 일다음은 두 개의 인자를 전달받아 더한 값을 반환하는 함수를 정의한 코드입니다.[In]def addxy(x,y): return x+y이렇게 정의한 함수는 함수 호출을 통해 사용할 수 있어요.함수 호출할 때는 함수명과 입력 인자를 전달합니다.함수명([입력 인자 목록])다음은 addxy 함수를 호출하여 사용하는 코드입니다.[In]print(addxy(2,3))print(addxy(1,3))print(addxy(2,5))[out]547..

[파이썬 입문] 3. 제어문과 컬렉션 – 8) dictionary와 set

[파이썬 입문] 3. 제어문과 컬렉션 – dictionary와 setdictionarydictionary는 키와 값을 보관하는 컬렉션입니다.영어사전에 단어와 뜻이 있는 것처럼 dictonary에는 키와 값이 있습니다.dictionary는 중괄호에 아이템을 열거하는데 키와 값은 콜론으로 구분합니다.변수 = {키:값, 키:값, 키:값, …}다음은 정수를 키, 문자열을 값으로 하는 사전을 표현한 것입니다.[In]num_dic = {1:"One",2:"Two",3:"Three" }print(num_dic)[Out]{1: 'One', 2: 'Two', 3: 'Three'}dictionary에 인덱스 연산에 키를 넣으면 값을 참조할 수 있습니다.[In]print(num_dic[1])[Out]Onedictionary..

[파이썬 입문] 3. 제어문과 컬렉션 – 7) 리스트 컴프리헨션

[파이썬 입문] 리스트 컴프리헨션for문 이용 리스트 컴프리헨션은 반복 혹은 특정 조건의 요소들로 새 리스트를 만드는 방법입니다.이해를 위해 리스트 컴프리헨션을 사용하지 않고 새 리스트를 만드는 예제를 먼저 보여드릴게요.다음은 1부터 20까지 3간격의 요소를 리스트에 순차 보관하는 코드입니다.[In]ls = []for x in range(1,20,3): ls.append(x)print(ls)[Out][1, 4, 7, 10, 13, 16, 19]리스트 컴프리헨션으로 표현하면 다음처럼 표현할 수 있어요.변수 = [표현 for 변수 in 컬렉션][In]ls = [x for x in range(1,20,3)]print(ls)[Out][1, 4, 7, 10, 13, 16, 19]for문 if 사용 이번에는 fo..

[파이썬 입문] 3. 제어문과 컬렉션 – 6) 리스트 기능2(연산 sort reverse copy index)

[파이썬 입문] 리스트 기능 (연산 sort reverse copy index)연산파이썬의 리스트는 +와 * 연산을 제공합니다.+ 연산 결과는 두 개의 리스트의 요소를 병합한 리스트입니다.[In]ls1 = [1,2,3]ls2 = [4,5,6]ls3 = ls1 + ls2print(ls3)[Out][1, 2, 3, 4, 5, 6]*수학의 행렬끼리의 더하기 연산은 numpy 모듈의 array에서 제공합니다. *리스트와 리스트의 곱하기 연산은 제공하지 않습니다.[In]ls4 = ls1 * ls2print(ls4)[Out]TypeError Traceback (most recent call last) in ()----> 1 ls4 = ls1 * ls2 ..

[파이썬 입문] 3. 제어문과 컬렉션 – 5)리스트 기능1 (추가, 병합, 삭제)

https://youtu.be/xJYbB9pxy24[파이썬 입문] 리스트 기능 (추가, 병합, 삭제)보관리스트에 요소를 순차 보관할 때 append 메서드를 사용합니다.list.append(요소)다음은 빈 리스트를 생성한 후 1부터 9까지 순차적으로 보관하는 코드입니다.[In]ls = list() #빈 리스트 생성for i in range(1,10): ls.append(i)print(ls)[Out][1, 2, 3, 4, 5, 6, 7, 8, 9]‘a’를 추가해서 확인하면 맨 마지막에 보관하는 것을 알 수 있어요.[In]ls.append('a')print(ls)[Out][1, 2, 3, 4, 5, 6, 7, 8, 9, 'a']리스트에 원하는 위치에 보관할 때는 insert 메서드를 사용합니다.list.i..

[파이썬 입문] 3. 제어문과 컬렉션 – 4) 튜플과 리스트 맛보기

[파이썬 입문] 플과 리스트 맛보기튜플튜플은 요소를 설정할 수 없는 고정 컬렉션입니다.튜플은 소괄호에 값을 열거하는 형태로 표현합니다.[In]tup1 = (1,2,3)print(type(tup1))print(tup1)[Out](1, 2, 3)소괄호없이 값을 열거한 표현도 튜플입니다.[In]tup2 = 1,2,3print(type(tup2))print(tup2)[Out](1, 2, 3)튜플의 요소 형식은 서로 다를 수 있습니다.[In]tup3 = (1,2.0, 'a')print(type(tup3))print(tup3)[Out](1, 2.0, 'a')요소가 다를 수 있다는 얘기는 다른 컬렉션도 요소로 올 수 있음을 의미합니다.[In]tup4 = (1,'a',tup2)print(type(tup4))print(..

[파이썬 입문] 3. 제어문과 컬렉션 – 3) 반복문

[파이썬 입문] 반복문 - while, for, rangewhilewhile문은 조건이 참일 때 반복 수행하는 구문입니다.while 조건 표현: 참일 때 수행할 표현 (반복 수행할 구문)다음은 1부터 10까지 정수의 합계를 구하는 논리 전개입니다.합계(sum)를 0으로 초기화i를 0으로 초기화반복 i가 10보다 작거나 같다면 합계에 i를 더하라 i를 1증가하라결과를 확인 이를 코드로 표현하면 다음처럼 구현할 수 있어요.[In]#1부터 10까지 정수의 합계를 구하자.sum = 0 #sum를 0으로 초기화 i = 1 #i를 1로 초기화while i[Out]1부터 10까지 정수의 합계: 55만약 사용자가 입력한 정수의 합계를 구한다면 다음과 같은 논리 전개를 할 수 있어요.합계(sum)를 0..

[파이썬 입문] 3. 제어문과 컬렉션 – 2) 조건문 if, if else, if elif else

[파이썬 입문] 3. 제어문과 컬렉션 - 조건문 if, if else, if elif elseif 문if문은 조건이 참일 때 수행하는 구문을 지정할 수 있어요. 파이썬에서는 조건문, 제어문, 함수에 속하는 구문을 지정할 때 들여쓰기를 지정합니다.if 조건 표현: 참일 때 수행할 표현다음은 점수를 입력받은 후에 점수 범위를 벗어나지 않을 때 점수를 출력하는 코드입니다.[In]score = int(input("국어 점수:"))if 0[Out 1]국어 점수:102[Out 2]국어 점수:90입력한 점수는 90입니다.if 조건이 참일 때 수행할 구문은 들여쓰기를 지정하여 표현합니다. 만약 들여쓰기를 하지 않으면 if문은 끝난 것으로 간주합니다.다음은 이를 테스트하는 코드입니다.[In]score = int(i..

[파이썬 입문] 3. 제어문과 컬렉션 – 1)논리 형식 bool

[파이썬 입문] 3. 제어문과 컬렉션 논리 형식 bool논리 형식 bool파이썬에서는 True와 False를 값으로 갖는 bool 형식을 제공하고 있어요.[In]print(type(True))print(type(False))[Out]논리 연산 연산 결과가 bool 형식인 논리 연산은 and, or, not을 제공합니다.and 연산은 이항 연산자로 둘 다 참일 때만 연산 결과가 참입니다.[In]print(f"False and False = {False and False}")print(f"False and True = {False and True}")print(f"True and False = {True and False}")print(f"True and True = {True and True}")[Out]..

[파이썬 입문] 2. 자료형 – 4) 기본 출력 print 함수, format 함수, f문자열

파이썬 - 출력과 format 및 f문자열기본 출력 print기본 출력 함수 print는 이미 사용해 보았습니다.이번에는 포멧에 맞게 출력하는 방법을 알아 볼 거예요.print 함수를 사용할 때 값이나 표현을 입력 인자로 전달하여 출력했어요.[In]print(12)a = "hello"print(a)print(12, a)[Out]12hello12 helloformat 출력먼저 정수를 출력할 때 10진수, 8진수, 16진수로 출력할 수 있어요.format(정수,’d’)일 때는 10진수format(정수,’o’)일 때는 8진수format(정수,’x’)일 때는 16진수[In]num = 256print("===num===")print("10진수:",format(num,'d'))print("8진수:",format(n..

[파이썬 입문] 2. 자료형 – 3) 변수와 기본 input

[파이썬 입문] 자료형 –변수와 기본 input변수 사용프로그램에서 사용할 데이터를 기억해 두었다가 필요할 때 사용하기 위한 문법으로 변수를 제공합니다.파이썬에서는 별도의 선언문 없이 변수에 값을 대입하는 형태로 사용할 수 있습니다.다음은 사각형의 면적을 계산하기 위해 너비와 높이를 변수에 대입하여 사용하는 예제 코드입니다.[In]width = 10height = 15rect_area = width * heightprint("너비:",width, "높이:",height, "사각형 면적:",rect_area)[Out]너비: 10 높이: 15 사각형 면적: 150기본 입력 input사용자로부터 값을 입력받아 변수에 대입하고자 한다면 input함수를 사용하세요.input 함수는 화면에 출력할 내용을 전달합니다..

[파이썬 입문] 2. 자료형 – 2) 문자열

[파이썬 입문] 자료형 – 문자열문자열 표현파이썬에서는 문자열을 표현할 때 단일 콤마나 이중 콤마, 삼중 콤마로 감싸서 표현할 수 있습니다.[In]print('abc')print("ABC")print("""여러 줄로 표현한문자열입니다.""")[Out]abcABC여러 줄로 표현한문자열입니다.아스키(ASCII,American Standard Code for Information Interchange) 코드 값을 알고자 한다면 ord 함수를 사용하세요.[In]print("a:",ord('a'),"A:",ord('A'),"0:",ord('0'))[Out]a: 97 A: 65 0: 48chr 함수에 아스키 코드값을 전달하면 문자로 변환할 수 있어요.[In]print(chr(97),chr(65),chr(48))[O..

[파이썬 입문] 2. 자료형 – 1)숫자

[파이썬 입문] 자료형 - 숫자정수파이썬에서는 다양한 진수 형태로 정수를 표현할 수 있어요.디폴트 표현은 10진수 정수입니다.숫자 0과 알파벳 o를 앞에 붙이면 8진수 표현입니다. 예를 들어 0o12는 8진수 12를 의미합니다.숫자 0과 알파벳 x를 앞에 붙이면 16진수 표현입니다. 예를 들어 0x12는 16진수 12를 의미합니다.[In]print(12,0o12,0x12)[Out]12 10 1810진수, 8진수, 16진수 표현에 관계없이 정수 형식은 int입니다.파이썬에서 특정 표현의 형식을 알고자 할 때 type(표현)을 사용합니다.[In]print(type(12),type(0o12),type(0x12))[Out] 실수실수 표현은 부동소수점 표현과 지수 표현을 사용할 수 있습니다.부동소수점 표현은 우..

[파이썬 입문] 1. 파이썬 맛보기

[파이썬 입문] 1. 파이썬 맛보기파이썬 소개어린왕자 첫 페이지를 기억하시나요? 처음에 모자라고 생각한 그림이 나오죠. 그리고 다음 페이지로 넘겼을 때 모자가 아니라 보아구렁이가 코끼리를 삼킨 것임을 알았던 기억이 있을 거예요.갑자기 왠 어린왕자 얘기를 하냐구요? 네. 눈치를 채셨겠지만 보아구렁이가 python입니다. Python 언어의 철학이 다양한 형태의 프로그래밍을 할 수 있게 여러 기술을 통합하여 사용할 수 있다는 생각에서 언어 이름을 작명한 것이죠. 표면적으로 파이썬을 만든 귀도 반 로섬이 좋아하는 코미디 [Monty Python’s Flying Circus]에서 따 온 것으로 얘기하고 있어요.Python은 생각보다 오래 전에 만들어진 언어예요. 1991년에 만들었으니 C++보다는 나중에 나왔지..

[C++] 74. 최종 실습 – 클래스 추가하기

[C++] 최종 실습 – 클래스 추가하기 이제 클래스를 추가하고 클래스 사이의 관계에 따라 헤더 파일을 포함합시다. 여기에서는 헤더 파일에 포함문을 작성하는 것 까지만 할 거예요. 클래스 다이어그램을 보면서 클래스를 추가하세요. 현재 EhNara, Place, Downtown, School, Village 클래스를 추가한 상태죠. 앞에서 작성한 확장 가능한 순차 배열인 SeqArray 템플릿 클래스를 추가하세요. 그리고 상속과 다형성 최종 실습에서 작성한 프로그램에서 Student, MStudent, SStudent, PStudent 클래스를 이용할게요. 소스 파일과 헤더 파일을 복사하여 프로젝트에 추가하세요. 이 외에 Man, IStudy, IRelax, IPlay를 추가하세요. 그리고 이를 기반으로 ..

[C++] 73. 최종 실습 – 확장 가능한 순차 배열

[C++] 최종 실습 – 확장 가능한 순차 배열 EhNara 프로그램에서는 EhNara 클래스, 학생 공장에서 학생 개체를 보관합니다. 그리고 장소에서는 사람 개체를 보관합니다. 여기에서는 순차적으로 보관할 수 있는 확장 가능한 배열을 템플릿으로 정의합시다. 확장 가능한 배열은 저장소가 꽉 차면 내부에서 저장소의 크기를 늘려 주어 사용하는 개발자가 저장소의 크기에 신경을 쓰지 않고 사용할 수 있는 동적 배열입니다. 여기에서는 순차 보관하는 기능과, 특정 인덱스의 요소를 제거, 특정 알고리즘이 참인 인덱스를 구하는 등의 기능을 제공하는 확장 가능한 배열을 만듭시다. template class SeqArray { 먼저 저장소와 저장소의 크기, 보관 개수를 기억하고 있어야 합니다. data *base; //저..

[C++] 72. 최종 실습 – 프로토 타이핑

[C++] 최종 실습 – 프로토 타이핑 이번에는 앞에서 작성한 EhNara 뼈대에 요구 분석 및 정의에서 작성한 유즈케이스 다이어그램을 보며 프로토 타이핑을 작성합시다. GUI(Graphic User Interface) 프로그램에서는 이해관계자의 요구 사항을 제대로 파악한 것인지 확인하기 위해 프로토 타이핑을 작성하곤 합니다. 이해관계자의 요구 사항은 고정적인 것이 아니라 시시 때때로 변할 수 있는데 자주 변하는 부분이 대부분 User Interface에 관한 것이 많습니다. 즉 내부적인 것 보다 외형적인 부분에서 요구 사항이 자주 바뀔 수 있습니다. 이러한 것을 개발 앞 단계에 배치하여 이해관계자의 요구 사항을 반영하기 위해 프로토 타이핑을 합니다. EhNara 프로그램은 GUI 프로그램이 아니라서 이..

[C++] 71. 최종 실습 – EHNARA 뼈대

[C++] 최종 실습 – 기본 뼈대 이번 실습에서는 유즈케이스 별로 시퀀스 다이어그램 설계하고 구현하는 것을 반복할 것입니다. 먼저 이제까지 작업한 것을 구현하고 유즈케이스 별로 시퀀스 다이어그램 작성 맟 구현으로 들어갈게요. EhNara의 뼈대를 만들고 난 후에 기본적인 사용자와 상호 작용의 프로토 타이핑을 할게요. 프로젝트에 Program.cpp 파일과 EhNara 클래스를 추가하세요. EhNara 형식 개체는 프로그램에 유일하며 대부분의 콘솔 응용 프로그램은 프로그램 초기화, 사용자와 상호 작용, 해제화 순으로 진행합니다. class EhNara { 단일체를 표현하기 위해 생성자와 소멸자의 접근 지정은 private으로 설정합니다. 대신 유일한 단일개체를 정적 멤버로 선언할게요. static EhN..

[C++] 70. 최종 실습 – 설계1(클래스 다이어그램)

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

[C++] 69. 최종 실습 – 요구 분석 및 정의

[C++] 최종 실습 – 요구 분석 및 정의 요구 분석 및 정의 단계에서는 이해관계자를 파악하고 이해관계자 별로 프로젝트에 요구하는 사항을 조사하는 것에서 출발합니다. 이번 실습에서의 이해관계자는 프로그램 사용자와 프로그램 개발자 정도로 생각할 수 있습니다. 시나리오를 제외한 특별한 요구 사항은 없으니 시나리오를 바탕으로 유즈케이스 다이어그램을 작성하는 것부터 시작합시다. 유즈케이스 다이어그램을 작성할 때는 액터를 조사하고 액터 별로 유즈케이스를 정의한 후에 관계를 정의합니다. 액터는 개발하는 시스템 주변의 모든 것을 말합니다. 시스템을 사용하는 사용자 뿐만 아니라 시스템을 사용하는 프로그램이나 시스템이 사용하는 외부 시스템도 액터입니다. 이 에이치 프로그램은 최종 사용자 외에 다른 액터가 존재하지 않습..

[C++] 68. 최종 실습 – 개발 공정 및 시나리오

[C++] 최종 실습 – 개발 공정 및 시나리오 전산 기술은 하루가 다르게 발전하고 새로운 기술이 나오고 있습니다. 그리고 프로젝트의 규모가 점점 늘어나고 있으며 다른 산업 분야와 접목하는 형태로 발전하고 있습니다. 프로그램의 규모가 커지고 많은 인력이 필요한 형태로 변하면서 효과적인 개발 공정과 많은 이해 관계자에게 프로그램의 구조를 설명하고 개발자 사이에 의사 소통할 수 있는 방법들이 생기고 있습니다. 여기에서는 여러 가지 개발 방법론 중에 많은 이들이 사용하는 CBD 개발 방법론을 적용해서 마지막 실습을 진행할게요. 일반적인 CBD 개발 방법론에서는 요구 분석 및 정의 단계, 아키텍쳐 단계, 설계 단계, 구현 단계, 배포 단계로 나누고 있습니다. 이 중에 아키텍쳐 단계는 프로그램을 컴포넌트 형태로 ..

[C++] 67. 실현(REALIZATION) 관계

[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++] 66. 의존(DEPENDENCY) 관계

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

[C++] 65. 연관(ASSOCIATION) 관계

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

[C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계

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

[C++] 63. 구성(COMPOSITION) 관계

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