외규장각 도서 환수 모금 캠페인

Search Results for 'Study'

98 POSTS

  1. 2007.06.06 객체지향 이야기 - 전병선
  2. 2007.06.05 수영 - T-누르기란? 2
  3. 2007.06.05 수영 - 배영발차기시 사선으로 가는이유?
  4. 2007.06.03 2
  5. 2007.06.01 Thread 해결 ^____________________^ 2

객체지향 이야기 - 전병선

Posted 2007. 6. 6. 12:26, Filed under: Study/Computer Science

지난 주부터 빌려보고 있는 책.

1~9장 까지는 객체지향의 개념과 각 언어별 구현, 특징이 문법적인 설명보다는 개념 설명에 중점을 두고 쓰여져 있음.

특정 프로시저(함수) 단위로 프로그램을 나누어서 작성하는 방식이 아니라
[연산 + 데이터] 를 하나의 객체 단위로 보고, 이러한 객체 프로그램을 작성하는 것.
프로그램의 진행은 객체들간의 데이터와 행위(behavior)의 통신으로 이루어짐.
객체들 사이의 데이터 처리의 흐름을 분석하고 설계하는 것이 그만큼 중요하다.

언어의 문법적인 특징보다는 객체지향적 사고 방식으로 프로그램을 작성하는 것이 포인트!

구조적 방법은 (프로시저 단위로) Divide and Conquer 방식을 목표로 소프트웨어 시스템을 세부적인 것으로 나누어 작성하므로 전체를 잘못 이해하면 세부적인 것도 잘못 이해되어 소프트웨어 전체가 잘못된 구조를 갖기 쉽다. 그러나 처음부터 전체를 제대로 이해하는 경우는 매우 드물기 때문에 전체에서 세부적인 것까지 제대로 분석되기 설계되기 전까지는 그 다음 과정을 진행하기 어렵다.

객체지향적 방법은 하나의 소프트웨어 시스템을 여러개의 객체로 구성된 것으로 본다. 각 객체는 독립적으로 고유한 기능과 서비스를 제공하며. 전체 소프트웨어 시스템을 구성하는 하나의 논리적인 구성요소가 된다. 따라서 해당 객체의 기능을 독립적으로 향상 시킬 수도 있고 다른 소프트웨어 시스템에도 재사용할 수 있으며, 또 사용자의 요구사항이 변경된 경우에도 유연하게 대응할 수 있다는 이점이 있다.


추상화 : 어떤 사물에서 필요한 데이터와 연산만을 뽑아서 객체화 하는것

캡슐화
: 내부 데이터 구조나 구햔 방법을 감추고 인터페이스만을 공개.
           필요에 따라 내부 데이터 구조나 구현 방법을 자유롭게 변경할 수 있음.

모듈성 : 크고 복잡한 것을 좀 더 작고 관리하기 쉬운 조각으로 나누어 이들 조각을 독립적으로 개발할 수 있는 특성

상속성 : 객체들 사이의 계층 관계에 따라 상속을 통하여 재사용성을 높이고 쉽게 구현할 수 있음

다형성 : 상속성을 통해서 구현 가능한, 동일한 메세지에 대해서 객체에 따라 서로 다른 연산을 수행하는 특성.

이런 것들에 대해서 대표적인 객체지향 언어에서 어떤 식으로 구현되는 지를 설명.

또한  C++, C#, JAVA,VB.NET 등 특정 언어에서  객체지향을 구현하기 위한 여러가지 기능을 제공하고 있는데 단순히 문법에 대한 이해보다는 이런 기능을 어떻게 활용하여 객체지향이라는 패러다임을 구현하는 지가 중요하다는 것,

 
어떤 기능이 있고 없고 어떤 언어가 더 우월한지, 더 객체지향적인지 판단하는 것은 의미가 없고, 이러한 기능들이 오버헤드로 작용할 수도 있기 때문에 필요한 때에 적절히 사용하는 판단력과 지혜가 필요하다는 것을 강조하고 있다.

객체지향 언어라는 것은 객체지향 개념을 구현할 수 있는 언어.
언어 자체도 중요하지만 객체지향 개념을 잘 적용하여 설계한다는 것에 뽀인트!

너무 자세한 설명 탓에 약간 지루한 감이 있지만 재밌다.
 


Response : ,

수영 - T-누르기란?

Posted 2007. 6. 5. 09:49, Filed under: Study/Swim
http://dev.swimdoctor.co.kr/bbs/bbs_view.php?code=online_10&idx=17345&page=1

T-누르기란 수영 매거진의 컬럼니스트 이자 미국 올림픽 수영캠프의 헤드코치인 Terry Laughlin이 주장한 말로서 수영을 배우는 많은 사람들에게 새로운 수영 지식을 전달한 좋은 글 이기도 하지요. 그는 스트로크수를 적게 하고, 에너지소모를 최대한 줄이는 효율적인 수영에 대해 많은 연구를 하고 있습니다.


태리래플린이 주장한 대표적인 것들은 롤링을 크게해서 몸체의 커다란힘을 팔로 전달하여 수영하라는 것과 발란스자세, 고개는 들지 않고 거의 바닥을 보게 한다, 배꼽으로 호흡할 정도의 큰 롤링, 한 팔이 입수할때까지 다른팔은 거의 글라이드 자세를 취하라 등이 있습니다. 그러나 이러한 말들은 효율적인 수영에는 충분히 동감을 하고 있으나 수영을 빠르게 하는데는 크게 호응을 받고 있지 않습니다. 단거리수영은 거의 무호흡이며, 빠른 스트록을 원하기에 그가 주장한 바와 조금 다르지만, 장거리수영에는 그가 주장한 내용들을 토대로 연습을 한다면 많은 도움을 받을 수 있으리라 판단됩니다. 태리의 말에 의하면, 스트로크의 효율이 좋아지는 것은 결국 빠른 수영속도를 가져온다라고 믿고 있으니까요.



=== Terry Laughlin T-누르기 ===


물의 저항을 줄이는 것이 추진력


대다수의 수영인들은 수영실력을 향상시키기 위해선 체력이 더 필요하다고 생각하지요. 그리고 수영이 70퍼센트의 수영 폼과 30퍼센트의 체력이라는 사실을 알고 있는 수영인들조차도 잘못된 기술을 알고 있고 흔히 팔이나 다리의 영법에만 온신경을 쓰고 있는 것이지요. 사실상 팔이 물을 헤쳐가니까 당연히 중점을 두게 됩니다. 따라서, 만일 수영법이 틀렸다면 팔의 젓는 동작이 잘못되었기 때문이라고 판단을 하고, 코치도 당연히 그렇게 지도를 하지요.

거의 모든 코치나 강습교사들이 똑같이 어떻게 팔로 당기고, 다리로 킥을 하는가를 중점적으로 가르칩니다. 그러나, 얼마나 깊이 팔을 젓느냐, 손바닥은 어느쪽을 향하는가 하는 것은 수영속도에는 별로 영향을 미치지 못합니다. 만일 아주 잘못된 팔의 영법을 하던 사람이 정확한 팔기술을 배우더라도 아마 약 5내지 10초의 기록 단축밖에는 못할 것입니다. 그러나 물은 공기보다 1,000배의 밀도를 가지고 있고, 수영인을 막대한 저항으로 끌어당기므로, 물의 저항을 줄이는 것이 추진력을 늘리는 것보단 훨씬 더 효과적일 껍니다. 만일 수영인이 저항을 최소로 줄이는 몸의 자세를 배운다면, 금방 20내지30초를 줄일수 있고, 훨씬 수월하게 나아가며, 내가 가르쳐 본 결과 수많은 수영자들이 이 방법으로 큰 효과를 보았습니다. 물의 저항을 줄이는 방법은 바로 기존의 수영법에서 생각해보는 것입니다.


일단 머리와 상반신을 중심으로 균형을 잡아 보십시오. 팔의 영법에 대해서는 전혀 신경쓰지 마십시오. 만일 몸체가 균형을 잘 잡고 유선형을 만들지 못한다면, 아무리 강력하고 정확한 팔동작도 소용이 없고, 이때에 몸의 자세를 조금만 바꾸면 간단하게 물의 저항을 훨씬 줄일 수 있습니다. 더군다나, 몸이 유선형을 만들지 못하고 아무리 팔동작에 힘을 주어도 소용이 없습니다. 따라서, 몸의 밸런스를 잡는것이 가장 포인트이고, 이밖에 스피드와 수영기술을 향상 시키는 건 아무것도 없습니다. 물에서 균형을 잡는 다는 건 인간의 육체적인 한계를 극복한다는 것입니다. 인간의 몸은 땅에서 균형을 잡고 동작을 취하기 좋게 되어있습니다. 폐를 포함한 상체와 다리로 되어있는 것이지요 (이에 비해서 물고기는 반대의 상황이죠 - 물에서 균형을 잘 잡게 되어 있지요. 만일 물고기처럼 꼬리하나로 땅에 서 있다고 생각해 보면 얼마나 어렵겠습니까?) 물 속에서 우리는 팔과 팔사이는 부력이 작용하지만 허리 아래부터는 물에 가라앉아 버리지요. 당연히 모든 사람들은 가라앉게 됩니다. 그러나 몸이 살찌고 안찌고 하곤 별로 상관이 없습니다. 많은 크로스컨츄리 선수나 올림픽 3종경기 선수들은 자신들의 몸에 지방이 전혀 없어 수영을 못할 것이라고 생각한다는 겁니다. 그러나 올림픽 수영 선수들은 크로스 컨츄리 선수나 3종경기 선수들처럼 지방이 전혀 없지만 훌륭한 수영자세를 갖고 있습니다. 선수들은 수영을 빠르게 하니까, 물에서 높이 뜨겠지요. 일반인들도 몸의 발란스만 잘 갖추면 훨씬 쉽게 수영을 할수 있는 것입니다. 대다수 초보자들은 발로 킥을 열심히 해서 빨리 나아갈려고 하지만 별로 소용이 없습니다. 수영 중에 팔다리에 무리가 가서 쥐가 난다면 문제지요. 그러나, 만일 시소를 타듯이 상체에 무게중심을 실어주어 하체를 쉽게 띄운다면 균형이 잡힐겁니다. 이것을 T자 누르기 라고 하지요. 다음의 지시사항대로발버둥을 안쳐도 하체가 뜨면서 수면위를 미끄러지듯이 나아갈 겁니다. 머리를 쓰세요. 머리를 척추,엉덩이에 연결하면 상체에 약 12인치에 14내지 16파운드를 더한 것 밖엔 안되죠. 첫 번째로, 당신의 머리,척추,엉덩이를 똑바른 일직선 막대기로 연결했다고 생각해 봅시다. 머리를 약간 들면 (마치 초보자들이 숨쉬기를 하듯이) 이 T자가 깨지며 엉덩이가 가라 앉을 껍니다. 이래서는 안됩니다. 항상 T자를 누르는걸 (상체의 T자 형태에 무게중심을 싣는다) 잊지마세요. 턱에서 가슴까지 수직선을 긋고, 한쪽어깨에서 다른쪽 어깨까지 횡선을 그으면 바로 T자를 만들어 줍니다. 수영중에 바로 이 상체에 힘을 약간 주면서 기대면 됩니다 (마치 누군가가 수영중에 당신의 양 어깨를 눌러 주는 것과 같지요).


< 상기 정보는 스윔닥터의 동의없이 무단으로 재배포할 수 없습니다. >

Response : ,

http://dev.swimdoctor.co.kr/bbs/bbs_view.php?code=online_10&idx=17708

배영 발차기시 사선으로 가는 이유는 여러 가지가 있습니다.

한쪽 무릎을 많이 접어서 차거나, 아니면 한쪽 발에 많은 힘을 실어 차게되면, 반대쪽 발은 경직되서 균형있는 발차기가 되지 않아 한쪽으로 기울어 나가게 됩니다. 또 다른 이유는 발등을 바깥쪽으로 향한 채 돌려서 차는 분들이 있는데 이런 분들도 한쪽 방향으로 쏠리며 가는 경우가 있습니다.




코 끝부터 배꼽까지 가상의 선을 그어 신체의 중심선을 만들어 양 쪽이 똑같이 대칭이 되게 한 후 똑같은 힘으로 발차기를 하고 시선은 천정의 임의의 일직선을 그어 똑바로 가는 연습을 해보세요.



사용자 삽입 이미지

▶ 사진 [7-Q3-A] 배뜨기자세(코 끝에서 배꼽까지 가상의 선을 긋는다)




수영장 풀사이드 모서리에 양 팔을 끼워 벽에 기댄 채 발차기 연습을 해보세요.. 몸을 곧게 뻗고 양 발의 균형된 발차기를 해 준다면, 사선으로 가지는 않을 것입니다.



사용자 삽입 이미지


▶ 사진 [7-Q3-B] 양 모서리에 팔을 얹은 채 발차기하는 장면

Response : ,

Posted 2007. 6. 3. 10:48, Filed under: Study

막대한 연체료를 내고 나서야 대출 중지가 풀리고 또 책을 한보따리 들고왔다 -_-

이건 뭐 책을 사서 보는 건지 빌려보는건지 ㅋ

이번에 빌린 책들 - 갈팡질팡 하지말고 하나씩 차근차근 읽자 -_-

파인만의 엉뚱발랄한 컴퓨터 강의: 계산이론  - 리처드 파인만

( 쉽고 재미있는, 비전공자를 위한 물리 강의로 유명한 리처드 파인만이 한 때 칼텍에서 컴퓨터 관련 강의를 했었다는 걸 처음 알았다. 순전히 그 이름 보고 빌린 것. 아무리 파인만이라도 이거마저 재밌게 썼을까 ㅋㅋ)

레지스트리 활용 노트 - 이순원

악성코드들 보다보면 레지스트리를 건드려서 이상한 짓거리 하는 녀석들이 많아서 한번 볼려고 빌렸음. 어떤 때 어떤 레지스트리를 건드리고 어떤 목적으로 어떤 API 함수를 호출하는지만 알아도 참 좋을꺼 같은데 ㅋ  다음에는 디스어셈블 관련 책을 하나 찾아봐야겠다.

조엘 온 소프트웨어 - 조엘 스폴스키

조엘 스폴스키가 자신의 블로그에 올린 소프트웨어 개발에 관련된 글들을 엮어 책으로 출판한 것. 굉장히 유명한 책이고 좋은 내용이 많다는데 이제서야 읽게 됐다. 그런데 결코 내용이 가볍고 쉽지는 않다. 아직 나의 내공이 부족한가 ㅠ
( 한국어 사이트도 있음 - http://korean.joelonsoftware.com/)


객체지향 이야기 - 전병선

지난 번에 보던거 다 못봐서 다시 빌림 ㅋ 객체지향에 대해서 ( 프로그래밍 언어적인 측면보다는 패러다임과 적용 측면에서) 쉽게 설명하고 있다. 다른 책들과는 서술 방향이 좀 다른 것 같아서 재미있음.

헤드퍼스트 자바 - 케이시 시에라, 버트베이트 저 / 서환수 역

이것 역시 유명하고 무지하게 재미있는 자바 책 ㅋ 뇌를 자극하는 학습법이라는 새로운 학습이론으로 무장하고 페이지마다 재미있는 그림과 설명으로 머리에 쏙쏙 들어오는 것 같다. 재미있다고 해서 그 깊이가 얕은 것도 아니어서 더 좋다. 일단 이 책으로 가볍게 시작한 후에 다른 책들로 자바 정복의 길로 가야지 ㅋㅋ

Response : ,

Thread 해결 ^____________________^

Posted 2007. 6. 1. 13:08, Filed under: Study/Computer Science

어제부터 고민하던 문제 완죤 해결 ㅋㅋㅋ

OK 버튼 눌렀을 때 실행하는 모든 프로시저를 스레드로 만들면 순차실행하는 데 아무런 문제 없음
전에 이런 방식으로 할려다가 Dialog Item 들을 마음대로 사용할 수 없어서 포기했는데 (5번 문제점)

CWnd를 상속한 클래스에서 멤버 함수로 핸들을 가지고 있으니까 이걸 써두 되고..
The m_hWnd data member is a public variable of type HWND

윈도우를 통째로 스레드 프로시저의 파라미터로 넘겨서 캐스팅하면 OnOK 함수 내에서 처럼 사용 가능하다는 것 ^^ .. 다른 맴버 변수에 직접 접근할 수 있기 때문에 이 방법이 더 깔끔하다.

스레드 첨 써봐서 진짜 힘들었는데.. 그럭저럭 인제 어째 되는지는 알겠다.
이번 경우는 스레드간 통신도 없고 동기화도 안해도 되는 별로 어렵지 않은.. 단지 스레드였지만
다음에는 더 어려운거에 도전해봐야지 ㅋㄷ

UINT threadCnt(LPVOID DlgHpcnt)
{
 // create class instances
 CHpCntDlg* Cntdlg = (CHpCntDlg*)DlgHpcnt;   // 이렇게 캐스팅해서 맘껏 사용 ㅋㄷ
 HpCounter* hpc = new HpCounter(Cntdlg);
 
 // disable button
 Cntdlg->GetDlgItem(IDOK)->EnableWindow(false);

 // Homepage upload count
 hpc->MakeTmp();   // make temporary folder
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("홈페이지 업로드 카운트 중...");

 if(Cntdlg->m_CheckINI ==TRUE) {
  hpc->WriteINICnt();
 }

 // Sample Count
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("엔진 샘플 수 카운트 중...");
 SpCounter* spc = new SpCounter(Cntdlg);
 for(int i = 0; i < 7; i++)
 {
  spc->TotalSample();
  spc->ECSample();
  spc->MoveDate();
 }
 
 CTimeSpan day = CTimeSpan(1,0,0,0);
 CTime Date = CTime::GetCurrentTime() - day;

 CString szBuffer = _T("");
 char szBuf[80] = _T("");


 
 // Print Result
 Cntdlg->m_Result.DeleteAllItems();
 Cntdlg->GetDlgItem(IDC_STEP)->SetWindowText("결과 출력");
 for (i = 0; i < 7; i++){
  szBuffer.Format("%8d.%02d.%2d", Date.GetYear(), Date.GetMonth(), Date.GetDay());
  Cntdlg->m_Result.InsertItem(LVIF_TEXT, 0, szBuffer, 0, 0, 0, 0);
 
   itoa((spc->arResult[6-i]).nTotalSample, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 1, szBuf);

   
   itoa((spc->arResult[6-i]).nECSample, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 2, szBuf);

   
   
   itoa((hpc->arResult[6-i]).nKorCnt, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 3, szBuf);
   
   itoa((hpc->arResult[6-i]).nEngCnt, szBuf, 10);
   Cntdlg->m_Result.SetItemText(0, 4, szBuf);
   
  Date -= day;

 }
 //enable Run button
 Cntdlg->GetDlgItem(IDOK)->EnableWindow(true);
 
 return 0;
}

Response : ,

« Previous : 1 : ··· : 12 : 13 : 14 : 15 : 16 : 17 : 18 : ··· : 20 : Next »

Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post