본문 바로가기

프로그래밍/공부관련

설계 준비 - 바람직한 설계의 특징 바람직한 설계의 특징.. 1. 복잡성 최소화 : 재치있는 설계는 피하며, 복잡성을 최소화. 간단하고 이해하기 쉬운 설계.2. 유지관리의 편리함 : 유지 보수 프로그래머를 위한 설계를 의미. 유지보수 프로그래머가 코드에 대해 물어볼 질문들을 상상해볼것.3. 느슨한 결합 : 프로그램의 서로 다른 부분들 간의 연결을 최소화하도록 설계하는것을 의미. 클래스간의 연결이 최대한 적도록 설계하여 추상화, 캡슐화, 정보은닉과 같은 방법을 사용. 연결이 최소화되면 통합/테스트/유지보수 시 작업을 줄일 수 있다.4. 확장성 : 내부구조를 해치지않고, 시스템의 가능성을 높일 수 있도록한다. 다른 부분에 영향을 미치지않고 시스템 일부분을 변경하도록, 예측 가능한 변경사항일수록 시스템에 더 적은 충격을 준다.5. 재사용성 : .. 더보기
private 변수접근해서 값 바꾸기 TestDlg* pDlg = (TestDlg* )toolbarDlgPtr; int addressToolbar1 = reinterpret_cast(pDlg); int addressToolbar2 = addressToolbar1 + 22656; CEdit* pEdit = reinterpret_cast(addressToolbar2); pEdit->SetWindowTextA("바뀐다!!"); 더보기
c++ 사용 cast (캐스트 연산자) 긴설명보다 이정도? 다만, 실제적으로 일하면서 쓸경우는 c++의 캐스트연산자는 안쓰고, 아직도 c의 캐스트 연산자 즉 평소 아무생각없이 사용하는 형태로만 주로 써왔다. static_cast가 아마 비슷하겠지만, 좀 더 컴파일러 단에서 오류를 뱉어내서 좀 더 실수를 줄여주는 정도일 것이다. const, reinterpret는 잘은 사용안하지만, 그나마 프로페셔널한 코드에서 주로 보이는 것은 dynamic_cast이다. 상속관계에서 업캐스트와 다운캐스트를 자주 변환하고 한다. 업캐스트는 항상 캐스팅이 가능할지몰라도, 다운캐스트는 상황에 따라 다르다. 만약 올바른 상황에서 c의 캐스트연산 혹은 static_cast를 쓴다면 문제는 없겠지만, 그렇지 않을경우 잘못된 캐스트가 발생되어 런타임에 오류가 발생할 것이.. 더보기
MFC에서 debug mode와 Release mode의 문제가 생길시 되도록 옵션을 살펴보고 그것에 대해서 의심을 할필요가 있었다. 어째서 다이얼로그객체를 Create할때 Debug Mode에서는 OninitialDialog()가 실행되는데Release Mode에서는 OninitialDialog()가 실행이 안되었는가에 대해서... 그건 이 다이얼로그객체가 별도의 Dll로 만들어져서 별도의 프로젝트로 관리하고 있었는데,Use Of MFC의 옵션의 차이였다. 디버그에서는 공유 DLL 옵션이었으며, 릴리즈에서는 정적라이브러리 사용이었다. 릴리즈 역시 디버그와 맞추어줄필요가 있었다. 이 다이얼로그객체는 DLL라이브러리로 되어있었기때문이기도 하다. MFC 라이브러리 동적링크와 정적링크의 차이. 더보기
QT] 라벨 및 각 컨트롤에 대한 스타일시트적용 예 QFrame, QLabel, QToolTip, QCheckBox { border: 1px solid black; border-radius: 4px; padding: 2px; background-color: rgb(255, 255, 255); } 더보기
1월2주차 - DB공부 (1) DB에 관해서 공부하기전 일적으로 리서치했던 것에 대해 리마인드하자.목표는 1. ms-sql을 활용하여 서버 온. ODBC건 OLEDB건 접속을하여 쿼리를 주고받는 정도의 간단한 환경 2. 그리고 간단한 프로그램을 만들겠다.연결단자 : ODBC는 C언어에 기분을 둔 API OLEDB는 COM서비스에 기반을 둔 객체지향형 API 현재는 OLEDB를 사용하고 있음을 확인함.OLEDB(Object Linking Embedding) 기존의 ODBC는 SQL쿼리를 이용해서 관계형 DB 처리를 위한 규격이었는데, 이를 좀더 발전시켜 데이타의 종류가 무엇이든 관계없이 연결하여 처리할 수 있는 M/S사의 최신 데이타 처리규격이다. 즉,관계형 D/B가 아니더라도 메일,CAD같은 데이타도 마치 데이타베이스처럼 이용할 수 .. 더보기
[객체지향] 절치지향과 OO(Object-Oriented) 객체지향(이제부터 OO) 소프트웨어 개발은 160년대경부터 시작. 상당히 오래전부터 시작되었음에도 퍼지지않은 이유는 업계에서는 기존의 시스템에도 잘돌아가는데 굳이 교체할 설득력이 없었으며, 위험과 비용을 감수하고 싶지않았다. 지난 15년간에서야 OO가 꾸준히 발전한것이다. 절차지향과 OO의 차이는 뭘까? 그 차이는 뭐 검색하면 많이나오지... 그렇다면 OO란 뭘까? 대게 OO를 설명할때 객체라는 단어를 이용하여 설명한다. 근데 객체는 뭔데?? 객체란 속성과 행위를 두가지 용어로 정의된다. 뭐 책에서 일반적으로 자동차와 돌덩이를 설명하는데.. 다시 리마인드한다치고 사람으로 치면.. 속성 : 키, 색, 나이, 성별. 행위 : 걷기, 말하기, 숨쉬기 속성(에트리부트), 행위(메서드) ....(영어쓰기 귀찮다... 더보기
벡터와 벡터간의 각도구하기 1. 차벡터의 단위벡터화 2. 대상 단위벡터... 3. 내적계산에 의한 cos값 가져온다. 리턴값은 라디안 ... 이 소스는 Zup이다. //회전 OuVec3d& vStartPos = ma_RenderPoints[iSize-2]; OuVec3d vRotate = vEndPos - vStartPos; vRotate.Normalize(); #define RADIAN_TO_DEGREE(x) (180.0f * x/3.141592f) float fangle_x(0), fangle_z(0); fangle_x = RADIAN_TO_DEGREE(acos(vRotate.Dot(OuVec3d(1,0,0)))); glRotatef(fangle_x,0,0,1); fangle_z = RADIAN_TO_DEGREE(acos(vR.. 더보기
벡터 min, max... double dAziMax(DBL_MIN), dAziMin(DBL_MAX); vector::iterator pos = max_element(m_AziHistogramDatas.begin(), m_AziHistogramDatas.end()); dAziMax = *pos; pos = min_element(m_AziHistogramDatas.begin(), m_AziHistogramDatas.end()); dAziMin = *pos; double dEleMax(DBL_MIN), dEleMin(DBL_MAX); pos = max_element(m_EleHistogramDatas.begin(), m_EleHistogramDatas.end()); dEleMax = *pos; pos = min_element(m_El.. 더보기
GetMessage와 PeekMessage GetMessage와 PeekMessage 두 함수 모두 WinMain()에서 메세지큐로 부터 메세지를 추출하는 함수이다. 하지만 차이점이 존재한다. GetMessage()함수는 메세지큐에 메세지가 없으면 그냥 그대로 반환 값을 반환 하지도 않고 그대로 대기상태로 있다가 메세지가 생기면 해당 메세지를 추출하고 반환 값으로 1을 리턴한다. 물론 메세지가 있을때 항상 1만 리턴하는 건 아니다. WM_QUIT 메세지가 발생했을때는 0을 리턴한다. while(GetMessage(&msg, NULL, 0, 0) //GetMessage()가 반환 값으로 0을 리턴해야 이 while문을 빠져 나갈수 있다. { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { Tr.. 더보기