Software Development 378

[C++] std::remove & std::remove_if 이해하기

template ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& val); template ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p ); - remove : 범위(first~last)내에서 val과 일치하는 원소를 제거한 범위로 변환 - remove_if : 범위(first~last)내에서 조건 p를 만족하는 원소를 제거한 범위로 변환. -> 이 함수는 실제 원소를 제거하는 것이 아닌 지워야 하는 원소들을 컨테이너 맨 뒤로 보내버린다. ** 이때 이 두 함수는..

[Effective C#] new 한정자 사용

Effective C# 아이템 10 : 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라. public class MyClass { public void MagicMethod() { Console.WriteLine("MyClass"); } } public class MyOtherClass : MyClass { public new void MagicMethod() { Console.WriteLine("MyOtherClass"); } } 베이스 클래스에서 virtual로 선언한지 않은 멤버를 상속받은 클래스에서 new 한정자를 통해 재정의할 수 있다. 재정의를 통해 구현이 가능하지만 사용자에게 모호함을 줄 수 있다. object c = MakeObject(); MyClass cl = c as M..

EXIF (Exchangeable Image File Format) - 이미지 파일 메타 데이터 포맷

EXIF(Exchangeable Image File Format), 교환 이미지 파일 형식 디지털 카메라 등에서 사용되는 이미지 파일 메타데이터 포맷으로, 카메라가 촬영한 사진, 녹음파일에 시간 등의 각종 정보를 담기 위해 개발되었다. 즉, JPEG, TIFF 6.0과 RIFF, WAV 포맷에 이미지나 소리에 대한 정보를 추가로 기록할 수 있다. 기록정보 - 날짜와 시간 정보 - 카메라 설정/카메라 정보 - 저작권 정보에 대한 설명 - 위치 정보 - Orientation(*이미지 회전/반전 정보로 이미지 수정없이 이 태그로 회전정보를 입력할 수 있다. 편집 프로그램에 따라 이 값을 수정할수도, 이미지 자체를 회전시킬 수도 있다. 이 태그를 인식하지 못하는 프로그램에선 문제가 발생할 수 있다.) 리눅스에서..

[C#] abstract & virtual 연산자와 override & new 연산자

virtual method(가상 함수) 1. abstract(추상) vs virtual(가상) - abstract(추상) : 선언하는 클래스도 반드시 abstract 클래스. 이 키워드로 정의한 속성이나 메서드는 본문을 정의할 수 없으며 접근 한정자는 public, internal, protected로 선언. public abstract class TestAbstractClass { public abstract int TestAbstractFunc(); } - virtual(가상) : 정적 클래스를 제외한 모든 클래스에서 사용 가능. 이 키워드로 정의한 속성이나 메서드는 본문을 정의할 수 있으며 abstract와 마찬가지로 접근 한정자는 public, internal, protected로 선언해야 한다...

[Effective C#] nameof() 연산자

nameof() - MS Link 변수, 형식 또는 멤버의 이름을 문자열 상수로 가져온다. Console.WriteLine(nameof(System.Collections.Generic)); // output: Generic Console.WriteLine(nameof(List)); // output: List Console.WriteLine(nameof(List.Count)); // output: Count Console.WriteLine(nameof(List.Add)); // output: Add var numbers = new List { 1, 2, 3 }; Console.WriteLine(nameof(numbers)); // output: numbers Console.WriteLine(nameof(..

[Effective C#] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라

문자열 보간 기능 -> 링크 문자열 보간 기능 '$'을 이용하여 생성된 문자열은 1)단순 문자열일 수도 있지만, 2)FormattableString을 상속할 타입일 수도 있다.1)문자열 : 문자열 자체string first = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";2) FormattableString : format문자열과 format에 구성될 argument로 구성(MS)FormattableString second = $"It's the {DateTime.Now.Day} of the {DateTime.Now.Month} month";*FormattableString 객체라면 컴퓨터에 지정된 문화권을 고려하여 문자열을 생성할 ..

PC 구매 전 기본 상식 - GPU 쉽게 이해하기

GPU(Graphic Processing Unit) : 그래픽 처리장치 컴퓨터 시스템에서 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력해주는 연산장치. 컴퓨터 그래픽을 처리하는 장치이다. CPU vs GPU (이전 포스팅 : CPU 이해하기) CPU(중앙처리장치)는 데이터를 순차적으로 입력받아서 연산하고 처리하는 직렬처리 방식이다. 초기 CPU는 컴퓨터에 입력이 들어오면 데이터를 계산하고, 처리하고, 이를 화면에 그려주는 일까지 모든일을 담당했다. 단순한 용도로만 사용하던 컴퓨터는 CPU 혼자서 이러한 작업은 무리없이 소화했는데, 시간이 지남에 따라 컴퓨터는 좀더 복잡한 계산과, 게임과 같은 복잡한 화면을 그리는 용도로 사용되기 시작했다. 순차적으로 데이터를 처리하는 CPU는 처리하는 양이 많아짐..

[Effective C#] string.Format()을 보간 문자열로 대체하라

String.Format 메서드 (링크) String s = String.Format("The current price is {0} per ounce.", pricePerOunce); Console.WriteLine(s); 생성된 문자열을 직접 출력해보고 올바른 형태인지 직접 확인하기 전까지 코드를 제대로 작성했는지 확인이 어려움 - 포맷 문자열과 인자리스트를 분리하여 전달 - 포맷 문자열에 나타낸 인자의 개수와 실제 전달되는 인자의 개수가 일치하는지 확인하지 않음. - 개발자의 실수로 누락하여 런타임 에러가 발생할 수 있음 $ 문자열 보간 (링크) string name = "Mark"; var date = DateTime.Now; // Composite formatting: Console.WriteLi..

[Effective C#] 캐스트보다는 is, as가 좋다.

C#에서의 형 변환 - as object o = Factory.GetObject(); // as 변환 MyType t = o as MyType; if (t != null) { //MyType 타입의 t 객체 사용 } else { //형변환 실패 시 } - cast(강제 형 변환) object o = Factory.GetObject(); // cast 변환 try { MyType t; t = (MyType) o; //MyType 타입의 t 객체 사용 } catch (InvalidCastException) { //형변환 실패 오류 } => as를 사용할 경우 작성하기 더 쉽고 읽기도 편하다. try/catch 문이 없기 때문에 성능도 더 좋다. as와 cast의 동작 차이- '사용자 정의 형변환을 어떻게 다..

WSL2(Windows Subsystem for Linux2) 환경설정

WSL2(Windows Subsystem for Linux2) 리눅스용 윈도우 하위 시스템(Windows Subsystem for Linux, WSL), 윈도우 10에서 네이티브로 리눅스 실행파일을 실행하기 위한 호환성 계층. 윈도우에서 리눅스를 사용하기 위한 도구. 기존 윈도우에서 VirtualMachine과 같은 도구를 사용하거나 부팅 시 우분투를 따로 설치하여 사용하는 방법이 있는데 이러한 방법보다 효율적이고 빠르다는 장점이 있다. [환경설정] Window 키 + Q버튼 -> Window 기능 켜기/끄기 실행 'Linux용 Windows 하위 시스템' 기능을 체크 후 확인 버튼 클릭. 재부팅 필요. 재부팅 후 Microsoft Store에서 ubuntu 검색 후 설치. Windows Terminal..