며혈압:110

체중:77.7

체온:36.8

증상:수면장애 

식사-아침:쌀밥,무나물,북어국,야채볶음,두부조림,생선1토막

식사-점심:쌀밥,콩나물국,야채고기전,야채볶음,돼지고기조금

식사-저녁:쌀밥,북어국,생선1토막,소고기조금,두부조림,야채볶음

 

수술후 마취에서 깨어났을때 들었던 생각은 살았구나~였었다. 신장이식수술은 위험한 수술이 아니라지만 그건 내가 아닌 경우에 해당하는 기분이다. 간단한 성형수술을 하다가도 잘 못 되는 소식을 들을때면 걱정이 되는건 사실이다.

 

어쨋든 수술을 마치고 나왔을때, 가족들이 걱정할까봐 최대한 아프지 않은척? 했다. 병실로 이송할때 씩씩하게 누워있었고, 할 수 있는건 그게 다였으니까 ㅎㅎ

 

하지만 문제는 다음 날 부터 시작 되었다. 마취제며, 무통주사, 여러 약물로 인한 속이 뒤집어 지기 시작한 것이다. 수술한 부위가 크게 아픈건 아니었지만 구토할땐 어쩔수 없는 고통을 이기기 힘들었고, 이 때 부터 날 밤 새기가 이어졌다. 잠을 청하려 해도 울렁거리고 쓰린 속때문에 누워 있을수도, 앉아 있기도, 서 있기도 곤욕이었다.

 

이 고통이 끝날것 같지 않았다. 3일 이상을 꼬박새니 낮에 잠깐씩 30분정도 앉아서 졸때면 잠시나마 통증이 멈출뿐 깨어나는 순간 다시 고통은 찾아오기 시작했고, 하루 평균 수면 시간은 2시간을 넘길수 없었다.

 

그러는 사이 수술전 몸무게는 83~84 였는데 갖은 수액으로 체중이 10kg 이상 늘어났다. 온몸이 부어있었고 내다리는 내다리가 아니었다. 기약없는 통증과 그렇게 싸우고 있을때 자정까지도 아팠던 것들이 몇 시간 만에 거짓말처럼 멈춰가기 시작했다.

 

그 동안 느낄수 없었던 편안함이 찾아오기 시작했고, 꾸역꾸역 먹던 죽을 밥으로 바꿔서 먹기 시작한 것이다. 속이 편안해 지니 돌맹이 같을것 같았던 밥도 식욕을 끌어 올리기 시작했다. 불었던 체중도 소변으로 빠지기 시작하는데, 무서울 정도로 줄어갔다.

 

크레아티닌 수치도 1.27까지 떨어져 퇴원 결정이 떨어졌다. 드디어 집에 간다고 생각하니, 퇴원수속이 왜이리 길게 느껴지... 그래도 집에 가면 잠은 좀 잘 수 있겠다 싶었다. 물론 내 착각 이었다. 집에 와서도 여전히 긴밤을 뜬 눈으로 지새고 있다. 수면제를 복용해도 소용없으니 수면제는 끊었다. 

 

여전히 하루 평균 수면시간은 3시간을 넘지 못하고 있다. 공부를 해도, 독서를 해도 잠은 날 이기지 못했다. 밤이 무섭고 무섭다. 하지만 이 또한 고쳐 질거라 믿고 오늘도 틈틈히 운동으로 시간을 보내고 있다.

 

'정보 > 건강' 카테고리의 다른 글

만성신부전증 진단비(병원비) 확인  (0) 2019.04.14
자가 만성신부전 진단하기  (0) 2019.04.14
류현진 장미빛 시그널  (0) 2018.01.30

뚜레쥬르 매장내 전상품 구매가능한 2만원상당의 제품 교환권을 15,900원에
21% 할인 행사중이다.

케익을 좋아하는 내게는 너무나 행복한 이야기다. 따뜻한 아메리카노와 어우러지는 달콤함~ ^^

굳이 케익이 아니더라도, 여러 종류의 빵과
고마운 이에게 선물로도 좋을것같다.


 

 

 

'정보' 카테고리의 다른 글

데미안  (0) 2018.03.15
우주 호텔  (0) 2018.01.22
콜럼버스 항해의 진실  (0) 2018.01.21
퍼펙트스타종합보험 약관  (1) 2018.01.20
응급처치 요령 <2>  (0) 2018.01.14

요즘 살기 좋아지고 의학이 발달한 만큼 점점 고치기 어려운 병들도 생겨난다.

흔히 먹는 식습관과, 생활 습관에 따라 몸이 점차 망가져가는 듯하다.

 

지금은 젊은 사람이나 나이든 사람이나 고혈압이 없는 사람을 찾아보기 힘들만큼 혈압약을 복용중인 사람들이 꽤많다.

어디 그것 뿐일까? 당뇨로 인한 당뇨약과 인슐린으로 목숨을 연명해 가는 사람들도 꽤 많다.

 

왜 내가 살아가는 방법과 삶은 윤택해 지고 의학과 기술도 좋아지는데...내 몸의 질병들은 점점 고통스러워 할까?

특히나 이 두가지 고혈압과 당뇨가 있는 사람들은 만성신부전증을 항상 염두에 두고 살아야 할 것 같다.

 

보통 우리는 당뇨나 고혈압으로 병원에서 처방을 받아 약을 먹게된다. 당뇨같은 경우는 평균3개월에 한번씩 혈액검사를 통해 당화혈색소 라는 수치를 통해 내 몸상태를 체크할수 있다.

 

 

먼저 당뇨가 있는 사람들의 특징은 체중감소, 다뇨증, 무기력함, 잦은 목마름, 등이 찾아오고 피곤함이 수시로 몰려온다.

 

이랬던 고혈압과 당뇨가 관리를 안하게 되면 신장이 망가지기 시작한다. 대체로 신장기능의 50%이하로 떨어지기 전까지

별다른 자각 증상이 없기때문에 치료가 늦은 경우가 많이 발생한다.

 

그러므로 우리는 수시로 1년에 1~2번정도는 신장내과 검사를 받아 보는것이 좋지 않을까 생각해본다

 

만성신부전증으로 투석을 받게되면 보통 병원비가 15~20만원초반 정도까지 비용이 나온다.  물론 산정특례 환자는 병원비의 10%를 부담하게 된다.

 

하지만 투석은 임시방편일 뿐 이식수술만이 그나마 근본적인 치료가 될 것이라고 생각한다.

이식을 하게 될 경우 비용이 많이 들기 때문에 각자 가지고 있는 보험 증권을 함 확인해 보는게 좋다.

얼만큼의 보장 혜택이 되는지 확실히 알고 치료 받아야 환자에게 치료 이외의 부담을 안겨주지 않을수 있기 때문이다.

 

 

 

'정보 > 건강' 카테고리의 다른 글

2019.05.09 신장이식 15일  (0) 2019.05.10
자가 만성신부전 진단하기  (0) 2019.04.14
류현진 장미빛 시그널  (0) 2018.01.30

신장은 약 10~14cm로 사람 주먹 크기의 강낭콩 모양에 적갈색을 띠고 있는 ‘콩팥’이라고도 불린다. 

작은 크기이지만, 사구체라고 하는 모세혈관을 통해 혈액 속 노폐물을 걸러내어 소변으로 배출시키고 전해질 농도와 혈압을 조절하는 중요한 기능을 한다.

 

만성신부전이란 다양한 원인에 의해  신장 기능이 소실되어 더는 그 기능을 회복할 수 없는 상태를 말하는데, 최근에는  고혈압과 당뇨병이 주 원인이 되어 만성신부전 환자 수도 급격히 늘어나는 추세다.

 

 

 

"하지만, 신장기능 저하 속도가 비교적 느리고, 정상 기능의 50%가 감소할 때까지 별다른 증상이 크게 나타나지 않기 때문에 알지 못하고 지나가는 경우가 상당히 많다. 문제는 한 번 손상된 신장기능은 영구적으로 회복할 수 없는데, 이것이 평소 신장에 관심을 기울이고 예방하는 것이 중요한 이유다."

 

만성신부전의 예방을 위해서는 평소 생활 습관을 점검하는 것이 중요하다. 먼저 음식은 싱겁게 먹어야 하며. 조리할 때 소금의 양을 조금씩 줄여나가고 국이나 찌개종류는 섭취를 안하는 것이 바람직하다. 

식습관 이외에도 주 3회 이상 30분씩 적절한 운동으로 적정 체중을 유지하면 좋다. 무엇보다도 만성신부전의 원인질환 중 대부분을 차지하는 고혈압과 당뇨병을 관리를 철저히 하며 정기적인 신장 검사가 제일 중요하다.

 

 

신장내과 전문의 들은 "만성신부전으로 손상된 신장을 되돌릴 수 있는 방법은 현재 없다" 현재 치료는

'신장기능을 회복시키는 것이 아닌 진행속도를 최대한 늦추는 것에 초점을 맞춰야 한다'고 말한다.

기능의 심각하게 저하된 말기 신부전환자 들은 투석이나, 신장이식과 같은 대체 요법을 시행하지 않고는 생명을 오래 유지하기 어렵기 때문에, 만성 신부전은 예방이 꼭 필요하다.

 

 

 

 

 

 

 

'정보 > 건강' 카테고리의 다른 글

2019.05.09 신장이식 15일  (0) 2019.05.10
만성신부전증 진단비(병원비) 확인  (0) 2019.04.14
류현진 장미빛 시그널  (0) 2018.01.30

 

나는 오로지 내 안에서 저절로 우러나오는 것에 따라 살아가려 했을 뿐이다. 그것이 어째서 그리도 어려웠을까?

내 이야기를 하려면 훨씬 앞에서부터 시작해야 한다. 할 수만 있다면 그보다 훨씬 더 멀리로 되돌아가야 한다. 내 어린 시절의 맨 처음 몇 해, 아니 그보다 더 멀리 나의 조상들로까지 거슬러올라가야 한다. 작가들은 소설을 쓸 때면 자기들이 신이라도 되는 양, 그래서 그 어떤 인간의 이야기를 완전히 꿰뚫어보고 파아할 수 있기라도 하는 듯, 마치 신이 직접 자기 자신에게 이야기를 들려주기라도 하는 듯 언제 어디나 가리는 것 없이 시원하게 묘사하곤 한다.나는 그렇게 하지 못한다. 작가들도 물론 그렇게는 못한다. 하지만 그 어떤 작가가 자기 이야기를 중요하게 여기는 것 이상으로 내게는 내 이야기가 중요하다.

 

이것은 나 자신의 이야기, 한 인간의 이야기이기 때문이다. 가공의 인간, 어떤 가능한 어떤 인상적인 , 또는 어쨋든 존재하지 않는 한 인간의 이야기가 아니라 진짜로 존재하는 , 단 한 번뿐인, 살아 있는 인간의 이야기인 것이다. 하지만 진짜로 살아 있는 인간이란 대체 무엇이냐에 대해 오늘날 사람들은 예전보다 잘 모른다.그 모두가 저마다 자연의 아주 소중한, 딱 한 번뿐인 시도인 인간들을 총으로 쏘아 대규모로 죽이는 판이니 말이다. 우리가 단 한 번뿐인 인간으로 존재하는 게 아니라면, 누구든 우리 각자를 정말 총알 하나로 세상에서 완전히 없애버릴 수 있다면 이야기를 한다는 건 아무 의미도 없는 일이다.인간은 누구나 저 자신일 뿐만 아니라 세상의 현상들이 교차하는 지점, 단 한 번뿐이고 아주 특별한, 어떤 경우에도 중요하고 특이한 한 지점이다.

 

단 한번만 그렇게 존재하는 , 두 번 다시는 없는 지점이다. 그래서 각자의 이야기는 소중하고 영원하고 거룩하며, 그래서 어쨋든 아직 살아서 자연의 의지를 충족시키는 인간은 누구라도 극히 주목할 만한 경이로운 존재인 것이다.그 모든 인간 각자에게서 정신이 형상이 되고, 각자에게서 피조물이 고통받고, 각자에게서 구세주가 십자가에 못 박힌다. 오늘날에는 인간이 대체 무엇인지 아는 사람이 드물다. 인간이 무엇인지 감을 잡은 사람들은 죽을때 더 가벼운 마음으로 죽는다. 이 이야기를 다 쓰고나면 나도 더 가벼운 마음으로 죽는다. 이 이야기를 다 쓰고나면 나도 더 가변운 마음으로 죽을 것이다.

 

나 자신이 무언가를 안다고 말할 수는 없다. 나는 그냥 탐색하는 사람이었고 지금도 그렇지만, 이제는 별들과 책들에서 탐색하지 않고 그저 내 안에서 피가 속삭이는 가르침에 귀를 기울이기 시작했다. 내 이야기는 꾸며낸 이야기들처럼 편안하지도, 달콤하거나 잘 다듬어지지도 않았다. 내 이야기는 오히려 거짓말을 원치 않는 모든 사람의 삶이 그렇듯이 부조리와 혼란,꿈과 광기의 맛이 난다.

모든 사람의 삶은 제각기 자기 자신에게로 이르는 길이다. 자기 자신에게로 가는 길의 시도이며 좁은 오솔길을 가리켜 보여준다. 그 누구도 온전히 자기 자신이 되어본 적이 없건만, 누구나 자기 자신이 되려고 애쓴다. 어떤 이는 둔하게 , 어떤 이는 더 환하게 , 누구나 제가 할 수 있는 방식으로 누구나 제탄생의 찌꺼기를 ,저 근원세게의 점액질과 알껍질을 죽을때 까지 지니고 다닌다.

 

어떤 이들은 결코 인간이 되지 못하고 개구리나 도마뱀이나 개미로 남아있다. 어떤 이들은 상체는 인간인데 하체는 물고기다. 하지만 누구나 인간이 되라고 던진 자연의 내던짐이다. 그리고 모든 사람의 기원, 그 어머니들은 동일하다. 우리는 모두 같은 심연에서 나왔다.하지만 깊은 심연에서 밖으로 내던져진 하나의 시도인 인간은 누구나 자신만이 목적지를 향해 나아간다. 우리는 서로를 이해할 수는 있지만, 누구나 오직 자기 자신만을 해석할 수 있을 뿐이다.

 

내가 열 살 때 우리 소도시의 라틴어 학교에 다니던 시절의 체험으로 이야기를 시작해본다. 그 시절로부터 짙은 향기가 풍겨와 내면에서부터 아픔과 상쾌한 전율로 나를 건드린다. 어두운 골목길들과 밝은 집들과 탑들, 시간을 알리는 종소리와 사람들의 얼굴 , 따스한 안락함과 쾌적함으로 가득 찬 방들 , 비밀과 유령에 대한 깊은 두려움으로 가득 찬 방들 , 따스한 비좁음, 작은 토끼와 하녀들 , 온갖 가정상비약, 말린 과일의 향기가 풍겨온다. 두 세계가 거기 한데 뒤섞여 있었다. 두 극단에서 낮과 밤이 나왔다.

 

한 세계는 아버지의 집인데 이 세계가 더 좁다. 실제로는 오직 나의 부모님만이 있는 세계였다. 내가 잘 아는 그 세계는 어머니와 아버지라는 이름, 사랑과 엄격함, 모범과 학교라는 이름으로 불렸다. 온화한 광채, 명료함과 깨끗함이 이 세계의 것이었고, 부드럽고 친절한 이야기, 깨끗이 씻은 손과 옷가지 좋은 습관이 여기 속했다. 아침에 찬송가를 부르고 크리스마스를 축하하는 곳이기도 했다. 이 세계에는 미래로 통하는 곧은 선들과 길들이 있었다. 의무와 죄 양심의 가책과 참회, 용서와 좋은 의도, 사랑과 존경, 성경말씀과 지혜가 있었다.삶을 분명하고 깨끗하게 , 아름답고 질서 있게 하려면 이 세계에 머물러야 했다.

 

또 다른 셰계는 우리 집 한가운데서 시작하지만 전혀 다른 세계였다. 냄새도 다르고,말도 다르고, 약속이나 요구도 달랐다. 이 두번째 세계에는 하느들과 기술을 배우는 견습공들이 있었다. 거기에는 귀신 이야기와 추잡스러운 소문들이 있었고 끔찍한것, 유혹적인 것, 무시무시한 것, 수수께끼 같은 온갖 것이 있었다. 도살장이며 감옥, 술 취한 사람들과 말다툼하는 여자들, 새끼를 낳는 암소들, 쓰러진 말들이 있었고 강도질, 사람을 때려죽인 일, 자살 등의 이야기들도 있었다.이런 모든 아름답고도 무섭고, 사납고도 잔인한 일들이 사방에 있었다. 바로 다음 골목에서 , 바로 옆집에서 경찰관과 부량자들이 이리저리 돌아다녔다. 술에 취한 사내들이 마누라를 두들겨 패고, 저녁이면 공장에서 젊은 아가씨 무리가 쏟아져나오고, 노파들이 사람을 마법에 걸리게 만들거나 병이 들게도 하고, 숲에는 강도들이 살며 방화범들이 경관들에게 붙잡혔다.

 

아버지와 어머니가 있는 우리 방들만 빼고는 사방 어디서나 이 두번째의 격한 세계가 쏟아져들어와 냄새를 풍겼다. 그것이 참으로 좋았다. 우리집에 평화와 질서와 휴식이 있다는 사실, 의무와 선한 양심, 용서와 사랑이 있다는 사실이 멋졌다. 그리고 단 한 번만 폴짝 뛰면 재빨리 어머니에게로 도망칠 수 있는 곳에 다른 온갖 것도 다 있고, 그 모든 날카로운 소리와 어둡고도 폭력적인 것이 있다는 사실도 멋졌다. 가장 이상한 일은 그 두 세계가 나란히 붙어 있다는 것이었다. 두 세계는 얼마나 가까이 붙어 있었던가! 예를 들면 우리집 하녀 리냐는 저녁예배 시간에는 거실 문가에 앉아 깨끗이 씻은 두 손을 매끈하게 다린 앞치마 위에 얹은 채 밝은 목소리로 우리와 함께 노래를 부르곤 했다.

 

그럴 때 그녀는 완전히 아버지와 어머니의 세계,우리의 세계 , 밝고 올바른 세계에 속했다. 그리고 나서 곧바로 부엌이나 외양간에서 내게 머리 없는 난쟁이 이야기를 해줄 때나 작은 푸줏간에서 이웃 아낙네들과 싸움질을 할때면, 전혀 다른 사람이 되어 다른 세계에 속했고 비밀에 둘러싸인 사람이 되었다.모든 것이 그런 식이었다. 나 자신이 가장 그랬다. 물론 나는 밝고 울바른 세계에 속했고 우리 부모님의 자식이었지만, 눈과 귀를 어디로 향하든 어디에나 또다른 것이 있었다. 그것이 내게는 때때로 낯설고 무시무시했고 또 그곳에서는 규칙적으로 양심의 가책과 두려움을 얻곤 했지만, 그래도 나는 이 다른 것들 속에서도 살고 있었다. 심지어 이따금은 이 금지된 세계에 사는것이 가장 좋기도 했다. 그리고 밝은 세계로 돌아오는 일이 꼭 필요하고도 좋은 일이었건만 덜 아름다운, 더 지루하고도 황량한 곳으로 돌아오는 것 처럼 느껴질 대가 많았다. 내 삶으 목표는 아버지와 어머니처럼 되는것, 그토록 밝고 순수하고, 그토록 뛰어나고 잘 정돈된 상태가 되는 것이었다.

 

하지만 거기에 이르는 길은 아득히 멀었고, 거기 도달하려면 학교에 앉아 공부를 하고 연습을 하고 시험을 보아야 했다. 그 길은 언제나 또다른 더 어두운 세계의 바로옆을 스쳐지나가거나 아예 그 세계 한가운데를 통과하는 길이었으니, 그곳에 머물러 거기 빠져드는 것도 아주 불가능한 일만은 아니었다. 그것을 나는 알고 있었다. 잃어버린 아들들에 대한 이야기들이 이었는데, 그들에게 바로 그런 일이 일어났던 것이다. 나는 그런 이야기들을 탐독했다. 거기선 언제나 아버지와 선한 세계로 돌아오는 것이 구원이며 위대한 일이었다.나는 그것만이 올바르고 선하고 바람직한 일임을 분명히 느끼고 있었다. 그런데도 그런 이야기에서 악당과 잃어버린 아들들 사이에 벌어지는 이야기 부분이 훨씬 더 매력적이었고, 당시 솔직하게 말해도 되었다면 잃어버렸던 아들이 참회하고 다시 제 길을 찾는 것이 때때로 퍽이나 유감이었다. 하지만 그런 말은 물론 입 밖에 내지 않았고 또 생각도 하지 않았다.

 

그냥 예감이나 막연한 가능성처럼 감정의 맨 밑바닥에 아슴푸레하게만 존재했다. 악마를 상상할 때면 나는 언제나 악마가 저 거리 아래쪽에 있는 모습을 아주 똑똑히 떠올릴 수 있었다. 변장하거나 아니면 아예 변장도 하지 않은 채로, 또는 연시가 열리는 시장이나 선술집 같은 데 이쓴 모습을 상상할 수 있었지만 우리 집에 있는 것은 상상조차 할 수 없었다. 나의 누이들도 물론 밝은 세계에 속했다. 누이들이 본질적으로 아버지와어머니에게 더 가까이 있다는 생각이 자주 들었다. 그들은 나보다 더 착하고 예의도 바르고 실수도 적었다. 그들도 결점이 있고 무례할 때도 있었지만 그런 점은 그리 심각할 정도는 아니었다. 어두운 세계에 훨씬 더 가까이 있는 나의 경우처럼 사악함과의 접촉이 툭하면 그토록 무겁고도 고통스러운 것이 되지 않았던 것이다.

 

누이들은 부모님과 마찬가지로 보호하고 존중해야 할 존재들 이었고, 그들과 싸움이라도 하고 나면 나중엔 언제나 스스로의 양심 앞에서 나 자신이 문제를 일이킨 나쁜 쪽으로, 용서를 구하지 않으면 안 되는 쪽으로 여겨지곤 했다. 누이들과의 다툼으로 부모님을 욕되게 하고, 선함과 계율을 욕되게 했기 때문이다. 내게는 누이들보다는 오히려 가장 못된 부랑아들과 함께 나눌 수 있는 비밀들이 있었다. 마음이 밝고 양심에 가책이 없는 좋은 날에는 누이들과 놀면서 그들과 함께 선량하고 단정해지고, 그래서 싹싹하고 고상한 자신을 보는 일이 퍽 즐거웠다. 인간이 천사라면 무릇 그래야 한다! 그것은 우리가 아는 한 가장 훌륭한 것이었고, 그렇게 밝은 울림과 크리스마스의 향기와 행복에 둘러싸인 천사가 되는 것이야말로 달콤하고도 좋은 일이었다.

 

오 그런 시간과 날들은 얼마나 드물게만 찾아왔던가! 선량하고 천진스럽게 허용된 놀이를 하면서도 나는 누이들이 견디기 힘들어하는 결국 싸움과 불행으로 끝날 정열과 과격함에 자주 휩싸이곤 했다. 그런 다음 분노가 닥쳐오면 나는 아주 역겨운 놈이 되어서 스스로 행동하고 말하는 도중에 벌써 그것이 못돼먹은 일임을 깊고도 뜨겁게 느끼는 일들을 행하고 말하고야 말았다. 그러고 나면 고약하고 어두운 후회와 참회의 시간들이 찾아왔다. 그다음 용서를 구하는 괴로운 순간들이 오고 그제야 다시 명량함의 광채, 분열되지 않은 고요하고 고마운 행복이 겨우 몇 시간 , 또는 몇 순간 지속되었다.

'정보' 카테고리의 다른 글

티몬 뚜레쥬르 21%할인/ 2만원권 15,900원 할인  (0) 2019.04.15
우주 호텔  (0) 2018.01.22
콜럼버스 항해의 진실  (0) 2018.01.21
퍼펙트스타종합보험 약관  (1) 2018.01.20
응급처치 요령 <2>  (0) 2018.01.14

코드 블록과 제어문의 종류


프로그램은 명령문의 집합으로 구성되어 있다. 코드 블록(Code Block)은 프로그램의 명령문을 논리적으로 결합하기 위해 그룹을 지어 나누어 놓은 것이고, 제어문은 프로그램 문장의 실행 흐름을 제어하는 명령문이다. 이 글에서는 코드 블록과 제어문의 종류를 살펴보자.


1.코드 블록

여러 명령문을 논리적으로 결합해야 할 때 중괄호 ( { } )를 사용해서 명령문 그룹을 만들어 표현한다. 

이러한 명령문 그룹을 코드 블록(Code Blodk)이라고 한다.코드 블록 안에는 변수를 선언할 수 있고 다른 코드 블록을 포함할 수도 있다.

코드 블록 안에서 선언된 변수는 코드 블록이 끝나면 더 이상 접근할 수 없다. 즉 , 변수는 자신이 선언된 코드 블록 안에서만 유효하며 코드 블록이 끝나면 더 이상 유효하지 않다. 이코드에는 Main함수의 코드 블록이 있고 그 코드 블록안에 내부 코드 블록이 있다.

outer 변수는 Main 함수의 코드 블록에 선언되고 있고, inner 변수는 내부 코드 블록안에 선언되어 있다. 따라서 outer 변수는 Main 함수 코드 블록 안의 어느 곳에서나 접근이 가능하고 , inner 변수는 내부 코드 블록 안에서만 접근이 가능하다. 1번 문장에서 outer 변수는 내부 코드 블록 안에서 접근했지만 Main 함수의 코드 블록 내부므로 접근이 가능하다. 2번과,3번 문장에서는 각 변수들이 선언된 코드 블록과 변수에 대한 접근이 같은 코드 블록에서 이뤄졌으므로 당연히 접근이 가능하다. 그러나 4번 문장은 내부 코드 블록에서만 유효한 inner 변수를 내부 코드 블록의 외붕서 접근하려고 하기 때문에 오류가 발생한다.


 

      int inner ;


      outer = 5 ;    ---------------------1번

     

      inner = 10 ;   ---------------------2번



      outer = 6 ;             -------------3번


      inner = 12 ; // 오류  -------------4번




2.제어문의 종류

프로그램을 실행할 때는 논리적인 흐름이 필요한데, 이러한 문장의 논리적인 흐름을 통제 해주는 것이 제어문이다. 제어문은 성격에 따라 조건문, 반복문, 그리고 점프문으로 구분할 수 있다.

<조건문>

조건문은 조건식의 값에 따라 각각에 해당되는 명령문을 수행한다. 조건문에는 if문과 switch문이 있다.

- if문 : 조건식의 참/ 거짓 여부에 따라 명령문을 수행한다.

- switch문 : 조건 값과 맞는 부분의 명령문을 수행한다.

<반복문> 

반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다. 반복문에는 while문, do문, for문, foreach문이 있다.

-while문 : 조건식의 참/거짓 여부에 따라 명령문을 반복 수행한다.

-do문 : 먼저 명령문을 수행한 후 조건식의 참/거짓 여부에 따라 반복 수행 여부를 결정한다.

-for문 : 반복횟수가 정해져 있는 경우 명령문을 반복 수행한다.

-foreach : 컬렉션이나 배열의 멤버에 접근해서 명령문을 수행한다.

<점프문>

제어권을 이동시킬 때 점프문을 사용한다. 점프문에는 goto문, break문, contnue문이 있다.

-goto문 : 제어권을 해당 레이블로 이동시킨다.

-break문 : 반복문이나 switch 문의 코드 블록으로부터 빠져나오게 한다.

-continue문 : 제어권을 조건식으로 이동시킨다.


조건문 

조건문은 조건식의 값에 따라 각각에 해당하는 명령문을 수행한다. 조건문에는 if문과 switch문이 있다.


1.if문

if문은 조건식에 따라 각각에 해당하는 명령문을 실행하는데, 다음과 같이 사용한다.


  if(조건식)

              명령문 ; // 조건식이 참일 때 실행


  else

              명령문 ; // 조건식이 거짓일 때 실행 

if문은 조건식을 조사해서 조건식이 참일면 명령문1을 수행하고 조건식이 거짓이면 명령문2를 수행한다. 실행 명령문이 한 문장 이상일 때는 다음처럼 중괄호를 사용해서 코드 블록으로 묶어주면 된다.


2.switch문

if문 중에 if... else if ... else문은 조건식을 위에서부터 순차적으로 조사한다. 이 경우 특정 조건에 대한 명령문이 가장 아래에 있다면 상위의 모든 조건을 다 조사해야 하는데, 명령문이 길 경우 많은 시간이 걸린다. 이 경우 switch문을 사용하면 이러한 불편함을 해소 할 수 있다. switch문은 조건변수에 해당하는 특정 레이블로 이동한 후 명령문을 바로 실행할 수 있다. 기본 구문은 아래와 같다.


  switch(조건변수) {


   case 값1 :

       // 조건변수의 값이 값1과 일치할 때 실행

       명령문1 ;

       break ;  


        Case 값2 :

        // 조건변수의 값이 값2와 일치할 때 실행

       명령문2 ;

       break;

      ...


   case 값n : 

        // 조건변수의 값이 값n과 일치할 때 실행

       명령문n ;

       break;


   default :

       // 어떠한 값도 만족하지 않을 때 실행

       명령문z ;

       break;

     }

 


switch문은 조건변수에 입력된 값과 case문의 레이블 값이 일치하는 case 블록으로 제어권을 넘기고 해당 case 블록의 명령문을 실행한다. 일치하는 값이 없다면 default 블록으로 제어권이 이동되어 명령문z를 실행한다. 조건변수와 일치하는 case문 레이블 값이 없고 default 블록도 없다면, switch문의 가장 마지막으로 제어권이 이동한다.

num변수의 값을 5로 나눈 나머지의 값과 동일한 값을 포함하는 case 블록으로 이동해서 해당 case 블록의 명령문을 수행한다. 

C#은 C, C++, 자바와 달리 조검 검사를 순차적으로 하지 않는다. 따라서 모든 case문 블록 끝에는 반드시 점프문인 break문이나 return문, throw문 , goto문을 실행해서 제어권을 종료하거나 이동해줘야 한다. 또한 조건변수에 올 수 있는 자료형은 정수형, 문자형, 열거형 , string형이다.


반복문

반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다. 반복문에는 while문 , do문, for문, foreach문 등이 있다.


1.while문

while문은 조건식을 만족하는 동안 반복적으로 실행하는데, 기본 구문은 아래와 같다.

  while (조건식) {

            명령문1 ;

            명령문2 ;

             ...

            명령문n ;

  } 

while문의 조건식을 조사해서 참이면 코드 블록 안의 명령문을 차례대로 수행한다. 마지막 명령문이 실행되면 조건식을 다시 조사하는데, 조건식이 참이면 다시 명령문을 수행하고, 거짓이면 while문을 빠져나온다. 즉, 조건식이 참인 동안 명령문을 반복해서 수행한다.


2.do ... while문

while문의 경우 조건식이 거짓이면 while문 안의 명령문을 한 번도 수행하지 않는다. 하지만 경우에 따라서는 명령문을 먼저 실행한 후에 조건을 검색해야 할 때도 있다. 이런 경우 do ... while문을 사용한다.기본구문과 순서도는 아래와 같다.

  do { 

              명령문1 ;

              명령문2 ;

              ...

              명령문n ; 

  } while (조건식)  

do  ... while문은 코드 블록 안의 명령문을 먼저 수행한 후에 조건식을 조사한다. 조건식의 참/ 거짓 여부에 따라 코드 블록 안의 문장을 다시 수행하거나 do  ... while문을 빠져 나온다. 따라서 처음 한 번은 반드시 수행하고 그 후에 조건에 따라 반복 여부가 결정된다.

while문에서 사용했던 예제를  do  ... while문을 사용해서 수정할 수 있다.


3.for문

while문과 do ... while문이 조건에 따라 반복 수행한다면 for문은 반복 횟수가 먼저 결정 되었을 때 사용한다. 기본 구문과 순서도는 다음과 같다. 

  for(초기 값, 조건식; 증감){

             명령문1;

             명령문2;

             ...

             명령문n;

   }  

이와 같이 프로그래머가 실수로 증감 부분인 i++를 쓰지 않아 변수 i값을 증가시키지 않는다면 이 코드는 무한히 반복된다. for문의 

경우 증감 부분이 for문에 반드시 포함되어야 하므로 이와 같은 실수를 줄일 수 있다.


점프문

제어권을 이동시킬때 점프문을 사용한다. 점프문에는 goto문, break문, continue문이 있다.


1.goto문

goto문은 프로그램 실행의 제어권을 이동시킨다. goto문이 지시하는 레이블은 반드시 존재해야 하고 goto문이 접근 가능한 위치에 있어야 한다. goto문은 사용된 곳보다 상위 코드 블록으로는 제어권을 이동할 수 있지만 하위 코드 블록으로는 제어권을 이동할 수 없다.

goto문을 사용하면 자칫 프로그램의 흐름을 혼란스럽게 만들 수 있기 때문에 switch문 외에는 사용을 자제하는 편이 좋다.


2.break문 , continue문

break문의 역할은 반복문의 코드 블록 밖으로 제어권이 나오게 하는 것이다. 이와 비슷하지만 continue문은 제어권을 반복문의 조건식으로 이동시킨다. 문장에서 break문을 만나면 반복문(while문, do ...while문, for문 , foreach문)이나 switch문은 실행을 멈춘다. 이에 반해서 continue 문을 만나면 반복문의 조건식을 다시 조사해서 실행여부를 결정한다.


예외처리

개발한 프로그램이 실행 중에 오류가 나거나 멈출 수 있는데, 이러한 현상을 통틀어 예외현상 이라고 한다. 예외현상은 프로그램을 만드는 개발자도 예상하지 못하는 경우가 많다. 특히 값을 입력받아서 출력하는 경우에 입력 값에 따라 오류가 발생할 수도 , 그렇지 않을 수도 있기 때문이다. 예를 들어 다음과 같은 경우를 생각해 볼 수 있다.

-사용자에게 정수형 변수 A를 입력받는다.

-사용자에게 정수형 변수 B를 입력받는다.

-A를 B로 나눈값, 즉 (A%B) 값을 정수형 변수 C에 저장한다.

-C 값을 사용자에게 출력해서 보여준다.

이경우에서 A=4, B=2 를 입력 받으면 C=A/B = 4/2 =2 를 정상적으로 출력해서 사용자에게 보여준다. 그러나 사용자가 B값에 2가 아닌 0을 입력했다고 생각해보자. C = A/B = 4/0 , 즉 정수 4를 0으로 나누는 연산이 시작된다. 이 경우 오류가 발생하며 프로그램이 실행 중에 강제적으로 멈출 수 있다. 이는 예외 현상의 간단한 예이며, 예외현상은 프로그램의 크기가 클수록 발생할 확률이 높다. 따라서 프로그램의 비정상적인 종료나 오류발생을 방지하기 위해서 예외처리를 해줘야 한다.




'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문  (0) 2018.03.10
프로그램 구성 요소  (0) 2018.03.10
C#  (0) 2018.03.09
프로그래밍 언어  (0) 2018.03.08

1.코드 블록과 제어문의 종류


프로그램은 명령문의 집합으로 구성되어 있다. 코드 블록(Code Block)은 프로그램의 명령문을 논리적으로 결합하기 위해 그룹을 지어 나누어 놓은 것이고, 제어문은 프로그램 문장의 실행 흐름을 제어하는 명령문이라 할 수 있다. 이 절에서는 블록과 제어문의 종류를 알아보도록 한다.


<코드블록>

여러 명령문을 논리적으로 결합해야 할 때 중괄호( { } ) 를 사용해서 명령문 그룹을 만들어 표현한다. 이러한 명령문 그룹을 코드 블록(Code Block) 이라고 표현 한다. 코들 블록 안에는 변수를 선언할 수 있고 다른 코들 블록을 포함할 수도 있다. 코드 블록 안에서 선언된

변수는 코드 블록이 끝나면 더 이상 접근할 수 없다. 즉 , 변수는 자신이 선언된 코드 블록 안에서만 유효하며 코드 블록이 끝나면 더 이상 유효하지 않는다. 이 코드에는 main 함수의 코드 블록이 있고 그 코드 블록 안에 내부 코드 블록이 있다. outer 변수는 Main 함수의 코드 블록에 선언되어 있으며, inner 변수는 내부 코드 블록안에 선언되어 있다. 따라서 outer 변수는 Mail 함수 코드 블록 안의 어느 곳에서나 접근이 가능하며, inner 변수는 내부 코드 블록 안에서만 제한적인 접근이 가능하다고 할 수 있다.


<제어문의 종류>

프로그램을 실행할 때에는 논리적인 흐름이 필요하다. 이러한 문장의 논리적인 흐름을 통제해주는 것이 제어문의 역할이다. 제어문은 성격에 따라 조건문 ,반복문, 그릭 점프문으로 구분할 수 이있다. 

조건문은 조건식의 값에 따라 각각에 해당되는 명령문을 수행한다. 조건문에는 if문과 switch문이 있다.

▶ if문 : 조건식의 참/거짓 여부에 따라 명령문을 수행한다.

▶ switch문 : 조건 값과 맞는 부분의 명령문을 수행한다.


반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다. 반복문에는 while문 ,do문 , for문, foreach문이 있다.

▶while문 : 조건식의 참/거짓 여부에 따라 명령문을 반복 수행할 수 있다.

▶do문 : 먼저 명령문을 수행한 후 조건식의 참/거짓 여부에 따라 반복 수행 여부를 결정할 수 있다.

▶for문 : 반복횟수가 정해져 있는 경우 명령문을 반복 수행할 수 있다.

▶foreach문 : 컬렉션이나 배열의 멤버에 접근해서 명령문을 수행할 수 있다.


점프문은 제어권을 이동시킬 때 점프문을 사용한다. 점프문에는 goto문, break문, contine문이 있다.

▶goto문 : 제어권을 해당 레이블로 이동시킨다.

▶break문 : 반복문이나 switch 문의 코드 블록으로부터 빠져나오게 한다.

▶continue문 : 제어권을 조건식으로 이동시킬 수 있다.


2.조건문


조건문은 조건식의 값에 따라 각각의 해당되는 명령문을 수행하게 된다. 조건문에는 if문과 switch문이 있다.


<if문>

if문은 조건식에 따라 각각에 해당하는 명령문을 실행하는데, 다음과 같이 사용한다.

if문은 조건식을 조사해서 조건식이 참이면 '명령문1'을 수행하고 조건식이 거짓이면 '명령문2'를 수행한다. 실행 명령문이 한 문장 이상일 때는 다음처럼 중괄호를 사용하여 코드블록으로 묶어주면 된다. age변수 값이 18보다 크면 login 변수 값을 true로 할당하고 화면에 "당신을 환영합니다" 라는 메시지를 보여준다. 반대로 age 변수 값이 18보다 작거나 같으면 login변수에 할당되는 값은 false며 성인만 입장이 가능합니다라는 메시지를 보여준다.

01 using system;

02

03 class Ifstate
04 {

05  static void Main (string [ ] args)

06  {

07     int age;

08     bool login; 

09

10     age = 25 ; // age에 값 할당

11

12     if (age > 18)

13     {

14          login = ture;

15         Console.Writeline ( "당신을 환영합니다") ;

16     }

17  

18          else

19     {

20        login = false;

21        console.Writeline ("성인만 입장이 가능합니다!");

22      }

23    }

24  }


10행에서 age 변수에 25를 할당했으므로 실행결과는 다음과 같다.


당신을 환영합니다.

Press any key to continue 


여기서는 조건식1을 만족해서 참이면 명령문1을 수행한 후 종료하고, 조건식1이 거짓이면 조건식2를 조사하게 된다. 조건식2가 참이면 명령문2를 수행한후 종료하지만 거짓일경우 다음 조건식 3을 조사하게 된다. 이러한 방식으로 '조건식n' 까지 반복해서 만족하는 조건식이 없을 경우 else문 안의 명령문z를 실행한다.


<switch문>

if문 중에 if..... eles if.... else문은 조건식을 위에서부터 순차적으로 조사한다. 이 경우 특정 조건에 대한 명령문이 가장 아래에 있다면 상위의 모든 조건을 다 조사해야 하는데, 명령문이 길 경우 많은 시간이 걸린다. 이 경우 switch문을 사용하면 이러한 불편함을 해소 할 수 있다. switch문은 조건 변수에 해당한ㄴ 특정 레이블로 이동한 후 명령문을 바로 실행할 수 있다. 

switch문은 조건 변수에 입력된 값과 case문의 레이블 값이 일치하는 case 블록으로 제어권을 넘기고 해당 case 블록의 명령문을 실행한다. 일치하는 값이 없다면 default 블록으로 제어권이 이동되어 '명령문z'를 실행하게 된다. 조건변수와 일치하는 case문 레이블 값이 없고

default 블록도 없다면, switch문의 가장 마지막으로 제어권이 이동한다.



3.반복문


반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행하는 것을 말한다. 반복문에는 while문 , do문 , for문, foreach문이 있다.


<while문>

while문은 조건식을 만족하는 동안 반복적으로 명령문을 실행하는데, 기본 구문은 다음과 같다. while문의 조건식을 조사하여 참이면 코드블록 안의 명령문을 차례대로 수행한다. 마지막 명령문이 실행되면 조건식을 다시 조사하는데, 조건식이 참이면 다시 명령문을 수행하고 거짓일경우 while문을 빠져 나온다. 즉 조건식이 참인 동안 명령문을 반복하여 수행한다. 변수 i의 값이 0으로 초기화 되어있을 경우 while문 안의 명령문을 수행하고, 변수i 값은 1씩 증가된다. 따라서 0부터 9까지의 숫자를 콘솔 화면에 출력하고 프로그램이 종료된다.


<do while문>

while문의 경우 조건식이 거짓이면 while문 안의 명령문을 한 번도 수행하지 않는다. 하지만 경우에 따라서는 명령문을 먼저 실행한 후에 조건을 검색해야 할 때도 있다. 이런 경우 do... while문을 사용한다. do... while문은 코드 블록 안의 명령문을 먼저 수행한 후에 조건식을 조사한다. 조건식의 참/거짓 여부에 따라 코드 블록 안의 문장을 다시 수행하거나 do... while 문을 빠져 나온다. 따라서 처음 한 번은 반드시 수행하고 그 후에 조건에 따라 반복 여부가 결정된다.


<for문>

while문과 do....while문이 조건에 따라 반복 수행한다면 for문은 반복 횟수가 먼저 결정 되었을때 사용한다. 기본 구문과 순서도는 다음과 같다.

 for (초기 값 ; 조건식; 증감) {

                명령문1;

                명령문2;

                ...

                명령문3;

   } 

이와같이 프로그래머가 실수로 증감 부분이 i++를 쓰지않아 변수 i값을 증가시키지 않는다면 이 코드는 무한히 반복된다.

for문의 경우 증감 부분이 for문에 반드시 포함되어야 하므로 이와 같은 실수를 줄일수 있다.

변수i에 초기 값0을 할당하고, 조건식 (i<10)을 조산한다. 초기 값이0으로 조건식에 만족하므로 명령문을 실행한다. 그 후에 증감(i++) 부분을 수행하면 변수 i의 값은 1이 된다. 다시 조건식 (i<10) 조사해서 참이면 명령문을 수행하게 된다. 변수 i값은 루프를 반복할 때마다 1씩 증가할 것이고 변수i의 값이 10에 도달하기 전까지는 for문 코드 블록안의 명령문을 반복적으로 실행한다. 변수 i를 사용할 때는 변수의 코드 블록의 유효 범위에 주의해야 한다. 


<foreach문>

일련의 데이터를 객체 하나에 저장하고자 할 때 우리는 배열이나 컬렉션 객체를 이용한다. foreach문은 이런 배열과 컬렉션 객체 내의 데이터에 접근할 때 사용된다. Araylist 객체를 사용하려면 System.Collections 네임스페이스를 먼저 표기해줘야 한다. 코드 블록 부분에서는 Arraylist 객체를 만들고 for문을 통해 멤버들을 Arraylist 객체인 numbers에 추가시킨다. 코드 블록에서는 numbers 객체인 일련의 데이터인 멤버를 모두 찾아 화면에 출력해 준다.


4.점프문


제어권을 이동시킬 때 점프문을 사용한다. 점프문에는 gogo문, break문, continue문이 있다.


<goto문>

goto문은 프로그램 실행의 제어권을 이동시킨다. goto문이 지시하는 레이블은 반드시 존재해야 하고 goto문이 접근 가능한 위치에 있어야 한다. goto문은 사용된 곳보다 상위 코드블록으로는 제어권일 이동할 수 있지만 하위 코드 블록으로는 제어권을 이동할 수 없다. 

goto문을 사용하면 자칫 프로그램의 흐름을 혼란스럽게 만들 수 있기 때문에 switch문 외에는 사용을 자제하는 편이 좋다.


<break문,continue문>

break문의 역할은 반복문의 코드 블록 밖으로 제어권이 나오게 하는 것이다. 이와 비슷하지만 continue문은 제어권을 반복문의 조건식으로 이동시킨다. 문장에서 break문을 만나면 반복문(while문, do...while문, for문, foreach문) 이나 switch문은 실행을 멈춘다. 이에 반해서 continue문을 만나면 반복문의 조건식을다시 조사해서 실행여부를 결정한다. 명령문 실행중 break문을 만나면 곧바로 반복문을 빠져 나온다. 9행의 for문을 통해 ,i가 1씩 증가하면서 11행에서 i값과 3을 나누었을때 나머지가 0인지 체크한다.i가 3이 되어 나머지가 0이되자 ,break문을 통해 for문을 빠져 나간다.



5.예외처리


개발한 프로그램이 실행 중에 오류가 나거나 멈출 수 있는데, 이러한 현상을 통틀어 예외현상 이라고 한다. 예외현상은 프로그램을 만드는 개발자도 예상하지 못하는 경우가 많다. 특히나 값을 입력받아서 출력하는 경우에 입력 값에 따라 오류가 발생할 수도,그렇지 않을 수도 있기 때문이다. 예를 들어 아래와 같은 경우를 생각해 볼 수 있다.

-사용자에게 정수형 변수 A를 입력받는다.

-사용자에게 정수형 변수 B를 입력받는다.

-A를 B로 나눈 값, 즉 (A%B) 값을 정수형 변수 C에 저장한다.

-C 값을 사용자에게 출력해서 보여준다.


이 경우에서 A=4 , B=2를 입력받으면 C = A/B = 4/2 =2 를 정상적으로 출력해서 사용자에게 보여준다. 그러나 사용자가 B값에 2가 아닌 0을 입력했다고 가정해보자. C= A/B = 4/0 , 즉 정수 4를 0으로 나누는 연산이 시작된다. 이 겨우 오류가 발생하며 프로그램이 실행중에 강제적으로 멈출 수 있다. 이는 예외 현상의 간단한 예제며, 예외현상은 프로그램의 크기가 클수록 발생할 확률이 높다. 따라서 프로그램의 비정상적인 종료나 오류발생을 방지하기 위해서 예외처리를 해줘야 한다. 




'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문의 종류  (0) 2018.03.10
프로그램 구성 요소  (0) 2018.03.10
C#  (0) 2018.03.09
프로그래밍 언어  (0) 2018.03.08

지금까지 비주얼 스튜디오 닷넷을 사용해서 간단한 C# 프로그램을 작성 실행하고 기본 구조를 공부해 보았다. 그러나 이해만 하고 넘어간 부분들에 대해 무언가 부족한 점이 많다고 느껴졌을 것이다. 이러한 점들은 기본이 되는 C# 문법을 배워가면서 차근차근 풀어보자.

일반적으로 프로그램을 작성할 때에는 C#이나 C, C++등의 언어를 사용한다. 언어는 언어를 구현하기 위한 나름대로의 체계적인 문법이 있다. C#언어도 자체적인 문법 체계가 있으며, 개발자나 문법에 따라 프로그램을 작성한다. 먼저 C# 문법에서 기본적으로 살펴봐야 할 것이 무엇인지 알아보자.


네임스페이스를 정의할 때 사용하는 namespace, 그리고 클래스 정의를 위해서 클래스 이름앞에 써주는 class는 그 나름의 의미가 있으며

특별한 기능을 수행한다. 따라서 namespace, class, using, public 등은 C#에서 이미 정의한 키워드(keyword)라고 부른다. 이런 키워드들은 C#에서 정의한 방법대로 사용해야 한다.그리고 클래스인 Hello와 Greeting은 프로그램 개발자가 각각의 클래스를 식별하기 위해 각각의 이름을 직접 붙인 것이다. 이렇게 식별을 위해 붙여진 이름을 Identifier (식별자)라고 한다. MyApplication도 네임스페이스를 식별하기 위한 이름 , 즉 식별자가 되는 것이다. 이제부터 C# 프로그램을 구성하는 기본적인 구성 요소인 키워드, 식별자, 상속, 연산자, 구분자에 대하여 자세히 알아보자.


▣ 키워드 


키워드(keyword)는 앞서 알아봤듯이 C#에서 특별한 의미가 있는 예약어이다. 따라서 C#에서 정의한 방법대로 사용해야 된다. 그리고 C#을 배운다는 것을 달리 표현한다면 이런 키워드의 용법을 배우는 것이라고 생각할 수도 있다. C#에서 정의된 키워드에는 어떤것이 있는지를 익혀보자.


 abstract

 as 

base 

bool 

break 

byte 

case 

catch 

char  

checked 

class 

const 

continue 

decimal 

default 

delegate 

 do

double 

else 

enum 

event 

explicit 

extem 

false 

 finally

fixed 

float 

for 

foreach 

goto 

if 

implicit 

in 

int 

interface 

internal 

is 

lock 

long 

namespace 

new 

null 

object 

operator 

out 

override 

params 

private 

protected 

public 

readonly 

ref 

return 

sbyte 

sealed 

short 

sizeof 

stackalloc 

static 

string 

struct 

switch 

this 

throw 

true 

try 

typeof 

uint 

ulong 

unchecked 

unsafe 

ushort 

using 

virtual 

void 

volatile 

while 

 

 

 


식별자 

식별자는 메소드, 클래스, 네임스페이스 등에 직접 붙인 식별이 가능한 이름을 말한다. 식별자를 만들때 아래와 같은 규칙을 기켜야 한다.

-식별자의 첫 글자는 영문자와 밑줄 _ 을 사용한다.

-숫자는 식별자에 포함될 수 있다. 하지만  첫 글자로는 사용할수 없다.

-키워드는 식별자로 사용을 할 수 없다.

-대문자와 소문자를 구분해서 사용해야 한다.


다음은 코드의 가독성을 높일 수 있도록 식별자의 이름을 정할 때 권장하는 사항이다.

-모든 문자를 대문자로 작성하는 것은 피해야 한다.

-밑줄 _ 을 첫 글자붙 사용하지 않는다.

-약자는 되도록 사용하지 않는다.

-특수문자의 사용을 피한다.


상수 ▣ 

잠시 저장하기 위한 공간인 변수와 대비되는 것이 상수로서, 변하지 않는 문자나 숫자 값 등을 의미한다. 상수는 정수, 실수 , 불리언 , 문자, 문자열 , 널로 분류할 수 있다.


▶ 정수형 상수 - 10진수,16진수,8진수 3가지 방법으로 표현이 가능하다. 10진수는 우리가 보통 사용하는 표현 방법이며, 16진수는 숫자앞에 OX, ox를 붙여서 16진수 표기임을 나타낸다. 그리고 8진수는 0을 앞에 붙여 8진수 표기임을 나타낸다.

▶실수형상수 - 정수 부분과 소수 부분으로 구성이 되어 있다. C#에서 실수형을 나타내는 데이터형은 double과 float이다. '12.34'를 표현할 때 '12.34'로 쓰게되면 double형 상수이고, '12.34F'로 'f' 나 'F'를 숫자 뒤에 표기하면 float형의 상수가 된다.

▶불리언형 상수 - 참,거짓을 나타내는 상수다. C,C++에서는 '0' 과 '0이 아닌수' 로 표현할 수 있지만, C#에서는 'ture' 와 'false'의 키워드를 사용해서 표현한다.

▶문자형 상수 - 유니코드 문자 하나를 작은따옴표(' ') 안에 써서 표현한다. 유니코드는 2바이트로 문자 하나를 표현하기 때문에 한글문자 '가'도 문자 상수 하나가 될수 있다.

▶문자열형 상수 - 문자들의 연속을 나타내고 큰따옴표(" ") 안에 써서 표현한다.

▶널(null)형 상수 - 한번도 사용하지 않은 객체를 나타낼때 사용하고 null이라는 키워드를 사용해서 표현한다.



데이터형과 변수 


여기에서는 데이터를 저장하기 위한 변수와 변수의 데이터형을 알아보도록 한다. 여러 프로그램 언어들은 각각의 데이터 형이 있지만,크기의 범위는 각 언어마다 다르다. 그리고 같은 언어로 int형 을 표현했다 하더라도 컴파일하는 시스템에 따라 int형의 크기가 다를 수 있다. 만약 2바이트의 int형을 쓰는 시스템에서 컴파일된 프로그램을 1바이트의 int형을 정의한 시스템에서 실행시키면 나머지 1바이트에 대한 손실로 오률가 발생할 것이다. 따라서 닷넷 프라임워크는 여러 다른 언어가 동일한 데이터형을 사용하도록 유도하기 위해서 cts를 정의하고 있다. CTS의 모든 데이터형은 객체로 정의되어 있는데 각 언어마다 자신의 데이터형을 따로 사용하지 않고 CTS에 정의된 형식의 데이터형을 사용하게 되므로 언어나 시스템 환경에 관계없이 동일한 데이터형이 유지될 수 있다.


▶숫자형 데이터 - 숫자형 데이터는 숫자 형태의 데이터를 다루기 위한 것이다. 숫자 형태의 데이터는 정수일수도 있고 실수일 수도 있다.숫자형의 변수를 선언하면서 값을 직접 할당했다. 그리고 각각 변수에 저장딘 데이터를 출력하고 있다. 실수형의 상수 데이터를 변수에 대입할 경우 각각의 형식에 따른 문자를 붙여 넣어준다. float형의 상수 데이터를 변수에 대입시킬 때는 상수 데이터 값 뒤에 f 나 F , decimal형은 m 또는 M , double형은 d 혹은 D를 붙여 넣어준다.

그리고 long형은 l 이나 L 을 붙여서 각각의 형식을 명확히 나타내줘야 한다. 상수 데이터뒤에 실수형을 표현하는 문자 (f, F, m, M, d, D)를 명기하지 않으면 자동으로 double형으로 인식학 된다.


*u로 시작하는 형식들은 unsigned라는 의미로서 음수 값은 표현하지 않고 0 이상의 값만을 다룬다. 그리고 decimal은 float과 비교할 때 범위는 작지만 유효 숫자 자릿수가 28~29로 float보다 크기 때문에 재무 및 통화 계산에 적합 하다고 할 수 있다.


▶문자형 데이터 - 문자형 데이터는 일반적인 문자를 다루는 데이터형이다. C#의 문자형은 유니코드를 사용한다. 기존의 문자형이 1바이트를 사용한데 반해 유니코드는 2바이트를 사용하기 때문에 한글이나 한자도 문자형으로 다룰수 있다.

문자들의 나열인 문자열은 값형식이 아닌 참조형식이다.그러나 사용이 빈번하므로 문자형과 같이 다루기로 한다. 문자열형은 string 키워드를 사용해서 변수를 선언한다. 기본적인 특수 문자를 사용하려면 역슬래시를 사용해야 한다. 이에대한 설명은 앞에서 간단히 언급했다.


▶불리언형 데이터 - 불리언형 데이터는 논리값이 참과 거짓의 두 가지 값을 다루는 형식이다. 불리언형에서는 키워드인 ture 와 false 두가지 값만을 인정한다.




'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문의 종류  (0) 2018.03.10
코드 블록과 제어문  (0) 2018.03.10
C#  (0) 2018.03.09
프로그래밍 언어  (0) 2018.03.08

지금까지 닷넷과 닷넷 프레임워크에 대하여 살펴봤다. 이제부터 본격적으로 C#에 대해 알아보도록 하겠다.

C#은 마이크로소프트에서 기존에 발표한 언어 중에서 가장 강력한 기능을 자랑하는 C++를 기반으로 하며,자바의 장점을 혼합하여,닷넷이라는 새로운 개념을 도입해 만든 언어라고 할 수 있다.


C#이란 이름은 C#의 모태라고 부를수 있는 C++라는 명칭에 +표시를 두개 더하여 만들어졌다. 그만큼 C++보다 더욱 발전한 언어라는 것을 강조한 것이다. 또한 사용하기 쉽고, 간단하게 배우는 것도 어렵지 않다.


C#의 장점은 보면서 빨리 개발할 수 있다는 것이다. 기존의 비주얼 베이직처럼 보면서 빨리 개발할 수 있는 RAD를 기반으로 하는 언어다.하지만 비주얼 베이직처럼 개발할 때 제약이 있지는 않다는 것이 특징이다. 그리고 윈도우 API를 사용할 수 있다.

운영체제는 수많은 API로 이뤄져 있는데, API란 운영체제를 구성하고 있는 수많은 부분을 의미하며 그 자신 또한 프로그램이다. 이러한 API를 프로그래밍에 활용하면 해당 운영체제에서의 애플리케이션을 쉽게 만들 수 있는데, 비줄얼 C++나 비주얼 베이직 같은 언어에서는 윈도우 API를 사용해왔다.


C#도 마찬가지로 API를 사용할 수 있다. 기존의 API 80%를 지원한다. 대부분의 API 함수가 C 형태로 작성되어 있기 때문에 함수의 인자를 포인터로 전달하는 경우가 많다. 그렇기 때문에 포인터를 지원하지 않는 자바의 경우에는 API의 사용이 많이 제한적이다. C#도 기본적으로는 포인터의 사용을 자제하고 있지만 필요한 경우 사용이 가능하다. 이러한 점에서 볼때 C#이 기존 API에 접근해 사용하기 유리한 언어라고 할 수 있다.


COM(component Object Model)이란 프로그램의 단위를 컴포넌트(부품)로 생각하고 개발하는 것을 의미하는데 , 하나의 언어에만 사용 가능한 것이 아니라, 여러 언어와 도구에서 범용적으로 사용이 가능하다. 예를 들어 , ASP로 개발할 때 데이터베이스를 구현하기위해 ADO 컴포넌트를 사용한다. 이런 것이 COM인데, ASP 에서뿐 아니라 비주얼 베이직이나 C++등 수많은 언어와 도구에서도 사용한다.


COM을 쉽게 사용할 수 있다란 의미는 기존 COM을 닷넷 프레임워크에서 사용할 수 있고, 닷넷 프레임워크에서 개발한 컴포넌트도 COM으로 쉽게 변환된다는 것을 말한다. 기존의 COM을 닷넷 프레임워크에서 어떻게 사용할 수 있는지 확인할 수 있다.


닷넷 프레임워크 프로그래밍 모델을 잘 반영한다. C#은 MSIL 형태로 컴파일되는 닷넷 프레임워크의 프로그래밍 모델을 가장 잘 반여하고

있으며 닷넷 프레임워크의 의도를 언어적 차원에서 가장 많이 지원한다. C#과 CLR은 비록 마이크로소프트에서 개발한 것이지만, 다양한 플랫폼에서 사용될 수 있도록 마이크로소프트를 비롯한 많은 회사에서 표준화 작업이 한창이다. 예를 들면 윈도우 서버가 아닌 유닉스/리눅스 환경에서도 C#과 CLR을 사용할 수 있는 기술들을 속속 발표하고 있다.


C#은 기존 언어들의 장점만을 이식해서 만든 언어므로 그 기능이 막강하고, 여러가지 장점이 있지만, 그 중에서도 다른 언어와 구별되는 장점으로는 가비지 컬렉터를 들 수 있다. C#에서 프로그래머가 생성했던 객체를 언제 제거해야 될까? 객체를 전혀 사용하지 않을 때가 정답이다. 메모리가 부족하거나 메모리를 청소해야 할 상황이 되면 가비지 컬렉터는 객체를 검사해서 더 이상 사용되지 않는 객체를 메모리에서 자동으로 제거해준다.


프로그래머가 객체의 소멸도 담당해야 이치에 맞겠지만 그 역할을 주로 담당하는 것이 바로 가비지 컬렉터다. 가비지 컬렉터가 제대로 활동하는지 알기는 쉽지않다. 객체를 사용하지 않는데도 전혀 호출되지 않을 수도 있고, 제거하는 순서도 가비지 컬렉터에 의해 임의적으로

결정된다. 그렇다면 이런 결점 투성이의 가비지 컬렉터를 왜 사용하는 걸까?


그 이유는 객체를 소멸해야 하는 적절한 시점을 프로그래머가 판단하기에는 너무나 복잡하고 미묘하기 때문이다. 가비지 컬렉터는 이 부분을 대신 판단해 객체를 안전하게 저거하여 준다. 물론, 시스템의 성능을 떨어뜨릴 가능성이 있지만 가비지 컬렉터를 사용함으로써 얻는

이점이 더 크기 때문에 가비지 컬렉터를 사용한 메모리의 관리를 선택한 것이다. 차세대 언어 대부분은 이러한 방식의 메모리를 관리한다


실제로 복잡한 애플리케이션에서 더 이상 객체가 사용되지 않는다는 것을 판단하는 것은 그리 간단한 일이 아니다. 판단하는 것도 어렵지만 , 그보다 더 위험한 것은 사용하지도 않는 객체의 메모리를 제거하지 않고 유지하고 있거나 , 잘못 예측하여 사용중인 객체를 제거하였다면 프로그램이 객체에 접근하는 순간 오동작을 일으킬수 있거나 갑자기 멈추는 경우가 생기기 때문이다. 따라서 C#에서는 가비지 컬렉터라는 메모리 관리자를 두어 메모리를 정리한다. 이 방법은 이전 프로그래밍 언어의 가장 큰 단점을 보완했다고 할 수 있다.


사실 C#으로 프로그램을 개발할 때, 굳이 비주얼 스튜디오 닷넷을 사용하지 않아도 괜찮다. 기본적으로 닷넷 프레임워크 SDK만 설치되어 있으면 메모장 등과 같은 문서 편집기로 C#언어 구문을 작성하고 컴파일해서 프로그램을 개발할 수 있다. 하지만 윈도우용 애플리케이션에서부터 웹 애플리케이션과 웹 서비스, 그리고 분산 환경의 애플리케이션 등 여러 복잡한 응용 애플리케이션을 개발할 때 일반 문서 편집기를 사용하는 것보다 비주얼 스튜디오 닷넷을 이용하면 좀더 편리하고 효율적으로 개발할 수 있다.


따라서 비주얼 스튜디오 닷넷 개발환경에 익숙해지는 것이 닷넷 프레임워크 애플리케이션을 개발하고자 하는 여러분에게는 중요하다고 생각한다. 이 절에서는 콘솔 응용 프로그램을 만드는 과정을 통해 비주얼 스튜디오 닷넷의 기본적인 사용방법과 개발환경을 간략히 알아본다. 비주얼 스튜디오 닷넷을 실행하면 시작 페이지가 보인다. 여기에서는 기존에 작업했던 프로젝트 목록을 보고 선택할 수 있다. 또한 온라인 리소스를 검색할 수 있으며, 비주얼 스튜디오 닷넷의 환경을 설정할 수도 있다.


본격적인 작업에 들어가기 위해 새 프로젝트를 만들어 보도록 하자. 시작 페이지의 프로젝트 탭에서 새 프로젝트 버튼을 클릭하면 대화상자가 보인다. 새 프로젝트 대화상자를 이용해서 프로젝트를 만들면 목적에 맞는 프로그램 템플릿의 기본적인 코드를 자동으로 생성해주기 때문에 초보자에게는 편리하다. 왼쪽의 프로젝트 형식에서 개발에 사용할 언어를 선택할 수 있으며, 선택한 언어와 관련해서 윈도우 응용프로그램 , ASP.NET 웹 응용 프로그램 , 콘솔 응용 프로그램과 같은 템플릿이 오른쪽의 템플릿 부분에 아이콘으로 나타난다. 대화상자 하단에는 응용 프로그램명과 생성되는 프로젝트 파일의 위치를 지정할 수 있는 입력 창이 있다.


우리는 C#으로 프로그램을 작성할 것이므로 새 프로젝트 대화상자에서 프로젝트 형식은 Visual C# 프로젝트, 템플릿은 콘솔응용 프로그램을 선택한다. 프로젝트의 이름과 위치에 적당한 이름을 정하고 확인 버튼을 클릭해서 콘솔 응용 프로그램의 프로젝트를 생성한다.

새 프로젝트를 생성하면 코드를 직접 작성하고 편집하는 코드 편집 창이 있고, 오른쪽에는 솔루션 탐색기, 클래스 뷰, 동적 도움말, 속성창이 있따. 솔루션 탐색기에서 프로젝트나 프로젝트에 포함된 C# 소스코드 ,참고하는 어셈블리 등의 항목을 관리한다. 클래스 뷰를 통해 작성 중인 프로그램의 클래스와 클래스의 멤버들을 관리할 수 있다.


프로젝트를 생성하면 기본적으로 클래스명은 클래스1, 소스파일명은 클래스1.CS로 만들어진다. 따라서 코드를 작성하기 전에 클래스명과 소스 파일명을 개발자가 알아보기 쉬운 이름으로 바꿔주는 것이 좋은데, 여기사는 솔루션 탐색기 창에서 클래스1.CS 를 Hello.cs 변경하고 코드 편집기 창에서 직접 입력하고 편집하도록 해보자. 15행인 Console.Writeline에서 보면 문장 끝에 세미콜론을 넣어 주었다. C#에서 모든 명령문은 세미콜론을 사용해서 명령문이 끝났음을 꼭 나타내줘야 하므로 주의하자.


비주얼 스튜디오 닷넷과 같은 개발 도구에서는 코드 작성 , 컴파일 및 실행 등과 같은 작업과 참조 ,데이터 연결 폴더 및 파일과 같이 개발 작업에 필요한 관련 항목들을 모두 관리할 수 있다. 이런 편리한 기능을 제공하는 환경을 통합 개발환경이라고 한다., 비주얼 스튜디오 닷넷도 개발자의 작업 능률을 높일 수 있는 통합 개발환경을 제공한다.


이처럼 통합 개발환경을 제공하는 비주얼 스튜디오 닷넷을 사용해서 프로그램을 개발하려면 솔루션 파일과 프로젝트 파일이라는 것을 관리해야 한다. 비주얼 스튜디오 닷넷에서는 새 프로젝트 대화상자를 통해 프로젝트를 생성하며 자동으로 솔루션 하나와 그 하위에 프로젝트 하나를 생성한다. 솔류션에는 여러 프로젝트가 포함될 수 있으며, 프로젝트에는 여러 C# 소스 파일이 포함될 수 있다. 또한 비주얼 스튜디오 닷넷의 솔루션 탐색기 창을 통해서 쉽게 관리할 수 있다.


솔루션을 사용하는 이유는 여러 프로젝트를 집합적으로 관리할 수 있고, 프로젝트별로 적용해야 할 구성 사항의 적용, 빌드, 배포에 있어 편리한 점을 제공하기 때문이다. 비주얼 스튜디오 닷넷에서는 확장자가 SIN 및 SUO 로 만들어진 파일을 통해서 솔루션을 관리하게 된다

프로젝트는 프로젝트 및 해당 항목 집합에 대해서 관리자가 지정하는 구성및 빌드 설정이 저장되며, 확장자가 csproj로 만들어진 파일을 통해 관리된다. 이 소스들은 솔루션과 프로젝트가 같이 만들어진 상태로 제공된다. 따라서 각 예제를 컴파일하려면 솔루션 파일을 비주얼 스튜디오 닷넷에서 솔루션 열기를 통해 불러들여서 실행해야 한다.

'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문의 종류  (0) 2018.03.10
코드 블록과 제어문  (0) 2018.03.10
프로그램 구성 요소  (0) 2018.03.10
프로그래밍 언어  (0) 2018.03.08

언어란 무엇일까? 언어는 인간이 서로의 생각과 의미를 전달하기 위해 목소리를 내고, 글자로 적는 의사소통 도구다.프로그래밍 언어도 이러한 맥락에서 출발한다.


프로그래밍 언어란 무엇인가

프로그래밍이란 컴퓨터를 이용해서 계산하거나 출력하는 등의 목적에 맞게 프로그램을 설계하고 만드는 과정을 의미한다. 즉, 사용자가 필요로 하는 프로그램을 만드는 과정을 프로그래미이라 한다. 그리고 프로그램을 만들고 정상적으로 실행하기 위해서,프로그램이 시제 실행되는 컴퓨터와 이러한 프로그램을 만드는 프로그래머가 의사 소통하는 도구를 프로그래밍 언어라 할 수 있다.


우리가 사용하는 언어에 문법과 단어,관용구가 있듯이, 프로그래밍 언어에도 문법과 단어 관용구가 있다. 또한 전 세계적으로 사용되는 언어가 다양하듯이 프로그래밍 언어도 C, C++,자바(JAVA),비주얼 베이직,C#등 매우 다양하다.

따라서 (아이가 커가면서 말과 글자를 배워야만 완전한 의사소통을 할 수 있듯이)프로그램 개발자가 되려면 적어도 한 개 이상의 프로그래밍 언어를 배우고, 적절히 구사할 수 있어야만 사용자가 필요로 하는 프로그램을 개발할 수 있다.


 

인간의 언어 

프로그래밍 언어 

 종류

한국어, 영어, 일어 ,중국어 

C , C++ ,C# , JAVA 

 목적

 인간 사이의 의사소통

프로그램의 개발 

 발전

 나라의 문화, 풍습 , 환경 , 기후 등에 따라

운영체제 , 개발환경 ,개발목적에 따라 


프로그래밍 언어의 역사

오늘날의 C#에 이르기까지 사용했던 프로그래밍 언어들을 간략하게 도식화하면 다음과 같다.

이전에 사용하던 언어들은 함수 중심적이었지만,C++를 기점으로 현재에 사용하는 언어는 객체 지향적 언어임을 알 수 있는데, 초기에 사용했던 함수 중심적 언어는 다음과 같은 단점이 있었기 때문에 객체 지향적으로 발전했다.

-나날이 다양하게 늘어나는 멀티미디어 자료를 모두 다루기 힘듦

-스스템 유지보수의 어려움

-소프트웨어적 위기상황 발생


소프트웨어적 위기상황이란 "기존의 언어로는 새로운 환경에 맞는 소프트웨어를 개발하는 것이 어렵다" 는 것을 의미한다. 이에 따라 새로운 기법의 여러 개념이 제안되었으며, 그 중에 인간의 사고 형태를 모델링한 객체 지향 개념이 해법으로 등장했다. 따라서 현재의 프로 그래밍은 객체 지향적 언어를 이용해서 , 플랫폼에 상관없이 사용할 수 있는 글로벌 객체 프로그래밍으로 발전하고 있다.


닷넷 프레임워크

마이크로소프트에서 발표한 닷넷(NET)이라는 기술과 닷넷의 중심인 닷넷 프레임워크(NET FRAMEWORK)를 다룬다. C#을 배우기 전에 닷넷과 C#의 구동 환경인 닷넷 프레임워크를 확실히 배워두면 훨씬 수월하게 C#을 이해할 수 있기 때문이다. '닷넷이란' 마이크로소프트에서 2000년 7월에 발표한 닷넷은 지금까지 존재했던 마이크로소프트사의 모든 소프트웨어 기술을 총망라하고, 다른 언어의 장점을 접목시킨 새로운 기술이다.

 비주얼 스튜디오 닷넷


 닷넷 프레임워크

윈도우 서버 시스템 

닷넷 빌딩 블록 서비스 


위 표는 닷넷의 구성 요소를 보여주는 그림으로 닷넷을 사용하려면 다음과 같은 요소가 필요하다.

⊙비주얼 스튜디오 닷넷 : C# 등의 닷넷 언어를 만들기 위한 통합 개발환경으로 2장에서 자세하게 배운다.

⊙닷넷 프레임워크 : 닷넷을 사용할 수 있게 해주는 환경을 제공한다.

⊙윈도우 서버 시스템 : 닷넷을 이용한 윈도우 프로그램 개발이나 웹사이트를 구축할 때 필요한 윈도우 요소를 지원한다.

⊙닷넷 빌딩 블록 서비스 : 닷넷의 문제를 해결하기 위해 설계된 시스템이다.


닷넷 프레임워크는 크게 두 가지로 나눌 수 있는데, 프로그램을 개발할 때 필요한 서비스 집합과 프로그램 실행 환경으로 구성되어 닷넷 프레임워크에 기반한 개발 언어에는 VB.NET , C#.NET 등이 있다.

닷넷  프레임워크의 구성 요소는 크게 '공용 언어 런타임 ( Common Language Runtime , 이하 CLR )과 닷넷 프레임워크 클래스 라이브러리로 나눌 수 있다. CLR은 닷넷을 사용할 때 여러 언어를 사용할 수 있게 해주는 기술로 바로 뒤에서 살펴볼 것이다.


닷넷 프레임워크 클래스 라이브러리는 애클리케이션을 개발할 때 필요한 기능의 묶음으로, 필요한 기능을 개발자가 일일이 만들지 않아도 이미 만들어진 클래스 라이브러리를 사용해서 구현할 수 있게 한 것이다. 클래스 라이브러리는 기본 클래스 라이브러리 ( BCI ,Basic Class Library ) 와 윈도우 사용자 인터페이스 , ASP.NET , ADO.NET 으로 나눌 수 있다.

⊙기본 클래스 라이브러리 : 클래스 라이브러리 중 가장 핵심적인 기능을 하는 클래스 모음이다.

⊙윈도우 사용자 인터페이스 : 닷넷 언어로 윈도우 프로그램을 만들 때 지원하는 클래스다.

⊙ASP.NET : 닷넷 언어로 웹 프로그래밍할 때 지원하는 클래스다.

⊙ADO.NET : 데이터베이스를 사용할 때 지원하는 클래스다.


공용언어 런타임은 다음과 같이 구성된다. CLR을 설명하기 전에 먼저, 고유 코드에 대해서 이해할 필요가 있다. 고유 코드(Native Code)란 윈도우 같은 운영체제에서 직접 해석할 수 있는 코드로서, 원시 코드라도도 부른다.그렇지만 일반적인 프로그래밍 언어는 개발의 편의를 위해서 사람이 읽고 해석할 수 있도록 작성하기 때문에 이 자체로는 운영체제에서 해석할 수 없다. 따라서 컴파일( compile ) 이라는 과정을 통해서 운영체제에서 해석할 수 있도록 고유 코드로 변환해줘야 한다.


따라서 CLR도 닷넷 언어로 만들어진 코드를 읽고 해석한 후, 운영체제에서 해석할 수 있게 컴파일 해주는 일종의 가상머신 ( Virtual Machine )이라고 이해하면 쉽다. 그렇지만 VB.NET ,C# 등과 같은 닷넷 언어는 윈도우 등 운영체제의 고유 코드로 바로 컴파일되지 않고,마이크로소프트 중간 언어(MSIL , MicroSoft Intermediate Language)로 컴파일 된다.


따라서 운영체제에서 닷넷 애플리케이션을 바로 실행할 수 없는데,닷넷 애플리케이션을 실행하려면 닷넷 프레임워크의 CLR에 있는 JIT(Just-In-Time) 컴파일러를 통해서 MSIL코드를 고유 코드로 변환한 후 실행해야 한다. 결국 , CLR은 JIT 컴파일러를 통해MSIL 코드를 고유코드(실행 가능한 코드)로 변환하는 역할을 한다. 


그렇다면 왜 닷넷에서는 고유 코드를 바로 실행 가능한 코드로 컴파일 하지 않고 MSIL을 만들까? MSIL을 사용하는 이유는 닷넷언어가 C# 뿐만 아니라 VB.NET , J# , C++.NET 등 개발 언어가 다양하기 때문에 이를 통합적으로 해석한 후에 고유 코드를 만들기 위해서다.

MSIL은 프로그램을 한번 만들어 놓으면 그것이 어느 플랫폼에서 만들어졌는지에 상관없이 자신의 플랫폼에서 사용할 수 있게 해준다.


그래서 닷넷이 다중 플랫폼을 지원할 수 있는 것이다. 예를 들어 VB.NET , C# , C++.NET 등으로 만든 프로그램을 MSIL로 컴파일하면 exe , dll 파일 등으로 만들어져 보관했다가, 실행될 CPU와 운영체제가 결정되면 그에 맞는 JIT 컴파일러를 통해 실해 코드가 생성되어 사용되는 것이다.


기본 클래스라이브러리(BCL)

BCL은 닷넷 언어를 이용해서 쉽게 개발할 수 있도록 기존 마이크로소프트의 다양한 개발 라이브러리를 닷넷에서 사용할 수 있게 통합해놓은 기본적인 클래스 라이브러리의 모음이다. 이러한 BCL은 네임스페이스를 사용해서 논리적으로 그룹화되어 있다. BCL은 모든 닷넷 기반 애플리케이션과 컴포넌트에서 공통으로 자주 사용하는 System , System.Collections , System.Diagnostics 등과 같은 네임스페이스를 포함하고 있다. 또한 네트워크 연결, 프로토콜 구현, 파일과 스트림 입출력 클래스 , 멀티스레딩, 텍스트 처리 , 정규 표현식(Regular Expression) 그리고 리플렉션 (Reflection) 등의 기능도 함께 포함 하고 있다.


ADO.NET : 데이터와 XML

ADO.NET은 닷넷 프레임워크의 일부로 System.Data 네임스페이스와 하위 네임스페이스에서 제공하는 데이터 접근 기술이다. ADO.NET은

인터넷이나 인트라넷과 같은 비연결 기반 프로그래밍 모델을 제공하는데, 다음과 같이 구성된다.


System.Data 네임스페이스 

ADO.NET 객체 모델을 구성하는 클래스로 이뤄져 있다. ADO.NET 객체 모델은 크게 연결기반 계층과 비연결 기반 계층으로 나눠져 있기 때문에 개발하고자 하는 형태의 애플리케이션 아키텍처에도 적합하게 사용할 수 있다.


System .Xml 네임스페이스

W3C 호환 XML 파서와 XML 작성기(XML Writer) , 그리고 XSLT와 XPath 등 많은 XML관련 기술을 위한 클래스로 이뤄져 있다.


윈도우 사용자 인터페이스

윈도우 폼은 닷넷 프레임워크 기반의 윈도우 애플리케이션을 개발하기 위한 새로운 플랫폼이다. 특히 윈도우 폼은 풍부한 사용자 인터페이스를 포함하는 윈도우 애플리케이션을 개발하기 위해서 명료하고, 객체 지향적이며 확장 가능한 클래스의 집합으로 구성으로 있다. 또한 분산 계층 솔루션에서 로컬 사용자 인터페이스로 활용될수도 있다. 윈도우 폼 생성에 관련된 클래스는 System.Windows.Forms 네임스페이스에 포함되어 있으며, 윈도우 폼 유형은 크게 표준 윈도우, MDI 윈도우, 대화상자로 나눌 수 있다.


ASP.,NET

ASP.NET은 강력한 웹 애플리케이션 개발하기위한 프로그래밍 프레임워크다.그리고 ASP.NET 웹 폼은 쉬우면서도 강력한 방법으로 웹 사용자 인터페이스 페이지를 생성할 수 있게 하며, ASP.NET 웹 서비스는 분산 웹 기반 애플리케이션 생성을 위한 빌딩 블록을 제공한다.


System.Web 네임스페이스

웹 서비스와 웹 사용자 인터페이스 모두에 공통으로 사용될 수 있는 캐싱,보안,애플리케이션 환경 설정 등과 같은 하위 단계 서비스를 위한 클래스를 제공한다.


System.Web.Services 네임스페이스

프로토콜 등과 같은 웹 서비스를 핸들링하기 위한 클래스를 제공한다.


System.Web.UI 스페이스

웹 페이지나 컨트롤과 같이 사용자 인터페이스의 컨트롤에 대한 클래스를 제공한다.


ASP.NET에서의 컨트롤은 크게 System.Web.UI.HtmlControls 네임스페이스에서 제공하는 HTML 태그와 직접 매핑되는 HTML컨트롤, System.Web.UI.WebControls 네임스페이스에서 제공하는 강력한 웹 컨트롤로 나눌 수 있다.



'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문의 종류  (0) 2018.03.10
코드 블록과 제어문  (0) 2018.03.10
프로그램 구성 요소  (0) 2018.03.10
C#  (0) 2018.03.09

+ Recent posts