프로그래밍 언어

    C++ 23 추가된 주요 기능들

    1. if consteval - if constexpr의 consteval 버전이 생긴다. 2. Deducing this - 이제 클래스에서 똑같은 함수를 non-const, const 버전으로 두 가지를 만드느라 생기는 중복코드가 대폭 간결해진다. 3. auto(x), auto{x} - 함수 파라미터에서 rvalue (정확히는 prvalue)로 카피해 전달해주는 기능이다. 예제) 벡터에서 첫 원소와 똑같은 원소를 다 지우고 싶을 때 auto elem = v.front(); std::erase(v.begin(), v.end(), elem); 이 때 auto elem = v.front(); 에서 무조건 복사가 생긴다. C++ 23부터는 std::erase(v.begin(), v.end(), auto(v.f..

    [C#] 람다식 (Lambda Expression)

    람다식(Lambda)식은 접근자, 함수 이름, return문이 없는 익명 함수(anonymous function)다. 람다식을 사용하면 더 짧은 코드를 작성할 수 있으며 => 연산자를 사용한다. class Program { static int DoubleFunc(int num) { return num * 2; } static void Main(string[] args) { Console.WriteLine(DoubleFunc(10)); } } // 람다식 사용 class Program { static void Main(string[] args) { Func DoubleFunc = (num) => num * 2; int num = 10; Console.WriteLine(DoubleFunc(num)); } }..

    [C#] 배열의 타입을 변경하는 방법 (제네릭 가능)

    1. Array 클래스의 ConvertAll 메서드 public static TOutput[] ConvertAll ( TInput[] array, Converter converter); TInput[] array - 특정 타입으로 변환하고 싶은 배열을 전달한다. Convert converter - 배열의 요소를 특정 타입으로 변환하는 변환기를 전달한다. - TInput: 기존 배열의 타입을 설정한다. - TOutput: 변환하고 싶은 타입을 설정한다. ConvertAll() 메서드는 특정 타입으로 변환된 새로운 배열을 반환한다. 다음 예제는 string 타입의 배열을 int 타입의 배열로 변환된 새로운 배열을 반환한다 class Program { public static int stringToInt(st..

    [Python] 슬라이싱 (Slicing) 기본과 예제

    정의 슬라이싱(slicing) or 슬라이스(slice): 연속적인 객체들에(예: 리스트, 튜플, 문자열) 범위를 지정해 선택해서 객체들을 가져오는 방법 및 표기법을 의미한다. 슬라이싱을 하면 새로운 객체를 생성하게 된다. 즉, 일부분을 복사해서 가져온다고 생각하면 된다. 기본 사용법과 형태 기본 형태 a라는 연속적인 객체들의 자료구조(예: 리스트, 튜플, 문자열)가 있다고 가정을 했을 때 기본 형태는 아래와 같다. a[start : end : step] 각각 start, end, step 모두 양수와 음수를 가질 수 있다. start: 슬라이싱을 시작할 시작위치다. end: 슬라이싱을 끝낼 위치로 end는 포함하지 않는다! step: stride(보폭)라고도 하며 몇개씩 끊어서 가져올지와 방향을 정한다..

    [Python] time() 함수, 거리구하기 예제

    우리는 시간(time) 모듈에 있는 time() 함수를 이용해 시스템 상의 시간을 얻을 수 있다. - time() 함수는 그리니치 표준시(이하 태평양 기준시, GMT) 1970년, 1월 1일, 00 : 00 : 00 부터 지금 현재 시간까지 흐른 시간을 초(second)와 밀리 초(millisecond) 단위로 표현한 시간을 반환하는 함수이다. - 이는 유닉스 시간(UNIX epoch)으로 널리 알려져 있으며, 1970년대가 유닉스 시스템이 처음 소개된 년도이다. 시간구하는 예제 프로그램 import time currentTime = time.time() #현재 시간(흐른시간) 구하기 totalseconds = int(currentTime) # 현재 흐른시간을 초 단위로 변환 currentsecond =..

    [Python] 수학 (math) 함수

    파이썬 내(built-in)에 구현되어 있는 함수 표 함수 출력 결과 print(abs(-3)) #절대값 출력 print(abs(-3.5)) #절대값 출력 print(max(2, 3, 4, 6)) #최대값 출력 print(min(2, 3, 4)) #최소값 출력 print(pow(2,3)) # 2^3 (= 2**3) print(round(3.51)) #반올림 print(round(3.1456, 3)) #소수점 3번째 아래를 반올림 수학 (math) 함수 - 파이썬은 수학(math) 모듈을 통해 많은 수학 함수(mathmatical funtions)들을 제공한다. - 파이(pi)와 자연상수 e 도 math 모듈을 통해 이용할 수 있다. ex) math.pi, math.e 수학적 함수(mathmetical f..

    [C] 키 입력받는 함수 GetAsyncKeyState, GetKeyState

    GetAsyncKeyState SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 된다.) 가상 키코드 모음 반환값은 아래와같이 4가지로 나뉜다. 이전에 누른 적이 없고 호출 시점에서 눌린 상태, 즉 키가 눌려진 시점에서 0x8000을 반환한다. 만약 이전에도 누른 적이 있고 호출 시점에서도 눌렸으면 0x8001을 반환한다. 이전에 키를 눌렀으면 0x0001을 반환하고, 눌리지 않았다면 0x0000을 반환한다. Get..

    [C#] String Interning

    C#의 string.Intern 이라는 메서드는 문자열 풀에서 문자열을 풀링시켜 메모리를 아끼고 메모리 비교를 더 빠르게 해준다. 쓰는건 정말 간단하다. a = string.Intern("this is string") 으로 문자열을 넘기면 끝이다. 간단하게 퍼포먼스 비교를 해보자. string a = "dolphin"; string b = "dol"; b += "phin"; bool res = false; var sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 100000000; i++) res = a == b; sw.Stop(); Console.WriteLine("Before intern:"); Console.WriteLine(sw.ElapsedMilli..

    [C#] 고성능 서버 - __FILE__, __LINE__ 대체제

    UI가 없는 서버에서 동작의 내용을 확인하는 가장 기본적인 방법은 file로 남기는 log다. 정상 동작이나 오류상황에 대한 상세한 로그가 남아야 문제가 생겼을 때 파악하기가 쉽기 때문에, 간단한 동작이지만 아주 빈번하게 호출되는 부분이다. 로그 출력에서 성능을 많이 빼앗기지 않도록 기반을 다져놓으면 비즈니스 로직 구현을 위해 더 많은 H/W 리소스를 배분할 수 있다. 성능을 굳이 신경쓰지 않는다면 아래 있는 내용을 끝까지 모두 적용할 필요는 없다. 콜스택을 얻어와서 가장 마지막 함수를 찍는 방법 현재 스레드 컨텍스트에서의 StackFrame 정보를 얻어온 후, 프레임 데이터의 가장 마지막 부분을 읽어 호출자의 정보를 얻어낼 수 있다. 가장 태초부터 있었던 방법이기 때문에 C#으로 함수 호출 위치를 얻어..

    [SQL] 데이터베이스 키(KEY) 종류

    Key의 종류슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.<p data-ke-size="si..