분류 전체보기
[C/C++] print를 하거나 문자열을 리턴하는 함수. 어떻게 구성하는게 좋은가? : string을 리턴하자.
[C/C++] print를 하거나 문자열을 리턴하는 함수. 어떻게 구성하는게 좋은가? : string을 리턴하자.
2019.01.25보통 "input은 인자, output은 리턴"으로 작성하는 편이 알아보기 쉽기 때문에 함수 인자로 포인터를 넘겨 이 포인터에 쓰는 방식으로 간접적으로 값을 되돌려 주는 것 보다, 명확하게 어떤 값을 리턴하도록 작성하는 편이다. 그러나 C같이 garbage collection이 안되는 언어에서는 어떤 값을 리턴하도록 작성하면 여러가지 이슈를 겪는 경우가 있다. *** 또한 GC가 안되는 언어에서는 in/output을 명확히 작성한다 해도 반드시 순수 함수라고는 볼 수 없다. 함수 내부에서 ``c malloc()`` 등을 호출하면 side-effect이 생기기 때문. 예를 들면 다음과 같은 상황이다. malloc() : 문제점 - 바깥에서 free()```cchar* parse_something(const..
Effective Modern C++
Effective Modern C++
2019.01.221장 형식 연역항목 1: 템플릿 형식 연역 규칙을 숙지하라항목 2: auto의 형식 연역 규칙을 숙지하라항목 3: decltype의 작동 방식을 숙지하라항목 4: 연역된 형식을 파악하는 방법을 알아두라 2장 auto항목 5: 명시적 형식 선언보다는 auto를 선호하라항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라 3장 현대적 C++에 적응하기항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라항목 8: 0과 NULL보다 nullptr를 선호하라항목 9: typedef보다 별칭 선언(using)을 선호하라항목 10: 범위 없는 enum보다 범위 있는 enum을 선호하라항목 11: 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라항목 12: 재정의 함수들..
More Effective C++
More Effective C++
2019.01.22Chpater 1 기본 개념들항목 1 :포인터(pointer)와 참조자(reference)를 구분하자항목 2 : 가능한 C++ 스타일의 캐스트를 즐겨 쓰자 항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자 Chpater 2 연산자(Operators)항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자항목 6 : 증가 및 감소 연산자의 전위(prefix)/후위(postfix) 형태를 반드시 구분하자항목 7 : &&, ||, 혹은 . 연산자는 오버로딩 대상이 절대로 아니다 항목 8 : new와 delete의 의미를 정확히 구분하고 이해하자 Chpater 3 예외(Exceptions)항목 9 : 리소스 누수를 피하는 방법의 정공(正攻..
Effective C++
Effective C++
2019.01.22Chapter 1 C++에 왔으면 C++의 법을 따릅시다항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자항목 3: 낌새만 보이면 const를 들이대 보자!항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 Chapter 2 생성자, 소멸자 및 대입 연산자항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하..
[C++] operator overloading
[C++] operator overloading
2019.01.22toString 같은, 문자열 반환 오퍼레이터두 가지가 있고, 두개 모두 오버로딩하는게 좋다.1. string cast operator캐스트 연산자를 이용한 한 방법이다.다음과 같은 상황에서 자동으로 string으로 캐스팅해서 반환해준다.```cppstd::string mac_str = src_mac_addr.toString()```C스타일의 출력(printf)을 사용하는 경우에도 이걸 이용해서 string으로 반환 받은 다음 .c_str()을 써서 변환해서 사용하는 식으로도 쓰인다. ```cppclass Foo {public: operator std::string() const { return "member to string!"; }}; Foo foo;std::cout
[C++] 구조체와 클래스의 차이 ( struct / class )
[C++] 구조체와 클래스의 차이 ( struct / class )
2019.01.22구조체와 클래스의 차이 : 기본 접근 지정자 말고는 없음.class는 기본적으로 `` private``struct는 기본적으로 `` public`` 생성한 객체의 위치는, 클래스냐 구조체냐가 결정하는게 아니라, new로 만들었느냐 그냥 선언했느냐가 결정.```cpp#include struct ST { int a;}; class CL {public: int a;}; int main(void) { struct ST s; s.a = 1; CL c; c.a = 1; printf("struct : %p\n", &s.a); printf("class : %p\n", &c.a); return 0;}``````struct : 0x7ffee9e09a50class : 0x7ffee9e09a54```보다시피 둘 다 지역변수로..
8장. 직접화일 : 해시테이블, 확장성 해싱 VS 선형 해싱
8장. 직접화일 : 해시테이블, 확장성 해싱 VS 선형 해싱
2019.01.18왜 선형 해싱과 확장성 해싱이 modular 보다 나은가? modular는 overflow로 인한 확장이 발생했을 때, 전체 데이터를 다 재배치해주어야 한다. 반면 선형 해싱과 확장성 해싱은 overflow가 발생하는 버킷만 split하므로 데이터 재배치를 최대한 줄일 수 있다. 즉 선형 해싱과 확장성 해싱을 사용해도 데이터의 이동을 완전히 피할 수는 없지만 modular 보다는 낫다. 선형 해싱 (Linear hashing) 선형 해싱은 next에 대한 정보가 필요 (next 이전이면 3bit 접근, 이후이면 2bit 접근) 별도로 유지하거나, 유지 안해도 bucket 개수로 evaluation 가능할 듯 확장성 해싱 (Extendiable hashing) 확장성 해싱은 global 디렉터리 구조(bu..
Google Protocol Buffer
Google Protocol Buffer
2019.01.13https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1 여기서 protobuf-all-3.6.1.zip 다운로드하고protoc-3.6.1-win32.zip 다운로드 한 다음에튜토리얼 참고해서 example에 있는 addressbook.proto를 protoc로 컴파일하면 addressbook_pb2.py가 만들어진다. 단 이 때, 만들어진 addressbook_pb2.py를 사용하려면 protobuf 라이브러리가 필요함. serialization같은걸 처리해주는 함수가 여기에 있다.```pythonpip install protobuf``` C++ 같은 언어도 마찬가지로 protoc로 컴파일하는데 인자를 다르게 주면 .cpp가 만들어진다. * pi..
6장. 인덱스 구조 / 7장. 인덱스된 순차 화일 : B트리
6장. 인덱스 구조 / 7장. 인덱스된 순차 화일 : B트리
2019.01.026장. 물리적 데이터베이스 설계 : 인덱스 관련 B 트리 이진트리 (binary search tree) (2-원 탐색 트리) 의 단점? 한쪽으로 편향되는 경우 탐색이 오래걸린다. 분기율(branching factor)이 2로 너무 낮아 트리가 너무 높아지고 탐색 경로가 길어질 수 있다. B 트리? B 트리의 B는 Balance로, 균형 트리다. m-원 탐색 트리로 분기율 선택 가능. 특징 leaf node 뿐만 아니라 중간 node에도 모두 데이터 레코드의 주소를 저장. 따라서 순차 탐색 하는 경우 중위 순회 해야 함. 순차 탐색 성능 나쁨. 반면 최상위 node가 가리키는 데이터 레코드는 빠르게 접근 가능. B+ 트리 즉 B트리와 B+트리의 가장 큰 차이는 B+트리는 leaf node만 데이터 레코드 ..
Chrome Custom Tabs
Chrome Custom Tabs
2018.12.30launching the browser is a heavy context switch that isn't customizable, while WebViews don't share state with the browser and add maintenance overhead.이런 단점들을 해결하기 위해 나온게 Chrome Custom Tab이다. 웹뷰와 CCT 중 뭘 써야할지 감이 잘 안올 때는,https://stackoverflow.com/questions/42689996/webview-vs-chrome-custom-tab 간단하게 쓸 때.launchUrl만 호출해도 된다.```ktval builder = CustomTabsIntent.Builder()val customTabsIntent = builder..
[Android] HTTP 요청 (Retrofit / OkHttp)
[Android] HTTP 요청 (Retrofit / OkHttp)
2018.12.26이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Android Widget 제작 참고 자료 및 주의 사항
Android Widget 제작 참고 자료 및 주의 사항
2018.12.23기본적인 위젯 제작과 ListViewhttp://blog.naver.com/PostView.nhn?blogId=horajjan&logNo=220578698191전체적인 설명RemoteViewsListView, StackView : RemoteViewsService/RemoteViewsFactory https://docs.huihoo.com/android/3.0/resources/samples/StackWidget/src/com/example/android/stackwidget/StackWidgetService.html액티비티의 연산 결과를 위젯에서 가져오기 위해 SharedPreferences https://developer.android.com/guide/topics/appwidgets/#persist..