티스토리

데브웁스
검색하기

블로그 홈

데브웁스

www.devoops.kr/m

더해리 님의 블로그입니다.

구독자
1
방명록 방문하기

주요 글 목록

  • [Flutter] Flutter에서 네이버 MAP API 연동 방법 네이버지도를 플러터에서 띄울 수 있는 플러그인입니다. Plug-in which shows naver map on flutter project support Android and iOS. Install 해당 플러그인은 Naver Cloud PlatForm - map 에서 제공하는 map서비스를 Android와 iOS 환경에서 보여주는 플러그인입니다. Naver cloud platform 에서 콘솔의 AI·Application Service > AI·NAVER API > Application에서 애플리케이션을 등록합니다. 등록한 애플리케이션을 선택해 Client ID값을 확인하고 변경 화면에서 Maps가 선택되어 있는지 확인한다. pubspec.yaml에 plug in dependencies에 작성 depe.. 공감수 0 댓글수 0 2023. 2. 27.
  • Fiddler와 유사한 프로그램 리스트 Charles: 웹 개발자용 HTTP 디버깅 프로그램으로, Fiddler와 비슷한 기능을 제공합니다. Wireshark: 네트워크 패킷 분석 프로그램으로, Fiddler보다 복잡하지만 다양한 프로토콜을 분석할 수 있습니다. Postman: API 개발 및 테스트용 프로그램으로, Fiddler와 달리 API 대상을 직접 테스트할 수 있습니다. Burp Suite: 웹 애플리케이션 보안 테스트 프로그램으로, Fiddler와 비슷한 기능을 제공하며 보안 관련 기능도 제공합니다. 각 프로그램마다 다른 점이 있으니, 개인적인 요구에 맞는 프로그램을 선택하시면 됩니다. 공감수 0 댓글수 0 2023. 2. 12.
  • [Flutter 3.0] Flutter 3.0 초기 환경 설정 on Windows Flutter SDK 다운로드 https://docs.flutter.dev/get-started/install/windows 최신 릴리즈 버전 다운로드(현재 3.0.1 최신) 명시적이고 간편한 경로에 압축을 해제합니다.(예: c:\src\flutter) Flutter 기본 환경변수 PATH 설정 C:\src\flutter 기준 Windows 명령 프롬프트에서 flutter --version 실행해보자. Flutter 3.0.1 표시되면 기본 PATH가 잘 설정된 것이다. Flutter 개발 환경 준비(for Android) Windows 명령 프롬프트에서 flutter doctor 실행해보자. 모든 개발 환경 준비가 잘 되어 있다면 "No issues found!" 메시지를 확인 할 수 있다. 준비되지 .. 공감수 0 댓글수 0 2022. 5. 29.
  • [야외맛집] 양산하얀집가든 미나리삼겹살/묵은지삼겹살 하얀집가든 미나리삼겹살 : 네이버 육류,고기요리 · 매일 11:00 - 18:00, 야외 바베큐 m.place.naver.com 공감수 0 댓글수 0 2021. 10. 29.
  • C++ 템플릿 Concept Concept의 개념 일반적으로 함수 템플릿(또는 클래스 템플릿)은 모든 타입이 아니라 특정 조건을 만족하는 타입에 대해서 동작하게 됨 타입이 가져야 하는 조건을 코드로 표현 한 것 2000년 중반부터 이야기 되었으나 아직 표준화 되지 않음 C++20 표준에 추가될 예정 Concept 문법이 도입될 경우 템플릿 코드에 많은 변화가 있게됨 #include using namespace std; struct Point { int x, y; }; // 실제 파라미터가 모든 타입이 아닌 연산자 < 가능한 타입에 대해서만 지원하는 템플릿임 template T Min(T x, T y) { return y < x ? y : x; } int main() { Point p1, p2; Min(p1, p2); } #inclu.. 공감수 0 댓글수 0 2021. 1. 12.
  • C++ 템플릿 디자인 Typelist Typelist 값이 아닌 타입의 리스트를 보관하는 데이터 타입 템플릿 인자가 1개라도 Typelist를 활용하면 복수의 타입을 만들 수 있음 #include using namespace std; // 값을 보관하지 않음 // 타입 2개를 보관함 template struct Typelist { typedef T Head; typedef U Tail; }; struct NullType {}; // 매크로 도입 #define TYPELIST_1(T1) Typelist #define TYPELIST_2(T1, T2) Typelist #define TYPELIST_3(T1, T2, T3) Typelist #define TYPELIST_2(T1, T2, T3, T4) Typelist template class x.. 공감수 0 댓글수 0 2021. 1. 10.
  • C++ 템플릿 디자인 Member Detect IDioms Member Detect IDioms 클래스의 멤버 타입 존재 여부 확인 클래스의 멤버 함수 존재 여부 확인 //컴파일 타임의 함수 시그니처에 대한 특성만 활용하는 특성을 이용하는 기법 // 함수 시그니처만 사용함으로 구현부가 없어도 괜찮음 char foo(int a); short foo(double d); int main() { int n = 10; cout 공감수 0 댓글수 0 2021. 1. 10.
  • C++ 템플릿 디자인 SFINAE(Substitution Failure Is Not An Error) 함수 찾는 순서 1순위 정확한 매칭(exactly matching) 2순위 템플릿(template) 3순위 가변 인자(variable argument) #include using namespace std; template // 2순위 템플릿(template) void foo(T t) { cout 공감수 0 댓글수 0 2021. 1. 10.
  • C++ 템플릿 디자인 단위 전략(Policy-Based Design) Policy Based Design 클래스가 사용하는 정책을 템플릿 인자를 통해서 교체 할 수 있게 만드는 디자인 성능 저하 없이 정책을 교체 할 수 있음 대부분의 정책은 담은 "단위 전략 클래스"는 지켜야 하는 규칙이 있음 규칙을 표현하는 코딩 방식은 없음(인터페이스 사용시 가상 함수이므로 약간의 오버헤드 발생), C++20 concept 문법 우리가 만든 동기화 정책클래스는 "lock/unlock" 함수가 필요함 템플릿 기반 라이브러리, 특히 STL에서 널리 사용되는 디자인 기법 #include using namespace std; // 1개의 클래스로 정책 템플릿 인자를 통해서 다르게 구현 할 수 있도록 디자인 template class List { ThreadModel tm; public: voi.. 공감수 0 댓글수 0 2021. 1. 9.
  • C++ 템플릿 디자인 패턴 CRTP 활용 CRTP 활용한 싱글톤(Singleton) 만들기 싱글톤: 하나의 객체만 생성 할 수 있게 만드는 디자인 패턴 private 생성자 복사와 대입 금지 하나의 객체를 만들어서 리턴하는 static 멤버 함수 단일 Singletone 패턴 클래스 #include using namespace std; class Cursor { private: Cursor() {} public: Cursor(const Cursor& c) = delete; void operator=(const Cursor& c) = delete; static Cursor& getInstance() { static Cursor instance; return instance; } }; int main() { Cursor& c1 = Cursor::g.. 공감수 1 댓글수 0 2021. 1. 8.
  • C++ 템플릿 디자인 패턴 CRTP(Curiously Recurring Template Pattern) 패턴 CRTP(Cruiously Recurring Template Pattern) 활용 기반 클래스에서 파생 클래스의 이름을 사용할 수 있게 하는 기법 파생 클래스를 만들때 기반 클래스의 템플릿 인자로 파생 클래스 이름을 전달 기준 코드 메인 함수 호출 시 기반 클래스의 OnClick 함수가 호출됨 파생 클래스의 OnClick 함수를 호출하기 위해서는? #include using namespace std; class Window { public: void msgLoop() { OnClick(); } void OnClick() { cout 공감수 0 댓글수 0 2021. 1. 7.
  • C++ 템플릿 패턴 Thin template, 코드 메모리 최적화 기법 thin template 템플릿의 단점 중 한가지는 코드 메모리의 증가 모바일등 메모리가 부족한 환경에서 사용할 수 있는 기법 기준 코드 4개의 함수 구성 * 3개의 타입 사용 = 총 12개의 함수 생성 #include using namespace std; template class Vector { T* buff; int sz; public: int size() const {} bool empty() const {} void push_front(const T& a) {} T& front() {} }; int main() { Vector v1; Vector v2; Vector v3; } T를 사용하지 않는 모든 멤버를 기반클래스에 정의하고 상속받아서 구현 2개의 함수 구성 * 3개의 타입 사용 + 기반 클.. 공감수 0 댓글수 0 2021. 1. 7.
  • C++ 가변인자 템플릿(Variadic template) tuple 전체 요소 출력 가변인자 템플릿(Variadic template)를 활용하여 tuple 전체 요소를 출력 #include #include using namespace std; //튜플과 index_sequence를 받아서 튜플 전체 요소를 출력 template void print_tuple_imp(const TP& tp, const index_sequence&) { int x[] = { get(tp)... }; for (auto& n : x) cout 공감수 0 댓글수 0 2021. 1. 7.
  • C++ 가변인자 템플릿(Variadic template) tuple을 위한 get 구현 기반 클래스의 멤버에 접근하는 방법(기반 지식) 기반 클래스의 멤버와 파생클래스의 멤버의 이름이 동일할때는 자신(파생 클래스)의 멤버가 우선 기반 클래스의 멤버에 접근하는 방법 d.Base::value static_cast(d).value; 값 캐스팅과 참조 캐스팅 static_cast(d): 임시객체 생성. lvalue가 될 수 없음 static_cast(d): 임시객체를 생성 안함. lvalue가 될 수 있음 #include using namespace std; struct Base { int value = 10; }; struct Derived : public Base { int value = 20; }; int main() { Derived d; cout 공감수 0 댓글수 0 2021. 1. 7.
  • C++ 가변인자 템플릿(Variadic template) tuple 만들기 tuple C++11 표준 서로 다른 타입의 객체를 N개 보관하는 템플릿 #include #include using namespace std; int main() { tuple t0; tuple t1(1); tuple t4(1, 3.4, 2, 'A'); get(t4) = 15; // 참조 리턴으로 값 변경 가능 cout 공감수 1 댓글수 0 2021. 1. 6.
  • C++ 가변인자 템플릿(Variadic template) 함수 인자타입 구하기 함수의 인자 타입을 구하는 traits 만들기 메인 템플릿(Main template)만들고 typedef T type 제공 함수 타입인 T 안에 있는 함수 인자 타입을 얻을 수 있도록 부분 특수화 T -> R(A1, A2), T -> R(A1, Types...) N번째 인자 타입 구하는 방법 0번째 인자의 타입을 구하는 부분 특수화 작성 N번째 인자의 타입을 구하는 부분 특수화 작성 N == 0이 될때까지 Recursive 사용 Recuresive 사용시, 함수의 0번째 인자를 제거하고 N-1 사용 argument_type 공감수 0 댓글수 0 2021. 1. 6.
  • C++ 가변인자 템플릿(Variadic template) 함수 리턴타입 구하기 함수 정보를 구하는 traits 만들기 메인 템플릿(Primary template)을 만들고 typedef T type 제공 함수 타입의 T안에 있는 리턴 타입을 얻을 수 있도록 부분 특수화 구현 부분 특수화를 할땡 가변인자 템플릿을 활용 #include #include #include using namespace std; double hoo(short a, int b) { return 0; } // 메인 템플릿 template struct result_type { typedef T type; }; // 함수 타입에 대한 부분 특수화, 가변인자 활용 template struct result_type { typedef T type; }; template void foo(const T& t) { // T :.. 공감수 0 댓글수 0 2021. 1. 6.
  • C++ 가변인자 템플릿(Variadic template), fold expression(C++17) Parameter Pack 각 요소 꺼내기 Pack Expansion -> array or tuple에 담기 #include #include using namespace std; template void foo(Types ... args) { // 각각의 타입별 값을 tuple 개별 요소로 추가 tuple tp(args...); cout 공감수 0 댓글수 0 2021. 1. 6.
  • C++ 가변인자 템플릿(Variadic template) 가변인자 템플릿(Variadic template) C++11부터 지원되는 문법 가변인자 템플릿(클래스 템플릿, 함수 템플릿)의 기본 모양 가변인자 템플릿의 인자 "Types"는 여러개의 타입을 나타냄 가변인자 함수 템플릿의 인자인 "args"안에는 여러개의 값이 들어있고 "Parameter Pack"이라고 함 #include using namespace std; // 가변인자 클래스 템플릿. template class tuplex { }; // 가변인자 함수 템플릿 template void foo(Types ... args) { } int main() { // 가변인자 클래스 템플릿(타입 생략, 복수의 타입까지...) tuplex t0p; tuplex t1; tuplex t2; // 가변인자 함수 템플릿.. 공감수 0 댓글수 0 2021. 1. 5.
  • C++ 템플릿 type_traits(C++11 표준 remove_pointer, is_pointer) C++11 표준 type traits 변형된 타입을 얻는 traits typename remove_pointer::type; remove_pointer_t n; // C++14 타입의 정보를 조사하는 traits bool b = is_pointer::value; bool b = is_pointer_v; // C++17 함수 오버로딩 사용(true_type, false_type) 활용 간소화된 버전 C++14 기본 제공 remove_pointer_t n; C++17 기본 제공 bool b = is_pointer_v; #include #include using namespace std; //using을 사용해서 간소화 가능 template using remove_pointer_type = typename r.. 공감수 0 댓글수 0 2021. 1. 4.
  • C++ 템플릿 traits(함수 반환 값/파라미터) 함수의 리턴타입, 인자타입 정보를 구하는 traits 만들기 메인 템플릿(Main template)을 만들고 typedef T type 제공(C++11 using 동일) 부분 특수화(Partial specialization)를 통한 원하는 타입을 얻을 수 있도록 T 타입 분할 함수 타입 T(double(short, int))를 리턴타입 double과 인자타입(short, int)로 분리 T(double(short, int)) -> R(A1, A2) 메인 템플릿의 활용도가 없을 경우 내부 type은 제거 해도 됨 #include using namespace std; double hoo(short a, int b) { return 0; } // 반환 타입에 대한 메인 템플릿 template struct re.. 공감수 0 댓글수 0 2021. 1. 4.
  • C++ 템플릿 type modification(remove_pointer) type traits 기능(C++11) type에 대한 query : is_pointer, is_array, extent type에 대한 변형 타입 : remove_pointer, add_pointer #include #include using namespace std; template void foo(T a) { bool b = is_pointer::value; typename remove_pointer::type t; cout int 반환 #include using namespace std; // Main template template struct remove_pointer_custom { typedef T type; }; // Partial specialization template struct .. 공감수 0 댓글수 0 2021. 1. 4.
  • C++ 템플릿 integral_constant integral_constant 컴파일 타임에 결정된 상수 값을 별도 타입화 하여 함수 오버로딩을 할 수 있도록 만드는 int2type 기술 int2type 기술을 C++11에서 표준화한 integral_constant 기본 함수 오버로딩(Function overloading) 이자의 개수가 다르거나 인자 타입이 다르면 아래와 같이 인수에 따라 서로 다른 함수가 호출 되게 할 수 있음 인자가 개수가 같고 인자의 타입도 같을때 다른 함수가 되게 하려면? #include using namespace std; void foo(int n) {} void foo(double d) {} int main() { foo(1); // foo(int) foo(1.2); // foo(double) } int2type 컴파일.. 공감수 0 댓글수 0 2021. 1. 3.
  • c++ 템플릿 type_traits 배열 타입 체크(is_array) is_array 예제 간단히 템플릿 파라미터 T가 배열 타입 여부 확인 도구 메인 템플릿(Main template)에서 false 반환( value = false ) 배열 타입 부분 특수화(Partial specialization)에서 true 반환( value = true ) 타입을 정확히 알아야 함 int x[3]; 에서 x는 변수 이름, 변수 이름을 제외한 나머지 요소(int[3])이 타입임 unknown size array type(T[])에 대해서도 부분 특수화가 필요함 #include #include using namespace std; template struct is_array_custom { static constexpr bool value = false; }; // 크기를 알 수 있는 .. 공감수 0 댓글수 0 2021. 1. 3.
  • c++ 템플릿 type_traits 포인터 타입 체크(is_pointer) type traits 개념 컴파일 타임에 타입에 대한 정보를 얻거나 변형된 타입을 얻을때 사용하는 도구(메타 함수) 헤더로 제공됨(c++11) type query를 위한 type traits 만드는 방법 메인 템플릿(Primary template)에서 false 반환( value = false ) 부분 특수화(Partial specialization)에서 true 반환( value = true ) is_pointer 예제 간단히 템플릿 파라미터 T가 포인터 타입 여부 확인 도구 메인 템플릿(Primary template)에서 false 반환( value = false ) 포인터 타입용 부분 특수화(Partial specialization)에서 true 반환( value = true ) #include #.. 공감수 0 댓글수 0 2021. 1. 3.
  • C++ 템플릿 constexpr 함수(constexpr function) constexpr 함수 함수앞에 constexpr 붙이면 파라미터가 컴파일 타임 상수 일 경우 함수를 컴파일 시간에 연산(성능 이점) 일반 변수 파라미터 입력시 일반 함수처럼 동작 #include #include using namespace std; template struct Check { }; // constexpr 함수(c++11) constexpr int add(int a, int b) { return a + b; } int main() { int n1 = 1, n2 = 2; int n = add(n1, n2); // OK(일반 변수 파라미터 입력 시 일반 함수처럼 동작) int m = add(1, 2); // OK(컴파일 타임 상수 파라미터 입력 시 컴파일 타임에 연산) Check c; // O.. 공감수 0 댓글수 0 2021. 1. 3.
  • C++ 템플릿 메타 프로그래밍(Template meta programming) 템플릿 메타 프로그래밍 컴파일 시간에 연산을 수행하는 개념 템플릿 파라미터 5를 받았을때 5 * 4 * 3 * 2 * 1 값을 반환하는 Factorial 구현 #include #include using namespace std; // 템플릿 메타 프로그래밍(template meta programming) template struct Factorial { enum { value = N * Factorial::value }; }; // 재귀의 종료를 위해 특수화(Specialization) template struct Factorial { enum { value = 1 }; }; int main() { int n = Factorial::value; // 5 * 4 * 3 * 2 * 1 => 120 // 5 .. 공감수 0 댓글수 0 2021. 1. 3.
  • C++ 템플릿 특수화 예제(Tuple) XTuple(Couple 선형화 구현) Couple 재귀 호출 대신 선형 호출 할 수 있는 패턴 지원 Couple -> XTuple 형태로 개선 Null 클래스 활용(Empty class) 멤버 없는 클래스 크기는 항상 1(sizeof(Null)) 멤버는 없지만 타입이므로 함수 오버로딩이나 템플릿 인자로 활용 상속 활용 기술 개수의 제한을 없앨 수 없을까? C+++ Variadic template #include #include using namespace std; template struct Couple { T v1; U v2; enum { N = 2 }; }; // 빈 파라미터로 활용하기 위한 empty class struct Null {}; // 2개이상 5개 미만의 타입전달 template cla.. 공감수 0 댓글수 0 2021. 1. 3.
  • C++ 템플릿 특수화 예제(Couple) Couple 2개의 인자로 받은 데이터를 보관하는 컨테이너 인자로 Couple 타입도 전달 가능 부분 특수화(Partial specialization)를 할때 파라미터 수를 잘 선택해야함 파라미터로 자기 자신을 재귀로 입력 시 N 표현 방법 고려 1번째 인자, 2번째 인자, 모든 인자가 Couple 일 경우 특수화 방법 고려 #include #include using namespace std; // 보관 데이터 수를 출력하는 함수 template void printN(const T& cp) { cout 공감수 0 댓글수 0 2021. 1. 3.
  • C++ 템플릿 특수화 예제(IfThenElse/IF/Select, conditional) IfThenElse 예제 컴파일 시간 bool값에 따라 type을 선택하는 도구 일반적으로 IfThenElse, IF, Select 등 이름으로 구현함 C++ 표준에는 conditional 이름으로 제공 헤더 #include using namespace std; // IfThenElse 메인 템플릿 template struct IfThenElse { typedef T type; }; // 부분 특수화 template struct IfThenElse { typedef F type; }; int main() { // 첫번째 파라미터를 true로 할 경우 T 반환 IfThenElse::type t0; // int // 첫번째 파라미터를 false로 셋팅할 경우 F 반환 IfThenElse::type t1; /.. 공감수 0 댓글수 0 2021. 1. 3.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.