C - Linked List자료구조 시간에 배우게 되는 Linked List에 대해서 어렵게 생각하시는 분들 위해 소스코드와 이에 대한 설명을 해드리겠습니다.C의 제어문이나 포인터, 구조체 등 기본적인 문법과 Linked List에 대한 기본 틀을 알고 있다고 가정하고 설명 드리겠습니다.(4 ~ 8 line) : 구조체입니다. 이 구조체 안에는 노드의 실질적인 값인 data와 다음 노드를 가리킬 포인터가 있습니다. next포인터가 ‘다음 노드를 가리킨다.’는 사실과 포인터 안에 ‘다음 노드의 주소를 저장한다.’는 사실을 모두 떠올리시면 리스트 구조를 이해하는데 도움이 되실 겁니다.(10 ~ 14 line) : 리스트를 구현한 구조체입니다. 현재 노드의 수를 저장하는 currentElementCount변수와 헤더노드를 가지고 있습니다.현재 노드의 개수는 이후 ‘노드삽입’에서 삽입할 위치가 적절한지를 검사하기 위해서 필요합니다. 검사를 하지 않는 linked list를 만들 경우 없어도 무방합니다. 여기서 주의 생각해 볼 것이 이 리스트는 헤더 노드를 설정했다는 점입니다. 수업시간에 배운 방법은 아마 헤더 포인터를 설정하여 구연한 linked list일 겁니다. 그 방법으로 구현한 리스트는 아래와 같은 모습입니다.head Pointer123LinkedList 구조체currentElementCount헤더노드 (headerNode)datanext1그리고 위의 코드를 구현(header node를 통한 구현)한 것은 다음과 같습니다.LinkedList구조체 안에 '헤더노드‘가 있는 모습입니다. ‘헤더노드’는 데이터 저장을 위한 노드가 아니라 노드의 추가와 삭제의 구현을 간편하게 하기 위한 노드입니다. 헤드 포인터로 구현할 시에는 노드 추가 시, 첫 노드인지 아닌지를 구분해서 코딩해야 하지만 헤더노드 형식으로 구현하게 되면 구분하지 않고 코딩이 가능합니다. 그 이유는 추가, 삭제 할 때 이전 노드를 사용하는데, 헤더포인터로 구현할시 첫 노드의 이전 노드가 없으므로 첫 노드를 추가할 경우를 따로 생각해 주어야 하기 때문입니다. 이전노드를 사용하는 모습은 잠시 후에 노드 추가 함수를 보면서 알려 드리겠습니다.(6 ~ 23 line) : 리스트를 생성하는 함수입니다. malloc함수를 사용하여 동적으로 생성 합니다. (line 12)에서 list가 정상적으로 할당 되었는지(NULL이 아닌지) 확인하고 memset() 함수를 통해 초기화 시켜줍니다. 메모리할당에 실패하여 list가 NULL인 상태에서 list를 통한 연산을 하게 되면 시스템에 안 좋은 영향을 주기 때문에 항상 확인하는 습관을 들이는 것이 좋다고 생각됩니다.다음으로 노드를 추가하는 addNode()함수를 살펴보겠습니다. 코드를 보기 전에 그림을 통해 과정을 설명 드리겠습니다.추가하고 싶은 위치의 노드???preNode->nextnextnewNodepreNodenextnext? -> ? -> ? 순으로 구현해야 합니다. ?은 새로운 노드 생성, ?는 새로운 노드의 다음 노드를 추가하고자 하는 위치의 노드로 설정합니다. ?은 이전노드의 다음노드를 새로운 노드로 바꿔주는 모습입니다. 여기서 약간 헷갈릴 수 있습니다. 위와 같이 하면 새로운 노드가 추가하고 싶은 위치가 아닌 그전으로 설정 될 것 같지만, 생각해보면 linked list는 헤더노드 쪽부터 0, 1, 2 … 순으로 위치가 정해지기 때문에 새로운 노드가 추가하고자 하는 위치에 들어가게 됩니다. 다시 말해 추가하고 싶은 위치의 노드의 순서가 다음으로 밀립니다.노드를 추가 할 때 순서에 유의해야 합니다. 만약 ?을 ?보다 먼저 하게 되면 새로운 노드의 next를 설정 할 수 없게 됩니다.(25 ~ 63 line) : 노드 추가 함수입니다. line 39는 아시다 시피 ?입니다.(line 48) : 노드를 새로 만들 때 꼭 next를 NULL로 초기화 해주어야 합니다. 그래야 출력 등 노드 순회를 구현 할 때 리스트의 끝에 도착했음을 확인 할 수 있습니다. 만약 NULL로 설정하지 않았으면 노드 순회의 끝에서 에러가 발생하게 됩니다.(50 ~ 54 line) : 추가하고자 하는 위치의 이전 노드까지 preNode를 옮겨 놓는 과정입니다. preNode를 우선 headerNode로 설정하고 for문을 돌면서 이동을 합니다. for문이 끝나면 추가하고자 하는 위치의 이전 위치에 오게 됩니다.(line 56) : ? 과정입니다. newNode의 next를 preNode의 next로 설정합니다. “newNode의 next의 값에 preNode의 next값을 넣는다.”라고 생각하시면 됩니다. 여기까지만 하게 되면 newNode의 next와 preNode의 next 둘 다 추가하고자 하는 위치의 노드를 가리키게 됩니다.(line 57) : ? 과정입니다. preNode의 next를 newNode로 바꿔줍니다.(line 59) : 잊지 말고 리스트 안의 노드 개수를 +1 해줍니다.(다음페이지에...)이제 노드 삭제 과정을 살펴보겠습니다. 역시 그림을 먼저 보겠습니다.삭제하고자 하는 위치의 노드?X?preNodedelNodedelNode->nextnextnextnext? -> ? -> ?순으로 구현합니다. ?은 삭제하고자 하는 위치 이전 노드의 다음노드를 삭제하고자 하는 위치의 다음 노드로 설정해 주는 과정입니다. 이렇게 해주어야 노드 삭제 시 리스트가 끊기지 않고 연결 되어 집니다. ?는 삭제하고자 하는 노드를 삭제해 주는 것입니다.(69 ~ 104 line) : 노드를 삭제하는 removeNode() 함수입니다.(85 ~ 89 line) : 삭제하고자하는 위치의 이전 노드까지 preNode를 옮겨 놓는 과정입니다. preNode를 우선 headerNode로 설정하고 for문을 돌면서 이동을 합니다. for문이 끝나면 삭제하고자하는 위치의 이전 위치에 오게 됩니다.(line 91) : delNode에 삭제하고자 하는 위치의 노드를 설정 합니다. preNode의 next 값을 넣어 주면 됩니다.(line 92) : ? 과정입니다. preNode의 next에 delNode의 next 값을 넣어 줍니다. 여기까지만 하면 preNode의 next와 delNode의 next 둘 다 삭제하고자 하는 노드의 다음노드를 가리킵니다.(line 94) : ?과정입니다. 노드를 동적으로 할당했기 때문에 free() 함수로 메모리 해제를 해줍니다.
국가성장의 발 돋음, 보편적 복지복지제도는 누구를 위한 제도인가? 복지제도는 모든 사람들을 위해 시행되어야 한다. 그 시작으로 정부에서 전면무상보육을 시행했지만 결과는 실패로 끝났다. 과연 모든 사람들을 위한 보편적 복지는 불가능한 것일까? 선별적 복지정책을 시행할 수밖에 없는 것일까? 그렇지 않다. 실제 보편적 복지정책을 시행하고 있는 국가들이 많이 있기 때문에 보편적 복지는 불가능한 정책이 아니다.보편적복지가 현실적으로 불가능 하다고 주장하는 사람들은 그 근거로 재정 부담이 크고 재원 마련이 힘들다고 주장한다. 하지만 세금만으로도 보편적 복지정책은 충분히 시행할 수 있다. 우리나라의 복지재정 비중을 보면 OECD 국가 중 최하위로 10%가 채 되지 않는다. OECD 국가 평균수치가 20% 이상인 것에 비하면 턱없이 부족한 상황이다. 그렇기 때문에 다른 분야에 과도하게 들이는 예산을 줄이고 복지 분야의 예산비중을 늘린다면 복지정책을 시행할 수 있는 예산을 확보할 수 있다. 세금정책에서도 부자들의 세금을 줄여주는 부자감세를 폐지한다면 더 많은 예산을 확보할 수 있다. 그러므로 보편적복지가 불가능 하다고 볼 수는 없다.또 선별적 복지를 주장하는 사람들은 복지보다 경제성장에 투자하는 것이 먼저라고 말한다. 경제성장을 하는 일도 반드시 이루어져야 하지만 경제성장에만 투자할수록 복지정책에 대한 투자는 줄어든다. 한 설문조사에 따르면 경제성장이 먼저라고 말한 답변은 20대에선 41.7%, 30대에선 44.9%로 경제성장이 먼저라는 답변은 복지정책이 먼저라는 답변보다 낮았다. 실제로 경제 강대국은 복지정책 또한 잘 마련되어있다. 청년실업이 심각한 우리나라에서 보편적 복지정책으로 실업급여와 기간을 늘려주고 직업교육에 대한 지원을 해주는 것으로 오히려 더 큰 경제성장을 향한 발판을 마련할 수 있다. 경제성장을 위해서라도 보편적 복지정책은 시행되어야 한다.
안락사, 인격체로서의 존중안락사란 불치의 질병 등으로 극심한 고통을 겪고 있는 병자 본인 또는 그 가족의 요청에 따라 그 고통을 덜어주기 위하여 인위적으로 죽음을 앞당기거나 생명 유지에 필수적인 영양 공급이나 약물 투여 등을 중단함으로써 생명을 단축하는 행위를 말한다. 이러한 안락사는 인간의 존엄성을 침해한다는 이유로 윤리적으로 많은 비판을 받아오고 있다. 과연 안락사가 인간의 존엄성을 침해하는 것일까? 나의 생각은 그렇지 않다. 안락사는 환자의 생명을 인위적으로 단축시킨다는 점에서 비윤리적으로 보일지 모른다. 그러나 그것은 좁은 의미에 편중된 관점이고 안락사를 넓은 의미로 바라보면 환자의 고통을 줄이고 존엄성을 지키기 위해 환자의 의견을 충분히 반영한 상태에서 인위적으로 생명을 단축시키는 것을 의미한다. 안락사는 환자를 죽음에 이르게 하는 방법에 따라 적극적 안락사와 소극적 안락사로 나눈다. 적극적 안락사는 약물 등을 사용하여 환자를 죽음에 이르게 하는 방법이고 소극적 안락사는 환자의 치료를 중단해서 환자를 죽음에 이르게 하는 방법을 말한다. 현재 세계의 대부분의 나라에서는 안락사는 허용하지 않고 있다.그런데도 왜 안락사를 허용해야 할까? 무엇보다도 생명장치에 의존해서 하루하루 살아가는 환자들의 삶을 편안하게 해주어야한다는 것이다. 보통 안락사를 생각하는 환자들은 정신적 육체적으로 매우 힘든 상황에 놓여있다. 그리고 환자들은 자기 자신들의 가족들이 자신을 돌보며 힘들게 생활하는 모습을 보게 된다. 그렇게 되면 환자의 마음은 더 힘들 것이다. 생명을 유지시키는 인공적 장치가 없으면 단 하루라도 살아 갈 수 없는 자기 자신의 삶이 매우 비참하게 느껴질 수도 있을 것이다. 이러한 환자의 마음을 무시하고 무작정 안락사의 반대를 주장한다면 그것이 과연 올바른 방법일까? 생명을 유지시키는 것만이 환자의 존엄성을 지켜주는 것일까? 그것은 아니라고 생각한다.환자의 존엄성을 지켜주기 위해서는 환자의 생각과 사고를 반영해야 한다. 아무리 뛰어난 의사가 진단을 하더라도 환자의 몸 상태는 진단할 수 있더라도 환자의 생각과 마음을 진단 할 수는 없다. 어떤 불치병에 걸린 환자가 병으로 인한 고통과 자신이 살고 있는 현실을 견뎌내지 못해서 심사숙고한 결정 끝에 의사에게 안락사를 요청했다면 어떻게 해야 할까? 환자의 결정을 무시하고 안락사를 거절하는 방법이 인간의 존엄성을 살리는 방법일까? 환자의 심사숙고한 결정을 무시하고 생명을 유지 시키는 방법은 환자의 고통만 증가시킨다. 오히려 환자가 확고한 생각을 가지고 안락사를 요구했다면 그 요구를 들어주는 것이 환자의 존엄성을 지키는 방법이다. 이러한 상황을 받아들여 안락사를 수용하는 몇 나라가 있다. 대표적인 나라로 네덜란드가 있다. 현재 네덜란드의 관련법은 환자의 명시적인 소원에 따라 의사에 의해 이루어지는 생명 종료에 국한하여 존엄사 및 안락사를 허용하고 있다. 법이 규정하고 있는 실질적이 요구조건은 다음과 같다.1. 환자의 요청은 충분히 심사숙고를 한 후에 이루어져야 한다.2. 환자의 요청은 지속적이어야만 한다.3. 적극적 안락사 또는 의사조력 자살의 요청이 환자 스스로에 의해서 자발적으로 이루어져야 한다.4. 환자는 치료의 가망이 전혀 없는 가운데에서 지속적인 고통 상태에 빠져있다. 이 조건을 충족시키는 데 있어서는 환자가 반드시 질병 말기일 필요는 없다.5. 요구되는 절차상 조건은 다음과 같다.- 의사가 환자를 도와주기 전에, 의사는 그 환자에게 적어도 다른 두 명 이상의 의사(이들 중 적어도 한 명은 정신과 의사)의 검증을 반드시 받도록 촉구해야만 한다.- 의사만이 안락사를 시행 할 수가 있다.- 의사는 그 사례에 관한 모든 사항을 서면기록으로 남겨야만 한다.6. 이 경우에 사망은 자연 원인에 의한 죽음으로 보고를 하면 안 되고 안락사 또는 조력 자살의 사례로 반드시 검찰에 보고하여야 한다.일본은 아시아에서 유일하게 소극적 안락사를 허용하고 있는 나라다. 그러나 현재까지 안락사에 관한 구체적인 법률이 제정되어 있지는 않다. 일본 법원의 판례를 통한 그 허용의 조건은 다음과 같다.1. 전문의사의 주도로 행하는 것을 원칙으로 하고, 의사에 의할 수 없는 사안의 경우에는 의사에 의할 수 없다는 것을 수긍할 수 있는 특별한 사정이 있어야 한다.2. 환자의 고통이 극심하고 누가 보더라도 이것을 보고 진정으로 참을 수 없을 정도의 것일 것이어야 한다.3. 환자가 현대 의학의 지식과 기술면으로 보아 불치의 질병에 걸려 더욱이 그 죽음이 눈앞에 다가온 것이야 한다.4. 환자의 의식이 극히 명료하고 의사를 표명할 수 있을 경우에는 본인의 진지한 촉탁 또는 승낙이 있어야 한다.5. 오직 환자의 사고에 대한 완화 목적으로 이루어져야 한다.6. 윤리적으로 그 방법이 타당한 것으로서 인용될 수 있어야 한다.이 밖에도 안락사를 허용하고 있는 나라들이 있고 그 허용범위를 보면 각 나라들의 안락사에 대한 공통점을 찾을 수 있다. 가장 중요한 조건으로 보자면 환자의 요청과 환자의 상태이다. 환자의 의사가 반드시 반영이 되어야 한다는 것이다. 바로 이점이 환자의 존엄성을 중요하게 여긴다는 점이다. 그렇다면 이런 상황에서는 또 다른 문제를 제기할 수 있다. 환자가 아무의식이 없고 의식이 돌아올 가망이 없을 경우이다. 환자는 인간으로서 인간답게 살아갈 권리가 있다. 이런 상태에서의 환자는 더 이상 아무 일도 할 수 없고 대화도 할 수가 없다. 인간으로서 어떤 가치나 목적도 성취할 수 없다. 실제로 죽어있는 인간이라고 볼 수가 있는 것이다. 이런 환자를 치료하기 위해서는 환자의 가족들에게도 정신적 및 경제적으로 큰 부담을 주고 막대한 의료비용은 환자의 가정과 재산을 파탄시킬 수도 있는 또 다른 문제를 내포하고 있다. 그렇기 때문에 환자의 고통과 비참함을 빨리 종식시킬 수 있도록 도와주는 것이 환자의 존엄성을 위한 선택이자 자비로운 행위이다.
생명공학과 컴퓨터공학생명공학과 컴퓨터공학의 관계를 알아보기 위해서 먼저 각각의 정의를 살펴보았다.* 컴퓨터 공학 : 현대의 정보화 사회에서 컴퓨터 시스템과 컴퓨터와 관련된 여러 기술을 개발하여 익히고 이를 각 분야에 응용함을 목적으로 하는 학문 분과이다.이론 분야와 프로그래밍 분야, 컴퓨터 시스템 분야, 응용 분야로 나뉜다.1.기초 분야: 이산수학, 자료 구조, 오토마타, 알고리즘 등 컴퓨터 기술을 발달시키기 위한 기반이 되는 논리학을 다루는 부분.2.프로그래밍 분야: 컴퓨터 기술의 핵심을 이루는 분야로 C, C++, Java 등 여러 가지 프로그래밍 언어로 컴퓨터에게 명령하여 작동시키는 기술을 연구.3.시스템 분야: 컴퓨터의 하드웨어 구조와 컴퓨터 시스템을 구성하는 운영 체제, 네트워크 등을 취급.4.응용 분야: 위의 기술들을 기반으로 하여 필요에 따라 세부적이고 구체적으로 응용, 발달. 분산 시스템 및 병렬 시스템, 인공지능, 데이터베이스, 멀티미디어, 패턴인식 및 영상 처리, 소프트웨어 공학 등.* 생명공학: 생명체가 가진 유전자의 재조합, 세포 융합 따위의 기술을 통해 생명체의 특성을 유용하게 이용하는 것을 말한다. 생명 공학은 기초 학문이기도 하지만 이를 기초로 새로운 기술 개발을 할 수 있는 응용 학문이기도 하다. 생명 공학은 인간의 수명 연장, 불치병의 치료 등의 의의가 있는가 하면 복제된 인간의 존엄성 등이 문제로 대두되면서 사회적 찬반 양론이 계속되고 있다.생명공학에서 다루는 생물학과 컴퓨터에서 다루는 정보학을 결합하면 바이오인포매틱스 (생명정보학) 이라는 학문을 다룰 수 있다.바이오인포매틱스 :컴퓨터를 이용해 각종 생명정보를 처리하는 학문으로 방대한 생물의 유전자 정보를 분석하기 위한 학문이다. 유전자 예측 프로그램 개발, 생명정보 데이터베이스(DB) 구축 등 정보 기술의 개발과 바이오 칩이라 불리는 첨단 반도체의 개발 등이 해당된다. 이는 유전체(genome)의 기능 연구를 기반으로 실질적인 인류 혜택을 실현할 포스트 게놈 시대(Post Genome Era)의 학문이라 하겠다.컴퓨터의 발달로 인해 컴퓨터를 사용하지 않는 분야는 보기 힘들 정도로 정보화 사회가 되었다. 그로인해 생명공학 분야에서도 컴퓨터공학이 중요한 역할을 하는 학문이라고 생각한다. 특히 의학과 관련된 분야에서 다양하게 사용할 수 있을 것이다.이 중에서도 가장 끌리는 부분이 있다면 바이오 칩 이라고 불리는 반도체의 개발이 흥미롭다.** 바이오 칩 :바이오소자 또는 생물소자라고도 하는데 작은 기판 위에 DNA, 단백질 등의 생물 분자들을 결합시켜 유전자 결함, 단백질 분포, 반응 양상 등을 분석해낼 수 있는 생물학적 마이크로칩(microchip)을 말한다. 이러한 바이오칩은 과학기술연구 및 신약 개발 프로세스, 임상 진단 등의 분야에 혁신적 변화를 일으킬 것으로 주목을 받고 있으며 빠르게 보급되기 시작하고 있다. 특히 임상 진단 분야에서는 이미 암, 에이즈(AIDS) 등과 관련한 유전자 돌연변이를 검출하여 진단할 수 있는 바이오칩이 개발되어 있다.한편 농업, 산업, 환경 모니터링 분야에도 바이오칩의 응용이 이루어지고 있는데 이들 분야는 임상진단분야에 비하여 경쟁이 덜 하고 상업적 성공의 기회가 많은 것으로 판단된다. 생체 물질이 갖는 기억능력(DNA 등), 분자인식기능(효소, 항체 등), 감광기능(로돕신 등), 에너지변환기능 등의 우수한 기능을 합리적으로 이용함으로써 전기적 스위칭 기능을 갖는 소자개발이 고려되고 있다.바이오칩은 크게 마이크로어레이(microarray)와 마이크로플루이딕스칩(microfluidics chip)으로 나눌 수 있다.마이크로어레이(microarray)는 수천 혹은 수만 개 이상의 DNA나 단백질 등을 일정 간격으로 배열하여 붙이고, 분석대상물질을 처리하여 그 결합 양상을 분석할 수 있는 바이오칩을 말하는데 DNA칩, 단백질칩(protein chip) 등이 대표적이다. 비교적 널리 알려진 DNA칩에 비하여 단백질칩은 대부분의 생명현상이 단백질 수준에서 일어난다는 사실을 감안할 때 그 이용가치가 훨씬 높은 바이오칩이다. 그러나 DNA와는 달리, 효소, 항체, 수용체 등 필요한 단백질의 확보가 어렵고 변성되거나 깨지기 쉬운 단백질의 특성으로 인하여 단백질칩의 개발과 상용화는 DNA칩에 비해 다소 뒤진 실정이다.한편 마이크로플루이딕스칩(microfluidics chip)은 Labon-a-Chip이라 불리기도 하는데 미량의 분석대상물질을 흘려보내면서 칩에 집적되어 있는 각종 생물분자 혹은 센서와 반응하는 양상을 분석할 수 있는 바이오칩으로 최근에는 분석물질의 분리, 합성, 정량분석 등이 가능한 칩도 개발 중에 있다. 바이오칩은 바이오센서, 바이오컴퓨터와 더불어 바이오일렉트로닉스(bioelectronics)의 중요한 부분을 담당한다.
1. 다음중 전채요리와 관련이 없는 것을 모두 고르시오.1) hors d’oeuvre.2) appetizer3) sherbet4) caviar5) pudding2. 중세의 궁정예절은 르네상스 이후 인간적인 측면이 강조되면서 ‘옳다고 생각되는 행위’나 ‘바른 처신’이라는 어의로 변천되어 일반대중들 사이에 필요한 생활 규범으로 보편화되었으며, 19세기에는 국가 사이의 외교 관례를 규정하는 ( )도 제정되었다.3. 넥타이를 우측으로 1회 매어 깃을 앞으로 돌리면서 중심에 끼워 잡아당기는 매듭으로 일반적으로 가장 많이 매는 형인데 ( )라고 한다.4. 남자의 절로서 돈수배라고도 한다. 이 절은 절을 받는 상대가 답배를 해야하는 어른이거나 서로 정중하게 맞절을 할 때 하는 절이다. 이 절의 이름은?5. 다음 행동양식으로서의 매너의 표현방법 중 악수와 포옹, 피부 접촉, 키스 등과 같은 커뮤니케이션에 해당하는 것으로 맞는 것은?1) Proxemics2) objectics3) Haptics4) Kinesics5) Paralanguages6. 다음 중 큰 경례가 아닌 것은?1) 시상식이나 결혼식에서 실시2) 어른에게 특히 경의를 표하는 인사3) 상체를 60~90도 굽혀서 함4) 초대면 할 때 굽혀서 하는 인사7. 빵 접시는 본인의 ( )에 놓이며, 물 컵은 ( )에 놓인다.8. 다음 중 테이블 매너에 어긋나는 것은?1) 식사 도중 부득이 자리를 잠시 비워야 할 경우 냅킨을 식탁위에 놓는다.2) 냅킨을 펼 때에는 테이블 아래에서 편다.3) 팔꿈치나 손을 식탁위에 올려놓지 않는다.4) 냅킨은 초청한 사람이 먼저 편다.9. 이미지 메이킹에서 T.P.O는 ( ), ( ), ( )의 약어이다.10. 초청장에 ‘white tie’라고 적혀 있을 경우 파티에 입고 가야할 옷은?1) 라운지 슈트2) 연미복3) 인포멀4) 세미-포멀