프로그래밍 언어

    [C#] default와 new() 제약 조건 사용하기

    new와 defaultnew는 generic 함수의 제약 조건이다. 해당 제약 조건을 걸면 generic 함수 내에서 new T()와 같은 코드를 사용할 수 있다. 이 제약 조건을 걸었을 경우 struct와 enum은 항상 사용 가능하고, class는 구현에 따라 달라지게 된다.  default는 C#의 기본 키워드로 제약 조건이 필요하지 않고, 다른 많은 곳에서도 사용할 수 있는 기능이다. default를 각 타입에 사용할 경우 아래 표와 같은 값이 생성된다.classclass는 참조 타입(reference type)이기 때문에 null을 허용하기에 default를 사용했을 때 값은 항상 null이 된다.new의 경우 생성자를 하나도 만들지 않은 상태라면, 항상 사용이 가능하다(기본 생성자). 반대로 ..

    [C#] Attribute : Obsolete - 더 이상 사용하지 않거나 그럴 예정인 코드에 대해서

    class TestClass{    [Obsolete]    public void Function1()    {    }} 더 이상 사용하지 않거나 그럴 예정인 클래스나 함수, 변수의 앞에 [Obsolete] 어트리뷰트를 붙여주면 된다. 그렇게 하면 해당 함수를 호출할 때 초록색 밑줄과 함께 더 이상 사용하지 않는 함수라는 경고가 뜬다. 그리고 툴팁에서는 함수 앞에 [deprecated]가 붙게 된다.이 [Obsolete]는 세 가지 방식의 오버로딩을 지원한다.class TestClass{ [Obsolete] public void Function1() { } [Obsolete("Not use anymore.")] public void Function2() { }..

    [C++] cin.ignore와 버퍼에 대한 이해

    cincin은 character input의 약자로, 버퍼의 값을 읽어온다. 만약 버퍼에 읽어올 값이 없으면 표준 입력 스트림으로부터 입력을 받아와 버퍼에 저장하고나서 버퍼의 값을 읽어온다.입력을 받는다는 것이 아닌 버퍼를 먼저 읽으려고 한다는 관점이 중요하다. (버퍼는 자료구조 queue와 유사하다. 선입선출로 작동한다.) cin >>은 공백 (스페이스, 탭, 줄바꿈) 문자를 기준으로 끊어서 읽어오고, 공백문자는 무시한다#include using namespace std;int main() { char name[100]; cout > name; cout 0. 버퍼에 다음과 같이 저장된다. [ j ] [ o ] [ h ] [ n ] [ ' ' ] [ n ] [ a ] [ n ] [ a ]..

    [C++] std::map을 value 기준으로 정렬하기

    std::map 정렬map의 자료구조는 기본적으로 key 값 기준 오름차순 기반 정렬을 하고 있다template , // map::key_compare class Alloc = allocator > // map::allocator_type > class map; 만약 우리가 key 값 기준 내림차순으로 변경하기 위해선 3번째 인자에 greater()를 넣어주면 된다// 키, 데이터, comparemap> m;value 값 기반 정렬하기map에는 정렬 함수가 따로 없어서, vector를 활용해야한다. 구체적으로, map은 tree형태로 되어져있고, tree 형태를 만드는 과정에서 key을 기준으로 정렬을 한다. 완성된 tree를 ..

    [C++] set, map 정렬 기준 바꾸는 방법

    C++ STL에서 제공하는 set, map, multiset, multimap 등의 컨테이너는 자동으로 데이터를 정렬된 상태로 유지시켜 준다. 그래서 이러한 컨테이너에 데이터를 넣고 그대로 출력하기만 하면 오름차순으로 정렬된 데이터를 얻을 수 있지만 가끔은 내림차순 정렬이 필요하거나 내가 원하는 방식대로 정렬되어야 하는 경우도 생긴다. set의 템플릿 (template)을 살펴보면 다음과 같이 되어 있다template , class _Alloc = allocator> _Kty 부분은 흔히 사용하는 키 타입을 설정하는 부분이다. 우리가 봐야 할 부분은 _Pr이다 기본 값으로 less가 설정된 모습을 볼 수 있는데 이 less는 아래와 같이 정의되어 있다template struct less { _CXX..

    [C++] 문자열 뒤집는 방법

    1. reverse() 함수 #include #include#includeusing namespace std; int main() { string str = "abcd"; reverse(str.begin(), str.end()); cout1.5 reverse iterator 사용string str, rstr;cin >> str;rstr.assign(str.rbegin(), str.rend());2. strrev() 함수 #include#includeusing namespace std; int main() { char str[] ="abcd"; strrev(str); cout3. for문 사용#include#includeusing namespace std; int main(..

    [C#] IsNullOrEmpty와 IsNullOrWhiteSpace의 차이점

    두 메서드는 한글로 해석하면 비어있다와 공백이다 정도의 아주 미묘한 차이로 해석된다. 이게 한글로 해석하면 미묘한 것이 공백의 사전적 정의에 "아무것도 없이 비어 있음."이 포함되어 있다. 결국 똑같이 해석되는 것처럼 보이지만 C#에서 프로그래밍적으로 두 메서드는 엄연히 다른 메서드다. MSDN에 따르면 String.IsNullOrWhiteSpace에 대한 설명에서 다음과 같이 나와있다.IsNullOrWhiteSpace는 우수한 성능을 제공한다는 점을 제외하면 다음 코드와 유사한 기능을 하는 편리한 메서드입니다.return String.IsNullOrEmpty(value) || value.Trim().Length == 0;공백 문자는 유니 코드 표준에 의해 정의됩니다. IsNullOrWhiteSpace ..

    [Python] 문자열 뒤집는 3가지 방법

    Slice / 슬라이싱시작 인덱스 또는 끝 인덱스 또는 step을 넣지 않는다면, 전체를 뜻한다.num = [1,2,3,4,5]print(num[::]) # [1,2,3,4,5] / 전체print(num[2::] # [3,4,5] / index 2부터 끝# step의 의미 => 증가폭num = [1,2,3,4,5,6,7,8,9,10]num[1::2] # index 1번째부터 끝까지 2씩 증가하며 sliceprint(num[1::2]) # [2, 4, 6, 8, 10]-index는 끝 인덱스부터 차례대로 -1 -2 -3 ... 인덱스 값을 뜻하며 전체 길이를 알 수 없을때 용이나게 쓰인다.num = [1, 2, 3, 4, 5]num[-1] # 마지막 요소인 5print(num[-1]) # 5num[1:-1..

    [Python] swap, 두 개의 변수를 교환하는 방법

    변수a = 10b = 20# a와 b를 교환a, b = b, aprint(a, b)# 출력# 20 10 또 다른 방법으론 swap 함수def swap(a, b): temp = a a = b b = temp return a, b a = 10b = 20# a와 b를 교환swap(a, b)print(a, b)# 출력# 20 10 n개 이상도 가능하다a = 10b = 20c = 30a,b,c = c,b,aprint(a,b,c)# 출력# 30 20 10 리스트arr1 = [1,2,3]arr2 = [4,5,6]arr1 , arr2 = arr2, arr1print(arr1, arr2)# 출력# [4, 5, 6] [1, 2, 3]#요소 위치변경하기arr = [1,2,3,4]arr[0],arr[1] = arr[..

    [Java] Comparable과 Comparator : 비교를 위한 인터페이스

    Comparable 인터페이스Comparable은 자기 자신과 매개변수 객체를 비교할 수 있도록 만들어주는 인터페이스이다. 이 인터페이스를 채택하여 구현하면 compareTo 메서드를 통하여 객체간에 비교가 가능해진다.Comparable 인터페이스와 Comparator 인터페이스Comparable과 비슷한 기능을 하는 인터페이스로 Comparator가 있다. 둘의 차이점은 다음과 같다.1) 구현해야 하는 메서드의 차이Comparable은 compareTo(T o1)을 구현해야 한다.Comparator는 compare(T o1, T 02)를 구현해야 한다. 매개변수가 2개이다. 2) 사용 방법의 차이Comparable은 자기 자신과 다른 객체를 비교한다.Comparator는 매개변수로 들어오는 두 객체를 ..