728x90
반응형

프로그래밍 지식 63

JPA, Java Persistence API 란 무엇인가?

나는 일전의 게임 클라이언트 개발자였다. 하지만 일신의 이유로 백엔드를 공부하기 시작했다. 오늘은 JPA라는 키워드에 대해서 알아보려고 한다. 시작해보자 우선 JPA 단어에 대해서 알아보자 대문자를 보다시피 무엇의 약자인 것 같다. 바로 Java Persistence API 라는 뜻이다. 즉, 자바가 지속성(자체적)으로 가지고 있는 API라는 것이다. 다른 말로 하면 현재 자바 표준 인터페이스라고도 한다. 그 전에는 인터페이스가 없었느냐?? 아니다. EJB 라고 있었다. 다만 지금은 주로 사용하지는 않기에.. (코드의 복잡성과 자원의 비효율성) 가볍게 찾아보면 좋을듯하다. 아무튼 인터페이스는 다른 말로하면 인터페이스 자체가 동작을 구현하지는 않는다. 구현은 개발자에게 맡긴다는 말과 같다. 대표적으로 JP..

Effective Modern C++, 항목 5 : 명시적 형식 선언보다는 auto를 선호하라

C++11 부터 auto가 생겨나면서 아래의 문제점들이 해결되었다. 초기화되지 않는 변수를 컴파일러가 에러로 잡지 않는다. => auto 키워드로 변수를 선언하려면 무조건 초기화를 해야함. int x; // 문맥에 따라 초기화 안됨 auto x2; // 오류! 초기치가 꼭 필요함 auto x3 = 0; // 양호함 값의 형식이 간단하지 않다. => auto 는 type deduction을 통해 타입을 줄여줌 template void dwim(It b, It e) { for (; b != e; ++b) { typename std::iterator_traits::value_type curValue = *b; ... } } template void dwim(It b, It e) { for (; b != e; ..

Effective Modern C++, 항목 20 : std::shared_ptr처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr를 사용하라

스마트 포인터 또다른 쓰임이다. std::shared_ptr처럼 작동하되 대상을 잃을 수도 있는 포인터가 필요하면 std::weak_ptr를 사용하라. => 즉, 객체를 접근할 수 있냐 확인하는 용이라고 생각된다. 다시 말해서 자신이 가리키는 대상이 이미 파괴되었다는 문제를 해결할 수 있어야 한다. 다시 말해서 자신이 가리키게 되어 있는 객체가 사실 존재하지 않는 상황을 검출할 수 있어야 한다. => shared_ptr을 쓰지 말라고 하는 것이 아니라 weak_ptr은 shared_ptr을 보강한다. 대체로 std::weak_ptr는 std::shared_ptr를 이용해서 생성한다. std::weak_ptr는 자신을 생성하는 데 쓰인 std::shared_ptr가 가리키는 것과 동일한 객체를 가리키나, ..

Effective Modern C++, 항목 7 : 객체 생성시 괄호와 중괄호 구분하기

C++ 11부터 객체 생성 구문이 아주 다양해졌다. 그래서 우리는 이 항목을 배우는 것이다. 일반적으로 C++11 에서는 초기화 값을 3가지 형태로 지정할 수 있다. 1. 괄호 2. 등호 3. 중괄호 int x(0); int y = 0; int z { 0 }; 사실 하나 더 있다. 등호와 중괄호를 함께 사용하는 경우다. int z = { 0 }; **위 코드는 대체로 중괄호를 단독으로 사용한 것과 동일하게 취급되어 작동한다. 위처럼 기본 타입이 아니라 사용자 정의 형식에서는 위처럼 간단하게 초기화되거나 assign이 일어나지는 않는다. 예를 들면 Widget w1; //기본 생성자 Widget w2 = w1; //복사 생성자 => w1을 w2에 대입하는 것이 아님 w1 = w2; // 이건 복사 대입 연..

Effective Modern C++ 값의 종류

이번에 Effective Modern C++ 책을 오직 나의 만족을 위해서 공부해보기로 하였다. 근데 뭐 읽는다고 내가 개발 실력이 급격하게 늘 것 같지는 않고 그냥 후두러 까보자. 까다보면 잘해지겠지.. 시작해보자 C++에서는 코드를 써놓은 것을 표현식(expression)말하는데 자주 쓰는 용어이니 기억하자. 아무튼 표현식은 2가지를 가진다. 1.Type (자료형) 2. value category(값의 종류) ?? 엥 종류가 타입 아니냐??? 물론 비슷하지만 다르다. 책에서도 다르게 분류하는데 타입: int, int*, string, const int&, int[], ... 등 우리가 평소에 알고 있는 타입 그대로다. 값의 종류: lvalue, prvalue, xvalue, rvalue, glvalu..

클래스 생성, 복사, 대입, 소멸 C/C++

C++의 핵심인 클래스에서 가장 중요한 생성, 복사, 대입, 소멸에 대해서 알아보자. 클래스를 정의할 때는 명시적이든 암시적으로 하든 클래스 타입 객체를 복사하거나 대입 또는 소멸할 때 만들어줘야할 것이 많다. 즉, 클래스가 정상적으로 작동하기 위해서는 5가지 멤버함수가 필요하다. 1. 복사 생성자 (디폴트 있음) 2. 복사 대입 연산자 (디폴트 있음) (일반적으로 1번과 2번은 거의 비슷함) -> 둘다 정의 안하면 컴파일러가 만들어줌 3. 이동 생성자(다루지 않을 예정) 4. 이동 대입 연산자(다루지 않을 예정) 5. 소멸자 (디폴트 있음) 생성자, 소멸자까지만 듣고 포기한 사람이 많겠지만 쉽게 알아보도록 하자. **디폴트가 있는 생성(복사, 대입), 소멸은 무조건 중요하다는 말이 되겠다. 1. 복사 ..

포인터, 참조자(Pointer, Reference) C / C++

물론 참조변수에서 이미 알아봤지만 포인터와 함께 알아보겠다. 포인터와 참조자는 비슷한 맥락에서 쓰이지만 조금 다르다. -> 포인터와 참조자의 다른점을 정확히 설명할 수 있다면 정말 아는 것. 여기서 짧게 설명하자면 참조자는 한 번 참조되어 정의되면 다른 객체를 참조할 수 없어서 항상 그 참조자와 처음 결합한 객체만 참조한다. 포인터에 대입하면 참조자가 아닌 다른 변수처럼 포인터 자체에 새로운 값이 대입된다. 즉, 다른 객체를 가리킬 수 있다. [C || C++ 문법/함수] - C++문법/ 참조 변수, reference + 참조의 특성 알아보자 우선 먼저 포인터에 대해서 한마디 설명해보자. 포인터는 어떠한 변수를 가리키는 변수다. ?? 엥 변수를 가리키는 변수?? 우선 변수는 말했듯이 변할 수 있는 데이터..

Variable, 변수란, C/C++

기초부터 탄탄히 하기 위해서 다시 복습하도록 한다. 한 마디로 말할 수 없으면 공부한 것이 아니라는 말을 듣고 다시 한 마디로 정의해보자 변수란? 데이터를 저장할 수 있는 메모리의 공간 이라고 생각한다. 해당 변수는 주소 값을 가지고 있고 주소 값으로 접근이 가능하다. 정의했으니 이제 더 자세히 알아보자. 메모리는 접근 시에 주소로 접근이 가능한데 컴퓨터의 운영체제나 구조에 따라 달라지지만 우리는 32bit의 주소 또는 64bit의 주소를 가지고 있다. (32 bit라고 하자.) 우리는 이 주소에 접근하여 데이터를 메모리에 저장한다. 하지만 우리가 주소를 직접 써서 데이터를 관리했다면 정말 비효율의 끝판왕이었을 것이다. 우리는 조금 더 효율적인 방법인 변수를 써서 데이터를 관리하기로 했다. (물론 내부적..

C++문법/ (클래스) 템플릿, Template - 2

앞에서 함수 템플릿을 배웠듯이 클래스 템플릿도 뭔가 찍어내는 것 같은 느낌이다. 맞다. 하지만 조금 느낌은 다른데 클래스 템플릿은 구조나 알고리즘은 같되 멤버의 타입이 다른 클래스를 찍어내는 틀이다. 예를 보면서 알아보자 아래 클래스들은 화면의 특정 위치에 값 하나를 출력하는 클래스다. 우선 int, char 순서대로 class PosValueInt { private: int x,y; int value; public: PosValue(int ax, int ay, int av): x(ax), y(ay), value(av) {} void outvalue(); }; class PosValueChar { private: int x,y; char value; public: PosValue(int ax, int a..

C++문법/ (함수) 템플릿, Template - 1

템플릿이란 무엇이냐? 하나의 클래스를 서로 다른 (사용자가 원하는) 타입에 재사용할 수 있도록 하는 것이다. 타입만 넣어주면 자동으로 코드를 찍어내는 틀이라고 보면 된다. 예를 들어서 여러 타입의 객체를 저장할 수 있는 연결리스트와 같은 자료구조를 만들 수 있다. **template 와 template 는 정확히 같은 의미를 같지만 typename키워드를 많이 쓴다. //template class를 만들었다. template class ShiftedList { T* array; // 특정 타입의 배열 int offset, size; public: ShiftedList(int sz) : offset(0), size(sz) { array = new T[size]; // 타입 T의 배열 } ~ShiftedLi..

728x90
반응형