표현식 템플릿 간단한 연산자 구현 template inline vector operator+(const vector& x, const vector& y) { x.check_size(size(y)); vector sum(size(x)); for(int i = 0; i < size(x); i++) sum[i] = x[i] + y[i]; return sum; } vector x,y,z,w; w = x + y + z; 다음과 같은 연산 횟수가 수행된다 덧셈 2n번 할당 3n번 읽기 5n번 쓰기 3n번 메모리 할당 2번 메모리 할당 해제 2번 단일 반복문이나 인라인 함수로 작성한다면 template void inline add3(const vector& x, const vector& y, const vector&..
8장 비동기 메시지 전송하기 : JMS 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 비동기 메시지 전송 JMS, RabbitMQ, 카프카 Kafka를 사용해서 메시지 전송하기 브로커에서 메시지 가져오기 메시지 리스닝하기 비동기(Asynchronous) 메시징은 애플리케이션 간에 응답을 기다리지 않고 간접적으로 메시지를 전송하는 반복이다. 따라서 통신하는 애플리케이션 간의 결합도를 낮추고 확장성을 높여준다. 스프링은 JMS(Java Message Service), RabbitMQ, AMQP(Advanced Message Queueing Protocol), 아파치 카프카(Apahche Kafka) 가 등의 비동기 메시징을 지원한..
5.2 타입 정보 제공하기 및 사용하기 타입 특성 template T inline min_magnitude(const T& x, const T& y) { using std::abs; T ax = abs(x), ay = abs(y); return ax < ay ? x : y; } double d1 = 3., d2 = 4.; cout
5 메타 프로그래밍 5.1 컴파일러가 계산하도록 만들기 컴파일 타임 계산은 두가지 방법이 있다. 템플릿 메타 함수(Meta-Function)를 사용 constexpr을 사용 (C++11) 컴파일 타임 함수 constexpr long fibonacci(long n) { return n 0) r *= x; return r; } 소수판정 // 1은 소수가 아니다 // 2를 제외한 짝수는 소수가 아니다. // 1보다 큰 홀수와 자기 자신보다 작은수로 나눌수 없는가? // 자신의 제곱근 값보다 낮은수까지만 검사해도 된다 const bool is_prime(int i) { if( i == 1) return false; if( i % 2 == 0 ) return i == 2; int max_check = static..
4.6 동시성 c++11에서 동시성 기능이 처음으로 도입되었다. thread: 새로운 실행 경로를 위한 클래스 async: 함수를 비동기로 호출 atomic: 인터리브(Interleave) 되지 않은 값에 접근하기 위한 클래스 템플릿 mutex: 상ㅎ호 배타적인 실행을 조정하는 클래스 future: thread로부터 결과를 받기위한 클래스 템플릿 promise: future를 위해 값을 저장하는 템플릿 여기서는 비동기로 동작하면 인터럽트 가능한 프로그램을 구현해보고자 한다 비동기식(Asynchrony): 프로그램을 실행하는 동안 다음모델에서 작업 가능 인터럽트 가능성(Interruptibility): 새로운 모델이 더 좋으면 이전 모델을 중단 class interruptible_iteration { pu..
4.5 지금 시각은? 라이브러리는 타입 세이프한 시계 및 타이머 기능을 제공 클럭을 기준으로 특정 시점을 나타내는 time_point 명백한 의미를 지닌 duration time_point now = system_clock::now(), then = now + hours(2); time_t then_time = system_clock::to_time_t(then); cout eps); return sq; } time_point start = steady_clock::now(); for( int i = 0; i < rep; i++) { r3 = my_root(3.0); } auto end = steady_clock::now(); cout
4.4 유틸리티 튜플 새로운 클래스를 구현하지 않고 여러결과를 반환하기 위해 튜플(Tuple)을 사용 대부분의 컨테이너와는 달리, 개체의 개수를 컴파일 타임에 알고 있어야 함 void lu(const matrix& A, matrix& LU, vector& p) {...} tuple lu(const matrix& A) { matrix LU(A) vector p(n) ... //둘다 반환값은 동일 return tuple(LU, p); return make_tuple(LU, p); //헬퍼 함수 } int main() { tuple t = lu(A); //튜플의 값을 가져올때는 get함수를 통해 추출한다 matrix LU = get(t); vector p = get(t); //모두 추론 가능하기에 위와 동일 ..
4.3 메타 프로그래밍 한계 헤더를 포함해야함 내장 타입별 정보를 전달하는 클래스 템플릿 numeric_limits template inline void test(const T& x) { cout
7장 REST 서비스 사용하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 RestTemplate 을 사용해서 REST API 사용하기 스프링에서 사용하는 REST API RestTemplate: 스프링 프레임워크에서 제공하는 동기화된 REST client Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST client WebClient: 스프링 5에서 소개된 반응형 비동기 REST client RestTemplate 는 다음 버전에서 deprecated 될 예정이다. WebClient 를 사용하자 7.1 RestTemplate으로 REST endpoint 사용하기 RestTamplat..
라이브러리 4.1 표준 템플릿 라이브러리 표준 템플릿 라이브러리(Standard Template Library, STL)는 기본 라이브러리 Alex Stepanov,David Musser가 만든 STL대부분은 C++표준 라이브러리의 일부가 됨 Matt Austern 은 STL의 핵심 개발자 Josuttis는 라이브러리 튜토리얼을 작성 도입 예제 컨테이너는 개체를 포함하는 클래스 대표적을 vector와 list 클래스가 있다. std::vector vec; std::list lst; double vec_sum = std::accumulate(begin(vec), end(vec), 0.0); double lst_sum = std::accumulate(begin(lst), end(lst), 0.0); 반복자 ..
3.10 가변 템플릿(Variadic Template) 가변 템플릿은 ...으로 표시된 줄임표 연산자를 사용 왼쪽에 ... 연산자가 있으면 패킹 오른쪽에 ... 연산자가 있으면 언패킹 typename ...P : 복수의 타입 인수를 타입 팩 P에 패킹 : 클래스나 함수템플릿을 인스턴스화 할때 P를 언패킹 P ...p : 변수 팩 p에 여러 함수 인수를 패킹 sum(p...) : 변수 팩 p를 언패킹하고 여러 인수로 sum함수 호출 리턴타입은 첫번째 인수의 타입으로 정해짐 template inline T sum(T t) { return t; } template inline T sum(T t, P ...p) { return t + sum(...p); } auto s = sum(-7, 3.7f, 9u, -2...
6장 REST 서비스 생성하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th Front 코드와 Backend 코드 분리 Front-end tacocloud-ui directory 따로 생성 https://github.com/cusbert/spring-in-action-5th/tree/main/tacocloud-ui Back-end HATEOAS 실습 생략 https://github.com/cusbert/spring-in-action-5th/tree/main/ch6/taco-cloud HATEOAS 포함한 교재에서 제공한 샘플 코드는 실행되도록 수정하여 따로 directory 생성 https://github.com/cusbert/spring-in-acti..