C#은 Custom Attribute를 통해 meta data 형식으로 데이터 관리가 가능하다. 디바이스를 관리하는 IDevice 클래스와 이를 상속 받은 DeviceIPhone. 그리고 이 DeviceIPhone에서 관리하는 각 Device에 대하여 Custom Attribute를 통해 다루어 보자. [SupportVendor("Apple")] [SupportModel("IPhone8", true)] [SupportModel("IPhoneX", false)] class DeviceIPhone : IDevice { ... } 우선 위처럼 사용한다. 그러기 위해선 SupportVendor과 SupportModel에 대한 Custom Attribute가 정의돼 있어야 한다. [AttributeUsage(At..
C/C++만 하다가 C#을 공부하게 되면서 느끼는 점들이 참 많다.일단.. 확실히 byte stream 같은걸 다루는 영역에서는 C/C++이 압도적으로 좋다.또한 대용량 처리라던지 최적화 등이 필요한 부분도 C/C++이 좋다.하지만 MVVM패턴(WPF 사용시) 이라던지 효율적 구조 설계(인터페이스, 다중상속 금지) 를 활용하고 싶을땐 C#이 좋다.C#은 마치 Java, Python, C++의 장점만 섞어놓은 언어인 듯 하다.뭐 C#에 대한 얘기들은 여기서 각설하고... 이번엔 다차원 배열과 가변 배열을 살펴보겠다. 정말 정말 헷깔리는 개념이었다. 일단 C#에는 다차원배열과 가변배열이 있다. 1. 다차원 배열 (Multi Array)다차원배열은 영어로는 Multi Array라고 불리고 쉽게 아래와 같이 사..
리스트 a = ['a','b','c'] a.insert(2,d) : 2번째 인덱스에 d를 추가한다. a = [a,b,d,c] a.pop() : 제일 끝의 원소인 c을 반환 후 리스트에서 삭제 한다. a.pop(index) : index 원소를 반환하고 삭제한다. a.remove('b') : 'b'를 찾아서 삭제한다. del a[1] : 1번째 원소를 삭제하다. a.index('b') : 'b' 원소의 인덱스를 반환한다. 여러개 있을 경우 앞에 있는 인덱스를 반환. a.append('f') : 제일 끝에 요소 추가 리스트 값 수정 a[1:2] = [1,2,3] 하면 a = ['a',1,2,3,'b','c'] 이렇게 되고 (연속된 범위 수정) a[1] = [1,2,3] 하면 a = ['a',[1,2,3],'..
이전 글을 잘 따라했으면 이제 다음 튜토리얼을 따라가보자 다음 튜토리얼은 이거다. https://cloud.google.com/appengine/docs/standard/python/quickstart 우선 git으로 git clone https://github.com/GoogleCloudPlatform/python-docs-samples 해서 가져오고cd python-docs-samples/appengine/standard/hello_world 여기 들어가보면 반가운 놈이 있다. 얘를 실행해야하는데, google cloud sdk에 포함돼있는 dev_appserver_py를 이용한다. 이전 글에서 설명했듯이 google cloud sdk를 환경 변수에 잘 추가해놨으면dev_appserver.py app..
얼마만의 블로깅인가 코인 시세 얻어오는 프로그램을 구글 앱 엔진 (Google App Engine / GAE)로 만들려고 한다. 삽질 과정을 이 블로그 글에 메모 할겸 적어보고자 한다. 일단.. 파이썬환경 설정부터 해야한다. [파이썬 PyDev 설치] 그냥 기존 깔려있던 eclipse luna 버전에 market place 가서 pydev 설치했더니 이클립스 업그레이드 하랜다 -_- 그래서 eclipse oxygen을 설치했다. 아 참고로 google cloud sdk installation guide를 읽어보니 파이썬은 2.7 설치하라고 한다. 설치 후 파이썬 설치 경로를 환경 변수로 PYTHON_HOME 으로 잡았다. 저 이름으로 잡아야 pydev 프로젝트 설정시 auto configuration이 ..
배열과 포인터가 동치라는 것은 이미 알고 있다. 예를 들어서 a[3]은 *(a+3) 이 되는 것이다. 하지만 다른 점은 배열은 포인터 상수로 선언 된다는 점이다. 즉 * const 이다. 따라서 int a[3]; int b[3]; 이 있을 때, a는 a[3]배열의 시작 주소를 나타내고 b 역시 b[3]배열의 시작 주소를 나타내지만 a = b; 는 할 수 없다. 왜냐면 const이기 때문에!! 해주고 싶다면 int a[3], int *b; 를 하고 b = a; 한다면 이것은 가능하겠다!! 자 이제... 2차원 배열의 포인터는 어떻게 선언할까? 그냥 대충 생각하면 꼭 int a[3][4]; int **p = a; 가 될 것 같이 생겼지만.. 되지 않는다. 왜일까? int a[3][4];로 선언한 이차원 배열..
이중 포인터를 사용하는건 주로 포인터의 동적 배열을 나타내기 위해서 이다. 우선 아래와 같은 클래스가 하나 있다고 가정 해보자. class CTest { public: CTest() {} int a; }; 이녀석에 대한 포인터를 선언하고 객체 하나를 생성하려면 어떻게 해야할까? 다음과 같이 써주면 된다. CTest *pTest = new CTest; 이렇게 하면 pTest는 CTest의 객체를 참조한다. 근데 이제 CTest객체가 여러개 필요한 상황이 나오면 어떻게 해야할까 처음에 아무 생각없이 아래와 같이 했었다. CTest *pTest1 = new CTest; CTest *pTest2 = new CTest; ... 필요한게 정해져있다면 뭐 저래도 괜찮겠지만.. 그래도 매직넘버를 늘리는건 좋지 않다....
- Total
- Today
- Yesterday
- Python
- android
- C++
- db
- API
- Cloud
- it
- source
- Troubleshooting
- Visual C++
- jni강좌
- MFC
- Quiz
- 리눅스
- 안드로이드
- 음악
- jni
- C
- algorithm
- java
- kering
- gcc
- AWS
- winapi
- linux
- 드라이버
- 프로그래밍
- database
- driver
- NDK
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |