Study123 [C#] 리플렉션(Reflection) 1. 리플렉션(reflection)이란? - 애플리케이션 실행 중 어셈블리의 내용(메서드, 프로퍼티, 생성자 등, 인스턴스의 데이터 타입 정보)을 확인하거나 검사하려는 경우 사용되는 기능 - 프로그램 실행 도중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메소드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공한다. - 컴파일 시에 알 수 없었던 타입이나 멤버들을 찾아내고 사용할 수 있게 해주는 메커니즘 2. 리플렉션의 목적 - 애플리케이션 개발시, 디버깅 또는 런타임에 알 수 없는 객체의 동작을 분석하기 위함. - 외부 라이브러리에 존재하는 클래스 및 메서드를 분석하기 위함. - 개발 도구 자체를 개발하거나 분석도구를 만들때.. 2023. 11. 1. [개발 지식][C++/C#] 얕은 복사, 깊은 복사 1. 얕은 복사(shallow copy) - 한 객체의 모든 멤버 변수의 값을 다른 객체로 복사 - 실제 포인터가 가리키는 값은 같기 때문에 한 쪽이 변하면 다른 한 쪽도 따라서 변함 2. 깊은 복사(deep copy) - 한 객체의 모든 멤버 변수의 값 뿐만 아니라, 포인터 변수가 가리키는 모든 객체에 대해서도 복사 - 포인터까지 복사가 되어 생기는 것으로, 한 쪽이 아무리 바뀌어도 다른 한 쪽에는 영향이 없음 3. 소스코드(C++) // c++ #include #include #include #define _CRT_SECURE_NO_WARNINGS using namespace std; class Student { public: char* name; int age; Student(const char* .. 2023. 10. 31. [알고리즘] DFS와 BFS 1. DFS(Depth-First Search) - 깊이 우선 탐색 - 루트 노드나 임의 노드에서 "다음 브랜치로 넘어가기 전에 해당 브랜치를 모두 탐색"하는 방법 - 스택이나 재귀함수를 이용해 구현 - 모든 경로를 방문해야 할 경우 적합 - 인접 행렬 : O(V^2) - 인접 리스트 : O(V+E) // V는 접점, E는 간선 2. BFS(Breadth-First Search) - 너비 우선 탐색 - 루트 노드나 임의 노드에서 "인접한 노드부터 먼저 탐색"하는 방법 - 큐를 이용해 구현 - 최소 비용으로 탐색을 진행할 때 적합\ - 인접 행렬 : O(V^2) - 인접 리스트 : O(V+E) 3. 소스코드(C++) // DFS #include #include using namespace std; int .. 2023. 10. 30. [개발 지식] 클린코드와 리팩토링 1. 클린 코드 - 가독성이 높은 코드 - 코드를 작성하는 의도와 목적이 명확하며, 다른 사람이 쉽게 읽을 수 있어야 함 - 다른 사람이 코드를 봐도 자유롭게 수정이 가능 - 변경된 내용이 어떻게 상호작용하는지 이해하는 시간을 최소화 시키는 것 - 가독성을 높이는 방법 1) 의미있는 네이밍 2) 오류 제거 3) 중복 제거 4) 의존성 최소화 5) 클래스, 메소드가 한가지 일만 처리 6) 보기 좋게 배치하기 7) 주석 달기 2. 클린 코드 예시 // 클린 코드 변경 전 public int A(int a) { return a * a; } // 클린 코드 변경 후 -> 의미있는 네이밍 public int Square(int num) { return num * num; } 3. 리팩토링 - 프로그램의 외부 동작.. 2023. 10. 24. [알고리즘] 해시 테이블(Hash Table) 1. 해시 테이블 - 완전 탐색(브루트 포스)으로 시간초과에 빠지게 되는 문제들을 풀기 위해 필요함 - Key, Value로 데이터를 저장하는 자료구조 - 데이터를 빠르게 검색할 수 있음 - 각 key에 따라 고유한 index를 생성하고 이 index 값을 활용해 값을 저장하거나 검색한다. - 미리 key값으로 데이터들을 저장해 놓으면 데이터를 찾기 쉽다. - 평균 시간복잡도 : O(1) 2. 해시 함수에서 고유 인덱스 값을 설정하는 방법 1) Division Method - 나눗셈을 이용하는 방법 - 입력값을 테이블의 크기로 나누어 계산 - 테이블의 크기를 소수로 정하고 2의 제곱수와 먼 값을 사용해야 효과가 좋다고 알려짐 2) Digit Folding - 각 key의 문자열을 ASCII 코드로 바꾸고.. 2023. 10. 24. [C++] final 키워드 2 이것 저것 알아보면서 코드를 보면 final이라는 키워드가 있는데 이게 뭐지 싶었다. 알아보니 final은 c/c++에서는 쓰이지 않고, java에서 쓰이는 것이라고 한다. java에서 변수 앞에 쓰이는 final은 c++에서의 const와 같은 상수를 뜻한다! //요약 final은 java에서 쓰임 변수 앞에 쓰인 fianl은 c++의 const와 같은 의미로 사용 2023. 10. 24. [C++] strchr함수 - 문자 검색 1. 라이브러리 : 2. 함수 원형 // 검색할 문자열, 존재하는지 확인할 문자(아스키 값) const char* strchr(const char* str, int c); char strchr(char* str, int c); 3. 함수 설명 - 문자열 내에서 해당 문자가 있는지 검색해주는 함수 - 첫번째 문자열 내에 두번째 문자가 존재하는지 검사 - 존재하면 존재하는 곳의 포인터 반환, 존재하지 않으면 널 포인터 반환 4. 예시 1) 특정 문자 찾기 // string 이용 -> 주소값 사용 string str = "aAbBcCdD"; char* ptr = strchr(&str[0], 'C'); // 알파벳 C를 찾음 if(ptr != nullptr) { cout 2023. 10. 20. [C++] npos 1. string::npos란? - string의 find() 함수 수행 시에 찾는 문자열이 없을 때 반환된다. - '-1' 의 값을 가지는 상수이다. 2. 예시 string s = "abcde"; if(s.find('a') == string::npos) // a는 s에 들어있으므로 false 반환 { cout 2023. 10. 19. [C++] final 키워드 1. final - 상속을 방지하는 키워드 - 더 이상 가상함수를 오버라이딩하지 않겠다는 의미 - 가상함수의 마지막을 가르키는 키워드 - 클래스와 멤버함수 둘 다 사용 가능 - override와 같은 자리에 쓰임 2. 예시 #include using namespacee std; class A { public: virtual void print() { cout 2023. 10. 18. [알고리즘] 이분 탐색(Binary Search) 1. 이분 탐색 - 정렬된 배열에서 찾고자 하는 수를 찾는 방법 - 계속해서 두가지 경우로 나누면서 탐색 - 인덱스를 이용해 탐색 - 시간복잡도 : O(logN) 2. 탐색 방법 1. 배열의 첫번째 인덱스와 마지막 인덱스 번호를 각각 left, right로 저장 2. left와 right의 중간지점인 mid의 인덱스를 (left+right)/2 를 이용해 구함 3. left가 right보다 커지는 시점까지 반복 -> left보다 right가 커지면 찾고자 하는 수가 없는 경우임 4. 배열의 mid번째 값과 내가 찾고자 하는 값을 비교 4-1. 내가 찾고자 하는 값이 mid보다 작은 경우 - 최소한 mid - 1번째 인덱스의 값보다는 작거나 같기 때문에 right를 mid-1로 변경시켜 최대값을 바꿔줌(구.. 2023. 10. 18. [C++] char형에서 int형으로 형 변환 오늘 오랜만에 프로그래머스 문제를 풀다가 char형을 int형으로 형 변환시키는 것에서 순간 막혔다. string형은 int형으로 바꾸려면 stoi를 사용하면 되는데 char형은 뭘로 바꿔야 하지? 하다가 stoi랑 같이 나오는 atoi가 const char * 를 인수로 받길래 이거구나 싶어서 해봤는데 잘 되지 않았다. 그래서 검색해서 찾아보았고, 알고보니 쉬웠다. char형은 아스키코드이기 때문에 현재 char에서 '0'의 아스키코드 값을 빼주어 구할 수 있었다. char c = '5'; int i = c - '0'; cout 2023. 10. 17. [UML] 타이밍 다이어그램(Timing Diagram) - 시간에 따른 각 객체의 상태와 그 상태를 변경시키는 방아쇠 역할을 하는 메시지들을 보여주는 도표 - 순차 다이어그램과 상태 머신 다이어그램을 합쳐 놓은 것과 같다. - 각 신호들이 시간별로 처리되는 과정을 그림으로 나타낸 것 - 신호의 동작을 정확한 타이밍에 맞춰 이뤄지게 하여 발생할 수 있는 충돌이나 간섭을 방지할 수 있음 1) 시간축 - 시간의 흐름을 나타내는 수평선 2) 신호 - 수직선으로 표시되고 상태 변화에 따라 높은 레벨과 낮은 레벨로 표시됨 3) 클럭 - 시스템의 타이밍 신호로 주기적으로 반복되는 신호로 표시됨 - 시스템의 동작을 동기화함 4) 지연 - 신호의 전달이나 처리에 소요되는 시간을 나타냄 5) 상태 전이 - 신호의 상태 변화를 표현 2023. 10. 13. 이전 1 2 3 4 5 6 7 8 ··· 11 다음