본문 바로가기

둥지/CS4

C# 인터페이스와 추상 클래스 정리 인터페이스추상 클래스일반 클래스접근 지정자함수 접근 지정 불가능(기본적으로 public)함수 접근 지정 가능함수 접근 지정 가능필드 불가능(프로퍼티, 이벤트, 메서드 선언 가능)가능가능다중 상속가능불가능불가능 인스턴스화불가능불가능 가능속도인터페이스가 추상클래스에 비해 느림추상 클래스가 인터페이스보다 빠름-메소드추상 메서드만 선언 가능모든 형태의 메서드 선언, 정의 가능모든 형태의 메서드 선언 및 정의 가능 2023. 7. 21.
[C++ 키워드] const, constexpr const 변수변수 앞에 const 키워드를 붙이면 해당 변수의 값은 바뀔 수 없다.말하자면 생김새는 변수지만 본모습은 상수인 셈.const int a = 0;a = 10; // Error 이러한 특성을 이용하면 const를 #define처럼 사용하는 것도 가능하다.const double PI = 3.1415926535;원주율처럼 절대 바뀔 일이 없는 값을 #define으로 선언할지 const 변수로 선언할지 고를 수 있다. const 포인터와 const 레퍼런스const 포인터int* IntPtr = nullptr;IntPtr = new int[10];IntPtr[0] = 10;위처럼 동적 메모리를 할당받기 위해선 포인터를 사용해야 한다. 그렇다면 여기서 IntPtr에 할당해준 int형 배열의 값이 바.. 2023. 6. 22.
C/C++ 더블 포인터 사용 까닭 가끔 C/C++ 프로그래밍을 하다 보면 더블 포인터 인자를 가진 API 함수를 보곤 한다.굳이 더블 포인터를 사용하는 까닭이 뭘까?  #include void Swap(int* _A, int* _B){ int C = 0; //스왑 C = *_A; *_A = *_B; *_B = C;}int main(){ int* APtr = new int(3); int* BPtr = new int(5); std::cout  위 코드는 포인터 변수가 가진 값을 스왑해주는 코드이다. 포인터가 가진 변수의 값을 바꾸기 위한 목적이라면 위 코드로도 충분하지만만약 포인터 자체의 값, 즉 주소값을 바꾸고 싶다면 어떻게 해야 할까? #include void Swap(int** _A, int** _B){ int* C = nullptr;.. 2023. 5. 1.
캐싱 캐싱은 데이터를 나중에 쉽게 재사용할 수 있도록 미리 연산해두는 것을 말한다. 컴퓨터의 프로세스들은 최근에 자주 사용하거나 자주 사용된 메모리를 캐싱하여 상대적으로 느린 메인 메모리의 접근 횟수를 줄여 성능을 향상시킨다. 대부분의 메모리 위치들은 짧은 시간동안 한 번 이상 접근되기 때문에 하드웨어 수준에서 캐싱할 경우 연산 성능 향상에 크게 도움이 된다. 캐싱은 소프트웨어에 있어서도 비슷한 접근을 한다. 만약 어떤 작업 또는 연산이 특별히 느리다면, 연산을 필요한 것보다 많이 수행하는 것은 낭비일 것이다. 때문에 한 번 작업한 결과는 메모리에 저장해두고 나중에 필요할 때 재사용할 수 있어야 한다. 일반적으로 느린 작업들 디스크 접근 같은 파일을 두 번 이상 열고 읽는 것은 피해야 한다. (아마 파일 시스.. 2023. 4. 3.