3.9 람다(Lamda) (c++11) //함수를 인수로 즉시 전달할 수 있다 fin_diff([](double x) {return sin(x) + cos(x);}, 1., 0.001) //람다 표현식을 재사용하기 위해 변수에 저장할 수도 있다. auto sc_l = [](double x) { return sin(x) + cos(x); } //리턴타입을 명시적으로 선언하고자 한다면 [](double x) -> double { return sin(x) + cos(x); } 캡처 람다 표현식은 자체 매개변수 또는 이전에 캡처된 매개변수만 사용 가능 //람다를 매개변수화 할때 단순한 연산을 삽입 가능하나 //매개변수가 많을때는 생산적이지 못함 a = fin_diff([]double x) {return sin(..
3.8 펑터 펑터(Functor), 함수 개체(Functional Object) 함수처럼 호출할수 있는 연산자를 제공하는 클래스 //함수포인터를 사용한 유한 차분 double fin_diff(double f(double), double x, double h) { return (f(x + h) - f(x)) / h; } double sin_plus_cos(double x) { return sin(x) + cos(x); } int main() { cout
3.7 타입이 아닌 템플릿 매개변수 값도 템플릿 인자가 될 수 있다. 정수, bool, 토인터 타입만 가능 template class fsize_vector { using self = fsize_vector; public: using value_type= T; const static int my_size = Size; fsize_vector(int s= Size) { assert(s == Size); } self& operator=(const self& that) { std::copy(that.data, that.data + Size, data); return *this; } self operator+(const self& that) const { self sum; for (int i= 0; i < my..
템플릿 특수화 템플릿은 많은 인수타입에 대해 동일한 구현을 사용할수 있다. 그러나 일부 타입에 대해서는 다른동작을 구현해야 할때도 있다. 이를 위해 템플릿 특수화(Template Speicalization)을 사용하자. 하나의 타입에 대한 특수화 벡터 클래스에서 bool타입에 대해 특수화 bool값을 1바이트로 패킹하여 메모리 절약을 해보자. template class vector { public: explicit vector(int size) : my_size(size), data(new unsigned char[(my_size+7) / 8]) {} vector() : my_size(0) {} //상수 접근 연산자 bool operator[](int i) const { return (data[i/8] ..
5장 구성 속성 사용하기 💻 실습 : https://github.com/cusbert/spring-in-action-5th 🎯 이 장에서 배우는 내용 자동-구성되는 빈 조정하기 구성 속성을 애플리케이션 컴포넌트에 적용하기 스프링 프로파일 사용하기 5.1 자동-구성 세부 조정하기 스프링 부트는 구성 속성(Configuration Property)을 사용하는 방법을 제공한다. 스프링 애플리케이션 컨텍스트에서 구성 속성은 빈의 속성이다. 그리고 JVM 시스템 속성, 명령행 인자, 환경 변수 등 여러 가지 원천 속성 중에서 설정할 수 있다. 스프링에는 다음 두 가지 형태의 구성이 있다. 빈 연결 (Bean wiring) 컨텍스트에서 빈으로 생성되는 애플리케이션 컴포넌트 및 상호 간에 주입되는 방법을 선언하는 구..
3.4 타입 추론과 정의 auto 변수 타입 auto타입은 모든 표현식에 적용되는 자동타입이 아닌 한번 정해진 뒤에는 변하지 않는 타입 auto i = 2 * 7.5, j = std::sqrt(3.7); //정상: double auto i - 2 * 4, j = std::sqrt(3.7); //오류: i=int j=double auto i = 2 * 4, j; //오류: j가 초기화되지 않음 auto v = g(x, y, z); //g의 결과 타입 auto& ri = i; //i에 대한 레퍼런스 const auto& cri = i; //i에 대한 const 레퍼런스 auto&& ur = g(x, y, z); //g결과에 대한 포워드 레퍼런스 표현식의 타입 (C++11) decltype은 표현식의 타입을 ..
4장 스프링 시큐리티 💻 실습 : https://github.com/cusbert/spring-in-action-5th 책과는 달리 일부 코드 수정. 권한 관련 테이블을 sql로 생성하지 않고 spring.jpa.hibernate.ddl-auto 로 생성하도록 변경. 🎯 이 장에서 배우는 내용 스프링 시큐리티(Spring Security) 자동-구성하기 커스텀 사용자 스토리지 정의하기 커스텀 로그인 페이지 만들기 CSRF 공격으로부터 방어하기 사용자 파악하기 4.1 스프링 시큐리티 활성화 하기 스프링 부트 보안 스타터 의존성 추가 org.springframework.boot spring-boot-starter-security org.springframework.security spring-security..
3.3 클래스 템플릿 컨테이너 예제 템플릿을 사용하여 제네릭 클래스를 만들어보자 template class vector { public: explicit vector(int size) //암시적 변환을 막음 explicit : my_size(size), data( new T[my_size] ) {} vector() : my_size(0), data(0) {} vector(const vector& that) : my_size(that.my_size), data(new T[my_size]) { std::copy(&that.data[0], &that.data[that.my_size], &data[0]); } int size() const { return my_size; } const T& operator[](..
3.2 네임스페이스와 함수 룩업 네임스페이스 struct global {}; namespace c1 { struct c1c{}; namespace c2 { struct c2c {}; struct cc { global x; c1c y; c2c z; } } } struct same {}; //#1 namespace c1 { struct same {}; //#2 namespace c2 { struct same {}; //#3 struct csame { ::same x; //#1 c1::same y; //#2 same z; //#3 } } } struct same {}; //#1 namespace c1 //#a { struct same {}; //#2 namespace c2 { struct same {}; //..
제네릭 프로그래밍 함수 템플릿 함수 템플릿(Function Template)은 잠재적으로 무한한 함수 오버로드를 생성하는 청사진 int max(int a, int b) { return a > b ? a : b; } int max(double a, double b) { return a > b ? a : b; } //위 두개의 함수를 템플릿을 사용하면 아래와 같이 한번만 구현하면 된다 template T max(T a, T b) { return a > b ? a : b; } //다음 함수는 각 리터럴에 의해 각 타입이 인스턴스화 된다 cout
No identifier specified for entity 에러 해결 이슈 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: 엔티티명 a..
연산자 오버로딩 디자인 일관성있게 디자인하자 도메인 특정 임베디드 언어(Domain-Specific Embedded Language) DSEL 특정 영역의 해결이나 표현을 위해 그 영역에 맞는 특화된 도구를 사용하자는 의미인 듯 우선순위를 존중하자 오버로드한 연산자의 의미와 의도한 우선순위가 C++의 우선순위와 일치하도록 하자 A = B ^ 2 + C; // B제곱에 C를 더하고 싶었겠지만 A = B ^ (2 + C); //컴파일러에서는 이렇게 이해한다 멤버함수 또는 자유 함수 std::cout