MIDAS LOG

10.01

C++ 공부

익명 함수 문법(Lambda)

auto bar = []() -> float { return 3.14f; }; // arrow function을 이용하면 타입 명시 가능
[a,&b] a를 복사로 캡처, b를 참조로 캡처.
[this] 현재 객체를 참조로 캡처.
[&] 몸통에서 쓰이는 모든 변수나 상수를 참조로 캡처하고 현재 객체를 참조로 캡처.
[=] 몸통에서 쓰이는 모든 변수나 상수를 복사로 캡처하고 현재 객체를 참조로 캡처.
[] 아무것도 캡처하지 않음.

vector, push_back vs emplace_back

※ 실제 사용예 필자가 전에 push_back으로 작성했던 코드이다. 이 코드는 CStationObj 임시 객체를 생성하고 그것을 push_back에 전달하는 걸 알 수 있으며 성능을 따져봤을때 비효율적이다.(내부적으로 CStationObj의 임시 객체가 생성되고 생성자와 소멸자도 호출되기 때문)

void CStationObj()
{
m_vecStationObjs.push_back(CStationObj(3, 4));
}

emplace_back은 함수 원형에서 본 거와 같이 가변 인자를 받을 수 있어서 아래와 같이 인자를 넣을 수 있으며, 받은 인자를 std::vector안에서 직접 CStationObj를 생성하므로 push_back보다 성능상 낫다.

void CStationObj()
{
m_vecStationObjs.push_back(3, 4);
}

※ 참고 사항

  • push_back으로 하여도 컴파일러 내부적으로 최적화 하기 때문에 emplace_back으로 하는 것과 별차이가 없을 수 있다. 고로 개인 프로젝트가 아니라면 호환성이 더 좋은 push_back 사용이 더 나을 수도 있다.

  • push_back함수로 할 수 있는 모든 것을 emplace_back으로 할 수 있다.

  • push_back함수보다 emplace_back 함수가 대체로 효율적이다.

해야 할 것

  • Feature 툴 사용, 모델링 해보기 (4)

  • mday ppt 제작

  • shared_ptr 공부할 것

해결한 것

  • Solid 기능 구현 약간

10.02

해결한 것

  • MDay 발표 준비

해야 할 것

  • Feature 툴 사용, 모델링 해보기 (4)

  • mday ppt 제작

  • shared_ptr 공부할 것

  • Feature Solid

10.04

해결한 것

  • Feature 툴 사용, 모델링 해보기 (4)

해야 할 것

  • Feature 툴 사용, 모델링 해보기 (4)

  • shared_ptr 공부할 것

  • Feature Solid

10.05

해결한 것

  • Feature Solid 하는 중

해야 할 것

  • C++, C# ??

  • shared_ptr 공부할 것

  • Feature Solid

10.08

C++ 공부

교차 포함 (형식 지정자가 필요합니다)

분명히 클래스를 Include 하였음에도 불구하고 오류가 난다. program once에 의해 Include가 한번만 불려지기 때문, 아니면 포함하지 않았지만 간접적으로 서로를 포함한 경우 에러가 발생

#pragma once
class A; // class A가 존재한다고만 알려줍니다.
class B
{
public:
A* a; // 포인터로 바꾸었습니다.
};
#pragma once
class B; // class B가 존재한다고만 알려줍니다.
class A
{
public:
B* b;
};

다음과 같이 참조하는 클래스를 포인터로 선언하고, 클래스를 나중에 구현할 것이다! 하고 선언만 해 놓으면 간단히 오류를 해결할 수 있다.

C++, C#, Java

  • 다양한 언어가 나와서 각자의 영역을 조금씩 마련했다.

  • 각각 장단점이 있고 분야에 맞게 사용하는 것이 좋다.

  • 하지만 범용적으로 쓰이는 언어는 자바가 맞다.

Inline 함수

  • 최적화에 사용

  • Stack에서 컴파일러가 함수를 호출하는 대신, 그에 대응하는 함수 코드 자체를 넣는다는 것을 의미. 주소를 왔다갔다 하며 되돌아오지 않기 때문에 어떤 연산을 많이하는 함수 같은 경우에 유리.

  • 컴파일러에 의해 처리가 되기 때문에 디버깅에 용이

  • 근데 지금은 컴파일러가 오히려 성능에 해가된다고 판단하면 무시하기도 하고(재귀함수이거나 덩치가 큰 함수) 도움이 된다고 생각하면 일부 함수들을 임의로 인라인 처리를 하기도 함.

  • 즉 인라인 자동화로 요새는 많이 사용하지는 않지만 퍼포먼스에 중요한 프로그램일 경우 생각하며 리팩토링 하는게 좋을 듯?

Interface

  • 순수가상함수로 짜면 된다.

  • 문법으로도 따로 __interface 라는 것이 있다.

해결한 것

  • Feature Solid 완성!

해야 할 것

  • shared_ptr 공부할 것

  • Feature Solid 테스트 코드 작성할 것 (구글의 gtest)

10.10

gtest

특징

  • Google에서 개발된 C++ 테스트 프레임 워크

  • Git에서 다운받아서 헤더파일 추가해서 사용

  • 간단한 사용 방식은 다운 받아서, 검증해야할 부분을 검증하면 됨

  • 사용하기 편하게 라이브러리를 덮어서 만들면 더 좋음, Test Fixture

  • 구글에서도 실제로 사용 중 (Chrom)

  • 항상 맞다고 생각하는 부분은 꼭 테스트 코드를 작성해야 함 (DB, Socket 통신 등등)

  • 테스트 코드를 다 통과하더라도 버그가 없는 건 아니다.

  • 사실 상 및에 참고 자료 정독하면 다 이해 됨

참고 자료

해야 할 것

  • shared_ptr 공부할 것

  • Feature Solid 테스트 코드 작성할 것 (구글의 gtest)

10.11

해결한 것

  • MFC-InteriorProgram 리팩토링

해야 할 것

  • shared_ptr 공부할 것

  • Feature Solid 테스트 코드 작성할 것 (구글의 gtest)

10.12

전체 구조 변경... 너무 안 좋은 구조 개선

Magnetic

해결한 것

  • MFC-InteriorProgram 리팩토링

  • Feature Solid 끝

해야 할 것

  • shared_ptr 공부할 것

10.15

전체 구조 변경

기존 구조

structure

변경된 구조

structure

해결한 것

  • MFC-InteriorProgram 리팩토링 중

해야 할 것

  • shared_ptr 공부할 것

  • 개발 제품 수업

10.16

해결한 것

  • MFC-InteriorProgram 리팩토링 끝!

  • CIM 수업 끝!, 간단한 정리 파트 공유 폴더

해야 할 것

Interior Program 남은 기능

  • Redo, Undo ( 딜리트 시 스택에 담으면 됨 )

    • 키보드 단축기

      • ctrl+z : undo ( 이벤트 처리기 리스너만 만들어놈 )

      • ctrl+y : redo ( 리스너 만들었는데 안 불림ㅠ )

  • Save Load As JSon ( 저장 로드 )

    • 키보드 단축기

      • ctrl+s : 저장 ( 리스너 만들었는데 딴 거 불림 )

      • ctrl+o : 불러오기 ( 리스너 만들어야 함 )

  • 마우스 우클릭 메뉴

    • Rotate ( 이벤트 처리기 리스너만 만들어놈 )

  • ObjectShape

    • 추 후 Room 그룹화 고민해 볼 것

    • 이미지 크기 변환 (Wheel, Edit)

    • 사용자 추가 기능

  • Group Mode??

  • 재질 바꾸기

  • Magnetic 보완

10.17

  • MIDAS DB 수업

해야 할 것

  • 수업 정리

  • InteriorProgram 각종 Issues

10.18

  • MIDAS DB 수업 (member)

  • 대형 과제 첫 기획자와 회의... (예상 기간 1년...?)

해야 할 것

  • 수업 정리

  • 당분간 또 InteriorProgram 못 할듯ㅠㅠ

10.22

  • MIDAS DB 보완 업무 80% 완성

해야 할 것

  • MIDAS DB 보완

  • Analytics Line

10.23

  • MIDAS DB 보완 완성

  • 고등 알고리즘 시험... 개망... (알고리즘 한 문제씩 풀기 긴급...)

해야 할 것

  • MIDAS DB 보완

  • Analytics Line

10.24

  • Clean Code

  • 각종 DB 배운 것 정리

해야 할 것

  • Analytics Line

10.25

  • Clean Code

  • SolidPhase 다시 정리

해야 할 것

  • Analytics Line

  • 사내 Doc

10.26

  • Clean Code

  • SolidPhase 다시 정리

  • 사내 Doc

해야 할 것

  • Analytics Line

10.29

  • Clean Code

  • 사내 Doc

TODO Comment (작업목록)

TODO 주석을 통해 앞으로의 할 일을 주석해놓고 Ctrl + \, Ctrl + T -> (Ctrl + F, Ctrl + T)를 이용해 작업 목록을 조회할 수 있다.

해야 할 것

  • Analytics Line

  • IFC Geometry Converter

10.30

  • IFC Geometry Converter

해야 할 것

  • Analytics Line

  • IFC Geometry Converter

  • Clean Code

  • 사내 Doc

10.31

  • IFC Geometry Converter

  • MDay 준비

해야 할 것

  • Analytics Line

  • IFC Geometry Converter

  • Clean Code

  • 사내 Doc