성댕쓰 똑똑한 생활

고정 헤더 영역

글 제목

메뉴 레이어

성댕쓰 똑똑한 생활

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (172)
    • 똑똑한 재테크 (1)
      • 올웨더 자산배분 (1)
    • 똑똑한 개발 (170)
      • Hazel 게임엔진개발 (0)
      • Algorithm 과 Data Structure (51)
      • C++ (18)
      • C# (8)
      • 개발로그 (0)
      • Image Processing (2)
      • C++ 게임개발 (60)
      • 컴퓨터 그래픽스 (10)
      • 수학 (13)
      • 영어 (8)

검색 레이어

성댕쓰 똑똑한 생활

검색 영역

컨텐츠 검색

전체 글

  • PThread vs Thread

    2021.05.29 by 성댕쓰

  • 멀티스레드

    2021.05.29 by 성댕쓰

  • C++ 타입과 객체

    2021.05.29 by 성댕쓰

  • Heap Sort

    2021.05.29 by 성댕쓰

  • Merge Sort

    2021.05.29 by 성댕쓰

  • AVL 트리를 이해해보자

    2021.05.29 by 성댕쓰

  • nInject 사용하는 간단한 방법

    2021.05.29 by 성댕쓰

  • mfc-imageProcessing 을 훑어보자~!

    2021.05.27 by 성댕쓰

  • Dependency Injection 에 대해서

    2021.05.24 by 성댕쓰

  • C++ 컴파일과 링크

    2021.05.22 by 성댕쓰

PThread vs Thread

std::thread vs posix thread 어떤 플랫폼에서도 작동하길 원한다면 Posix Threads 를 사용해라. Linux/gcc 만 사용하면 std::thread 좋다. 사용하기 좋은 인터페이스를 두루 갖추고 있다. 현재는 std::thread 도 다양한 플랫폼을 지원한다. boost::thread std::thread 랑 매우 비슷하다. 참조 : https://stackoverflow.com/questions/13134186/c11-stdthreads-vs-posix-threads

똑똑한 개발/C++ 2021. 5. 29. 17:31

멀티스레드

프로세스와 스레드의 차이점 프로세스는 운영체제로부터 프로세서, 필요한 주소공간, 메모리 등 자원을 할당받는다. 스레드는 프로세스가 할당받은 자원을 이용해 공유하면서 실행한다. 멀티스레드 프로그래밍 주의할 점 스레드 안정성(Thread-safe) 중요 프로그램 종료 전에 스레드를 먼저 종료하고 프로그램을 종료해야 한다.

똑똑한 개발/C++ 2021. 5. 29. 17:28

C++ 타입과 객체

타입은 가능한 값과 적용할 수 있는 연산의 집합을 정의한다. 객체는 주어진 타입의 값을 저장하는 메모리 공간이다. 값은 주어진 타입으로 해석되는 메모리상의 비트의 집합이다. 변수는 명명된 객체다. 선언은 객체의 이름을 지정하는 구문이다. 정의는 객체의 메모리 공간을 할당하는 선언의 일종이다.

똑똑한 개발/C++ 2021. 5. 29. 17:25

Heap Sort

Heap Sort 를 구현해보자. 과정은 다음과 같다. 정렬할 배열을 Max Heap 배열로 만든다. 최대값을 배열의 마지막으로 옮긴다.( 오름차순 정렬일 경우 ) 정렬할 사이즈를 줄이고 1과 2를 반복한다. 우선 내가 만든 코드를 보자. #include #inlcude void HeapSort(int* arr, int len); void Heapify(int* arr, int idx, int len); void swap(int* num1, int* num2); int main() { int len; scanf("%d",&len); int* arr = (int*)malloc(sizeof(int)*len); for(int i=0; i= arr[rightChildIdx] && arr[idx] < arr[le..

똑똑한 개발/Algorithm 과 Data Structure 2021. 5. 29. 17:22

Merge Sort

Merge Sort 에 대해 알아보자. Time Complexity 는 O(nlogn) 이다. Merge Sort 진행과정은 이렇다. 주어진 배열을 반으로 계속 나눈 뒤, 나눈 배열을 비교하여 정렬하고 다시 합친다. 여기에 대한 이해를 돕는 아래 그림은 https://www.geeksforgeeks.org/merge-sort 에서 참고했다. 먼저 메인 함수부터 보며 시작해보자. 배열 사이즈를 사용자로부터 입력받고, 사이즈만큼 배열 요소를 입력받는다. #include #include int main() { // 받게될 배열 사이즈이다. int size; scanf("%d",&size); // 사이즈 만큼 배열을 선언한다. int* arr = (int*)malloc(sizeof(int)*size); // 정..

똑똑한 개발/Algorithm 과 Data Structure 2021. 5. 29. 17:20

AVL 트리를 이해해보자

트리의 탐색연산은 O(log밑2 n)의 시간복잡도를 가진다. 하지만 저장순서가 예를 들어 오름차순일 경우 탐색하는 O(n)에 가까운 시간복잡도를 가진다. 이런 트리의 균형을 잡아주는 방법에는 다음과 같은 것이 있다. AVL 트리 2-3 트리 2-3-4 트리 Red-Black 트리 B 트리 위의 이진 탐색트리가 자동으로 균형을 잡아주는 방법 중 AVL 트리에 대해 알아보자. 균형 인수 AVL 트리는 균형의 정도를 표현하기 위해 균형인수를 사용한다. 균형인수 = 왼쪽 서브 트리의 높이 - 오른쪽 서브 트리의 높이 균형인수의 절대 값이 클 수록 트리의 균형이 무너진 것이다. 이후에는 균형인수 2이상인 경우 리밸런싱을 하는 과정을 보이겠다. AVL 트리의 리밸런싱 AVL 트리가 리밸런싱을 하는 경우는 4 가지 ..

똑똑한 개발/Algorithm 과 Data Structure 2021. 5. 29. 17:15

nInject 사용하는 간단한 방법

사용하는 이유는? 의존성을 주입할 수 있음. 주입 할 수 있기 때문에 의존성을 제거할 수 있음. 사용하는 방법은? manual dependency injection 을 Ninject로 바꿔보자. 코드 설명 formHandler 가 mailSender 를 가지고 있음. mailSender 를 유연하게 쓰고 싶음. class Program { static void Main(string[] args) { IMailSender mailSender = new MockMailSender(); FormHandler formHandler = new FromHandler(mailSender); fromHandler.Handle("test@test.com"); } } 위의 manual dependecy injection ..

똑똑한 개발/C# 2021. 5. 29. 15:10

mfc-imageProcessing 을 훑어보자~!

mfc 로 프로젝트를 생성하면 다음과 같은 소스파일이 생성된다. ImageProcessing.cpp ImageProcessingDoc.cpp ImageProcessingView.cpp FileView.cpp MainFrm.cpp … 이중에서 가장 중요한 소스는 위부터 3개다. 위 3개에 나머지 소스가 종속되어있다고 보면 된다. ImagaProcessing.cpp 은 전체적인 흐름을 담당하고 ImageProcessingDoc.cpp 은 메뉴, 문서 등을 담당하며 ImageProcessingView.cpp 은 이미지가 보이는 화면을 담당한다. 먼저 ImageProcessingView.h를 보자 ImageProcessingView.cpp 에서 정의할 클래스의 변수, 메서드를 볼 수 있다. class CImag..

똑똑한 개발/Image Processing 2021. 5. 27. 22:30

Dependency Injection 에 대해서

Dependency Injection 이란? 의존성 주입(DI) 느슨한 결합을 가능하게 하는 디자인 패턴 장점 : 클래스간 결합도 감소. 코드 재사용성 증가. 단위 테스트 용이. 코드의 유지보수 용이. ex ) 신발가게에서 신발을 주문하면 공장에서 만드는 시나리오 Shoes.class(신발 정보를 나타내는 신발 클래스) public class Shoes { public string Name{get; set;} public int Size{get; set;} } IShoesFactory.interface(신발공장 인터페이스) interface IShoesFactory { public Shoes MakeShoes(); } NShoes.class(인터페이스를 상속받은 NShoes 클래스) public clas..

똑똑한 개발/C# 2021. 5. 24. 21:50

C++ 컴파일과 링크

main 함수 프로그램 시작점을 알린다. 실행하는 주체는 시스템이다. 일부 시스템(Unix)에서는 반환값(return 0) 을 이용 프로그램이 성공적으로 종료했는지 판단한다. 컴파일 과정 C++ 는 Compile 언어다. 사람이 쓴 코드를 기계가 이해할 수 있게 변환하는 프로그램이 compiler 이다. 소스코드가 컴파일 되면 보통 목적코드를 생성한다. 목적코드는 윈도우에서 .obj 유닉스에서 .o 확장자를 갖는다. 링크 과정 실행가능한 프로그램을 만들려면, 목적코드를 링크해야 한다.

똑똑한 개발/C++ 2021. 5. 22. 17:56

추가 정보

인기글

최신글

페이징

이전
1 ··· 14 15 16 17 18
다음
TISTORY
성댕쓰 똑똑한 생활 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바