일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c#
- Data Structure
- jupyter
- dart 언어
- gitlab
- github
- Houdini
- jupyter lab
- Python
- 도커
- 다트 언어
- vim
- 플러터
- git
- c언어
- C# delegate
- Flutter
- 유니티
- Unity
- 포인터
- c# 추상 클래스
- c# 윈폼
- docker
- Algorithm
- c# winform
- HTML
- 구조체
- 깃
- C언어 포인터
- C++
- Today
- Total
목록Programming (313)
nomad-programmer
null 병합 연산자 ?? 는 null 조건부 연산자처럼 프로그램에서 종종 필요한 변수/객체의 null 검사를 간결하게 만들어주는 역할을 한다. ?? 연산자는 두 개의 피연자를 받아들이고 왼쪽 피연산자가 null인지를 평가한다. 평가 결과가 null이 아닌 것으로 나타나면 왼쪽 피연산자를 그대로 반환하고, 만약 왼쪽 피연산자가 null인 것으로 평가되면 오른쪽 피연산자를 반환한다. using static System.Console; namespace BrainCSharp { class HelloWorld { static int Main(string[] args) { int? num = null; WriteLine($"{num ?? 0}"); num = 99; WriteLine($"{num ?? 0}");..
널(null) 조건부 연산자 ?.는 C# 6.0에서 도입되었다. ?. 가 하는 일은 객체의 멤버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참(즉, 객체가 null)이면 그 결과로 null을 반환하고, 그렇지 않은 경우에는 . 뒤에 지정된 멤버를 반환한다. // == 연산자를 이용한 코드 Foo foo = null; int? bar; if (foo == null) bar = null; else bar = foo.member; // ?. 연산자를 이용한 코드 Foo foo = null; int? bar; bar = foo?.member; ?[] 연산자 ?[] 연산자도 동일한 기능을 수행하는 연산자이다. ?[] 는 ?. 와 비슷한 역할을 하지만, 객체의 멤버 접근이 아닌 배열과 같은 컬렉션..
날짜와 시간을 표현하기 위해서는 DateTime 클래스가 필요하다. 그리고 System.Globalization.CultureInfo 클래스의 도움을 받으면 C# 코드만으로 날짜 및 시간 서식을 통제할 수 있다. 서식 지정자 대상 서식 설명 y 연도 yy: 두 자릿수 연도 yyyy: 네 자릿수 연도 M 월 M: 한 자릿수 월 MM: 두 자릿수 월 d 일 d: 한 자릿수 일 dd: 두 자릿수 일 h 시 (1~12) h: 한 자릿수 시 hh: 두 자릿수 시 H 시 (1~23) H: 한 자릿수 시 HH: 두 자릿수 시 m 분 m: 한 자릿수 분 mm: 두 자릿수 분 s 초 s: 한 자릿수 초 ss: 두 자릿수 초 tt 오전/오후 tt: 오전/오후 ddd 요일 ddd: 약식 요일 dddd: 전체 요일 Cultu..
공용 형식 시스템의 형식 클래스 이름 C# 형식 C++ 형식 VB 형식 System.Byte byte unsigned char Byte System.SByte sbyte char SByte System.Int16 short short Short System.Int32 int int 또는 long Integer System.Int64 long __int64 Long System.UInt16 ushort unsigned short UShort System.UInt32 uint unsigned int 또는 unsigned long UInteger System.Uint64 ulong unsigned __int64 ULong System.Single float float Single System.Double do..
C#은 변수나 상수에 대해 꼼꼼히 형식 검사를 진행하는 강력한 형식의 언어이다. 강력한 형식 검사는 프로그래머의 실수르 줄여 주는 장점이 있다. 의도치 않은 형식의 데이터를 읽거나 할당하는 일을 막아준다. 예를 들어 원래는 정수 형식의 데이터를 담기 위해 n이라는 변수를 선언했는데, 다른 프로그래머가 이 코드를 물려받아서는 중간에 문자열 형식을 담아 쓰려고 할 수 있다. 약한 형식 검사는 이런 문제를 막을 수 없지만, 강력한 형식 검사는 이 문제를 컴파일 타임에 찾아내 드러내 준다. 하지만 약한 형식 검사가 단점만 있는 것은 아니다. 코드를 작성하는 단계에서는 약한 형식 검사가 더 편리하다. 귀찮게 int, long, uint, ulong 등과 같은 형식을 외울 필요 없이 일단 변수를 선언해서 데이터를 ..
오버플로우 (Overflow) 변수는 데이터를 담는 그릇과 같다. 그릇에 용량을 넘어사는 양의 물을 담으면 넘치는 것처럼, 변수에도 데이터 형식의 크기를 넘어서는 값을 담으면 넘쳐 흐른다. 이런 현상을 "오버플로우(Overflow)"라고 한다. using System; namespace FlowExam { class FlowExample { static int Main(string[] args) { byte variable = byte.MaxValue; Console.WriteLine($"{variable}"); // 오버플로우 발생 variable++; Console.WriteLine($"{variable}"); return 0; } } } /* 결과 255 0 */ byte의 최대값은 255이다. 2..
위치 관련 position 속성 * 자손의 position 속성에 absolute 키워드를 적용하면 부모는 height 속성을 사용해야 한다. * 자손의 position 속성에 absolute 키워드를 적용하면 부모의 position 속성에는 relative 키워드를 적용해야 한다. float 속성 * 자손에 float 속성을 적용하면 부모의 overflow 속성에는 hidden 키워드를 적용해야 한다. 위의 예를 보듯이 자식이 float속성을 지녔을 때 부모는 overflow 속성의 hidden을 가지고 있어야 제대로 나오는 것을 확인할 수 있다. 1 2 clear 속성에 both 키워드를 적용해도 마찬가지 기능을 수행한다. 하지만 현대에는 overflow 속성을 더 많이 사용한다. 레이아웃을 구성할 ..
Lorem ipsum lorem ipsum dolor sit amet, consectetur adipiscing elit. 체크박스를 체크해보세요 lorem ipsum lorem ipsum dolor sit amet, consectetur adipiscing elit.
더미 이미지가 필요하다면? 웹 페이지를 디자인하다보면 이미지를 아직 완성하지 못해 넣을 수 없는 경우가 있다. 이미지 크기는 아는데 아직 이미지가 없을 때 사용할 수 있는 사이트는 소개한다. https://placeholder.com/ Placeholder.com: Placeholder.com – The Free Image Placeholder Service Favoured By Designers What Is Placeholder.com? Placeholder.com generates custom placeholder images on the fly, like these examples:- How To Use Our Placeholders Just specify the image size after o..
트랜지션 속성은 한 스타일에서 다른 스타일로 바뀔 때 진행 시간을 지정해서 부드럽게 변화하도록 한 것이다. 따라서 트랜지션을 잘 활용해도 부드러운 애니메이션 효과를 만들 수 있다. 하지만 animation 속성을 이용하면 트랜지션보다 애니메이션을 더 쉽게 만들 수 있다. animation 속성과 transition 속성 animation 속성과 transition 속성은 비슷한 점이 많다. 시작 스타일과 끝나는 스타일을 지정하면 CSS에서 중간 스타일을 자동으로 추가하여 전체적으로 부드럽게 변화하는 애니메이션 효과를 만들어낸다. animation 속성은 애니메이션에 소요되는 시간이나 지연 시간 등을 지정하는 것은 transition 속성과 같지만, 애니메이션의 시작에서부터 끝날 때까지 어느 지점이든 @k..
최신 브라우저라 하더라도 HTML5 스펙의 기능들이 어떤 브라우저에서는 되고, 어떤 브라우저에서는 안되는 것을 브라우저 파편화(browser fragmentation)이라고 한다. 이런 파편화를 줄이고 비슷하게라도 같은 결과를 만들기 위해 여러 가지 방법들을 동원하는데 이런 방법들을 통틀어 "심(shim)"이라고 부르며, "폴백(fallback)"이라 부르기도 한다. html5shim.js도 shim의 일종이다. https://github.com/aFarkas/html5shiv aFarkas/html5shiv This script is the defacto way to enable use of HTML5 sectioning elements in legacy Internet Explorer. - aFark..
conda로 설치한 모듈을 pyistaller를 이용해 exe파일로 만들경우 엄청난 용량을 가진 파일이 생성된다. 이러한 문제를 해결하려면 conda install 모듈이 아닌 pip install 모듈로 설치한 파일이어야 한다. 281MB 파일이 pip install로 설치한 모듈로 exe파일을 만드니 84MB로 줄었다.
pyinstaller를 이용해 exe파일 생성 후 실행시키니 ModuleNotFoundError: No module named 'pkg_resources.py2_warn' 라는 오류가 발생했다. 구글링 결과 hiddenimports 메뉴 부분에 추가하면 된다고 한다. 그래서 아래처럼 추가하여 해결하였다. 만약 OpenCV를 사용하였는데 "cv2" 임포트 에러가 발생하면, 아래와 같이 binaries에 dll을 추가해준다. a = Analysis(['main.py'], pathex=['D:\\workspace\\python\\test', 'D:\\workspace\\python\\test\\widgets\\preference', 'D:\\workspace\\python\\test\\widgets\\scre..
Git Push rejected: Push to origin/master was rejected jetbrains 에디터에서 git을 사용하다보면 git push rejected 라는 에러로 push가 되지 않을 때가 있다. 이것은 원격 저장소에 커밋 변화가 생겼는데 그 저장소에 push를 하려고 하다보니 이렇게 된 것이다. 그래서 pull로 컷밋 을 가져오려고하면 이 또한 에러나 발생하여 명령 실행이 안된다. 해결 방법: 1. 현 프로젝트의 최상위 디렉토리로 간다. 2. 마우스 우측 클릭을 하여 'Git Bash here' 메뉴를 클릭한다. 3. 아래의 명령을 실행한다. git pull origin master --allow-unrelated-histories 4. edit 메시지 작성 5. 다시 Je..
[] 연산자를 사용한 int형 배열 요소 접근 #include int main() { int i_arr[6] = { 10, 20, 30, 40, 50, 60 }; printf("%d %d %d %d %d %d\n", i_arr[0], i_arr[1], i_arr[2], i_arr[3], i_arr[4], i_arr[5]); printf("%d %d %d %d %d %d\n", (&i_arr[2])[-2], (&i_arr[2])[-1], (&i_arr[2])[0], (&i_arr[2])[1], (&i_arr[2])[2], (&i_arr[2])[3]); return 0; } // 결과 /* 10 20 30 40 50 60 10 20 30 40 50 60 */ &i_arr[2] 를 중심으로 +, - 연산을 하..
c_arr 변수의 메모리 주소가 12ff7c 라고 가정한다. #include void main() { char c_arr[2][2] = {'A', 'B', 'C', 'D'}; printf("%x %x %x %x\n", &c_arr[0][0], c_arr, c_arr[0], c_arr[1]); printf("%x %x %x %x\n", &c_arr[0][0]+1, c_arr+1, c_arr[0]+1, c_arr[1]+1); } // 결과 /* 12ff7c 12ff7c 12ff7c 12ff7e 12ff7d 12ff7e 12ff7d 12ff7f */ &c_arr[0][0]는 char형 1바이트의 주소를 의미하며 여기에 +1을 한 것은 1바이트의 주소를 덧셈하라는 의미이다. c_arr은 char형 배열 2*2의..
c_arr 변수가 0x12ff78의 주소를 사용한다고 가정한다. 형 변환 연산자를 사용하여 상수를 char형 주소로 변환한 후 * 연산자를 사용하여 char형 1바이트에 접근한다. #include int main() { char c_arr[5] = { 'A', 'B', 'C', 'D', 'E' }; printf("%c %c %c %c %c\n", *(char*)0x12ff78, *(char*)0x12ff79, *(char*)0x12ff7a, *(char*)0x12ff7b, *(char*)0x12ff7c); return 0; } // 결과 /* A B C D E */ 정수 0x12ff78 ~ 0x12ff7c에 (char*) 형 변환 연산을 사용하여 char형 주소로 변환한 후 *를 붙여 메모리 자체(값)를..
#include void main() } int n = 100; // 12ff7c printf("%x\n", &n); printf("%d %d\n", n, *&n); } // 결과 /* 12ff7c 100 100 */ int형 변수 n의 주소가 12ff7c라면 시작 주소는 &n이고, 이 주소에 *를 붙여 *&n 은 변수 n의 4바이트 크기의 메모리를 의미하게 된다. 값은 100이다. *&n 은 n과 같은 메모리의 이름이라고 해도 무방하다. 주소 12ff7c ~ 12ff7f의 4바이트 메모리 이름은 n과 *&n 이다. & 연산자와 * 연산자는 상반된 개념을 가지고 있다. & 연산자는 변수(메모리 이름) 앞에서만 사용하고 * 연산자는 주소 앞에서만 사용한다. 예를 들어 *N과 가이 사용하면 N은 주소이고 &..
형 변환은 암묵적인 형 변환과 명시적인 형 변환이 있다. 암묵적인 형 변환은 컴파일러에 의해 자동으로 변환되고 명시적인 형 변환은 () 연산자를 사용하여 변환한다. char형 변수(1바이트)를 int형 변수(4바이트)에 대입하는 경우 암묵적인 형 변환(자동 형 변환)이 수행된다. 작은 자료형을 큰 자료형으로 변환하는 경우 컴파일러는 자동으로 형 변환을 수행한다. 에를 들어 (char)는 char형으로 자료형을 변환하라는 의미이고 (char*)는 char형 주소로 자료형을 변환하라는 의미이다. #include int main() { char c = 'A'; printf("%x %x %x\n", &c, (char*)&c, (int*)&c); printf("%x %x %x\n", &c+1, (char*)&c+..
C로 프로그램을 만든다면 아마 성능과 규모 확장에 대해 신경이 많이 쓰일 것이다. 코드를 컴파일하기 위해 gcc를 사용한다면 다음과 같은 다른 GNU 도구들을 살펴볼 필요가 있다. gdb gdb(GNU Project Debugger)를 사용하면 컴파일된 프로그램을 실행하는 동안 코드를 조사할 수 있다. 성가신 버그를 추적하고 싶을 때 이 도구는 매우 유용하다. gdb는 명령행에서 직접 사용할 수 있고 Xcode나 여타 다른 통합 개발 환경에서 사용할 수 있다. https://www.gnu.org/software/gdb/ GDB: The GNU Project Debugger GDB: The GNU Project Debugger [bugs] [GDB Maintainers] [contributing] [cur..