Developing becomes a hobby

고정 헤더 영역

글 제목

메뉴 레이어

Developing becomes a hobby

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 분류 전체보기 (27)
    • Node.js (1)
    • Javascript (1)
    • C++ (23)
      • Effective C++ (23)
      • C++ Questions (0)
    • SQL (0)
    • Leaflet (1)
      • WebMap (1)

검색 레이어

Developing becomes a hobby

검색 영역

컨텐츠 검색

전체 글

  • Pow (x, 0.5) vs Sqrt (x)

    2022.12.17 by DeaKyungLee

  • 항목 23) 멤버 함수보다는 비멤버 비프렌드 함수를 사용하자.

    2022.08.27 by DeaKyungLee

  • 항목 22) 데이터 멤버가 선언될 곳은 private 영역임을 명심하자

    2022.08.27 by DeaKyungLee

  • 항목 21) 함수에서 객체를 반환해야 할 경우에 참조자를 반환하지 말자

    2022.08.27 by DeaKyungLee

  • 항목 20) 값 전달 보다는 상수객체 참조자 전달 방식을 고려하자.

    2022.08.27 by DeaKyungLee

  • Leaflet 라이브러리를 활용한 WebMap

    2021.12.08 by DeaKyungLee

  • 항목 19) 클래스 설계는 타입 설계와 똑같이 취급하자

    2021.12.05 by DeaKyungLee

  • 항목 18) 좋은 인터페이스 설계: 제대로 쓰기에는 쉽게, 엉터리로 쓰기에는 어렵게

    2021.12.05 by DeaKyungLee

Pow (x, 0.5) vs Sqrt (x)

Question: Who is the better performance? 실험 환경 : VS 2017, ISO C++17 표준(/std:c++17) 실험코드 더보기 #include #include #include #include #include using namespace std; class ClockTime { private: clock_t start, end; double time; public: ClockTime() { Init(); } void Start() { start = clock(); } double End(bool bPrintTime = false) { end = clock(); time = (double)(end - start) / CLOCKS_PER_SEC; if (bPrintTime..

카테고리 없음 2022. 12. 17. 14:35

항목 23) 멤버 함수보다는 비멤버 비프렌드 함수를 사용하자.

웹 브라우저를 나타내는 클래스가 하나 있다고 가정해보자. 해당 클래스에는 다운로드 임시저장 캐시를 비우는 기능, 방문 URL 기록을 비우는 기능, 쿠키를 제거하는 기능 등이 있을 것이다. class WebBrowser { public: ... void clearCache(); void clearHistory(); void removeCookies(); ... }; 물론 이러한 동작들을 하나의 함수를 통해 한 번에 처리하는 것도 가능하다. class WebBrowser { public: ... void clearEverything(); // calls clearCache, clearHistory, // and removeCookies ... }; 위와 같이 멤버 함수로 구현하는 것과 void clearBr..

C++/Effective C++ 2022. 8. 27. 17:18

항목 22) 데이터 멤버가 선언될 곳은 private 영역임을 명심하자

이번 장의 핵심 질문은 이것이다. " 왜 Data 멤버는 private 이어야 할까? " 대부분의 상황에서 권장되는 클래스 코드 스타일은 아래와 같다. class AccessLevels { public: ... int getReadOnly() const { return readOnly; } void setReadWrite(int value) { readWrite = value; } int getReadWrite() const { return readWrite; } void setWriteOnly(int value) { writeOnly = value; } private: int noAccess; // no access to this int int readOnly; // read-only access to..

C++/Effective C++ 2022. 8. 27. 17:12

항목 21) 함수에서 객체를 반환해야 할 경우에 참조자를 반환하지 말자

참조자 반환 함수 항목 3) 에서 상수성에 대한 설명하는 부분에서도 언급했지만, 참조자를 반환하는 함수는 거의 대부분의 경우에 Trouble maker 가 될 확률이 높다. class Rational { public : Rational(int numerator = 0 , int denominator = 1); … private : int n, d; friend const Rational& operator* (const Rational& lhs, const Rational& rhs); //반환값이 const, 항목 3) 참조 (ex. i+j = 5) }; 유리수를 표현하는 Rational class 에서 두 유리수를 쉽게 곱하기 위해서 * 연산자를 오버로딩 했다. 문제는 operator* 함수에서 Rati..

C++/Effective C++ 2022. 8. 27. 17:08

항목 20) 값 전달 보다는 상수객체 참조자 전달 방식을 고려하자.

Call by Value 기본적으로 C++ 언어는, 객체에 대해서 '값에 의한 전달 ( Call by value )' 방식을 사용한다. ( C 에서 물려받은 특성 중 하나 ) return 형식이 객체거나 파라미터 전달에 객체를 사용한다면 기본적으로 사본이 생성된다는 의미이다. 우리는 객체의 복사 연산이 의도치 않게 굉장히 고비용의 연산이 될 수 있다는 사실을 알고 있다. 아래의 예시에서 해당 내용을 다시 한 번 확인해보자. class Person{ public: Person(); virtual ~Person(); // 가상 소멸자, 항목 7 private: std::string name; std::string address; }; class Student :public Person{ public: Stu..

C++/Effective C++ 2022. 8. 27. 16:56

Leaflet 라이브러리를 활용한 WebMap

1.0 Version https://youtu.be/ROdK0wPc3PA 2.0 Version https://youtu.be/uPXC6DM55ek 회사 업무 상으로 작성했던 작품이다. 단순하게 말하자면, 사용자 입력에 따라서 현재 화면에 필요한 정보만을 최대한 추려서 DB에 Query를 던지고 실시간으로 전달받은 데이터들을 필요에 따라 가공을 거친 뒤에 사용자에게 보여준다. 처음에는 단순히 구현 자체가 문제였다. 팀에서는 물론이고 주변에서 Web 이나 Webmap 에 대해서 자세하게 아는 사람이 없었기 때문에... 사실상 대부분 검색을 통해서 해결했다. ( 나도 이 업무를 통해서 처음으로 JavaScript를 접했다. ) 대략 6 ~ 7 개월 가량 개발을 진행했고, 현재는 단순한 버그나 최신 데이터 반영..

Leaflet/WebMap 2021. 12. 8. 21:37

항목 19) 클래스 설계는 타입 설계와 똑같이 취급하자

좋은 클래스 설계를 위해서 신경써야하는 부분들에 대해서 정리 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 진행할 것인가? → 이 부분을 통해서 클래스의 생성자 및 소멸자의 설계가 변경된다. 또한 메모리 할당 함수(new, delete) 를 직접 작성할 경우에는 이들 함수의 설계에도 영향을 준다. 객체 초기화는 객체 대입과 어떻게 달라야 할 것인가? → 생성자와 대입 연산자의 동작 및 둘 사이의 차이점을 결정짓는 요소이다. 새로운 타입으로 만들 객체가 값에 의해 전달되는 경우에 어떤 의미를 둘 것 인가? → 어떤 타입에 대해서 값에 의한 전달을 구현하는 쪽은 복사 생성자인데, 해당 부분에 대한 설계를 어떻게 했느냐는 의미이다. 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가?..

C++/Effective C++ 2021. 12. 5. 18:14

항목 18) 좋은 인터페이스 설계: 제대로 쓰기에는 쉽게, 엉터리로 쓰기에는 어렵게

인터페이스를 사용하는 사용자의 실수를 설계 단계에서 미리 방지하자. → 좋은 인터페이스 설계 Wrapper class Date{ public: Date(int month, int day, int year); }; 위의 클래스는 문법적으로 아무런 문제가 없다. 하지만 사용하는 입장에서 실수 하기 딱 좋은 코드이기도 하다. ... Date d(30, 3, 1995); // 3,30을 넣었어야 함. Date d(3, 40, 1995); // 40은 말이 안됨. 위와 같은 상황을 방지하는 간단한 방법은 Wrapper 타입을 이용하는 것이다. struct Day{ explicit Day(int d) :val(d){} int val; }; struct Month{ explicit Month(int m) :val(m..

C++/Effective C++ 2021. 12. 5. 18:12

추가 정보

인기글

최신글

페이징

이전
1 2 3 4
다음
TISTORY
Developing becomes a hobby © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바