[SQLD] 데이터 모델링의 이해 - 데이터 모델의 이해
SQLD 필기 과목 및 내용데이터 모델모델링(Modeling)모델링이란 간단하게 현실 세계의 복잡한 것들을 단순화하여 표현하는 것이다.모델링 종류정보시스템 모델링복잡한 데이터를 컴퓨터 저장 구조로 변환하는 과정, 데이터를 구조화하고 체계화 하는 모든 것, 이 안에 있는 것 중 하나가 데이터 모델링수리 모델링 : 수학적 모델링, 공학 분야에서 사용통계 모델링 : 확률 현상을 도표를 이용해 표시, 데이터 분석에도 사용회로 모델링 : 회로 소자를 이용해 각종 회로 연산에 사용모델링 특징추상화 : 현실 세계를 중요한 요소만 간략히 표현단순화 : 특정 형식에 맞춰 기호, 문자, 그림 등으로 이해하기 쉽게 변환명확화 : 애매한 것을 제거하고 명확하게 현실 세계를 기술정보시스템 모델링 세 관점데이터 관점(Data) ..
[C++] 템플릿 / 람다
오버로딩은 똑같은 이름의 함수를 매개변수의 타입, 개수를 다르게 해서 올리는 기능을 말한다. 여러 개의 함수를 만들어 올리는데 기능은 똑같으면서 매개변수 타입때문에 여러개 올리는 경우를 생각해보자.지갑에는 여러 종류의 카드를 넣을 수 있다고 해보자. 카드라 하면 신용카드, 체크카드, 신분증 등이 있을 수 있으며 포토카드처럼 카드 모양인 물건도 있을 것이다. 이걸 지갑에 넣기 위해선 카드 종류마다 지갑에 넣는 함수를 구현해야 할 것이다. 만약 카드를 지갑에 넣고 이리저리 다룰게 아닌 넣기만 하면 된다고 할 때, 이걸 하나로 묶을 수는 없을까? 그것을 위한 기능이 템플릿(template)이다.템플릿(template)C++에서 템플릿은 코드를 일반화(generic)하기 위한 기능이다. template키워드를 ..
[C++] 가상 함수 / 추상화 클래스
C++에서 클래스를 상속할 때 기본 클래스에 있는 함수를 동일한 이름과 원형을 유지하면서 파생 클래스에서 덮어 쓸 수 있는데, 이를 함수 재정의(redefine)이라 한다. 객체를 가리키는 포인터의 타입에 따라 실행될 함수가 정해지는 정적 바인딩의 특징을 가지며, 업 캐스팅과 다운 캐스팅을 이용해 실행하고자 하는 멤버 함수를 다르게 할 수 있다.아니 난 기본 클래스 타입으로도 맘편하게 오버라이딩된 멤버 함수를 쓰고싶은데 어떡하냐??라 할 수 있다. 이를 위한 기능이 가상 함수이라 할 수 있다.가상 함수(virtual function)가상 함수는 virtual키워드로 선언된 멤버 함수를 의미한다. 이 virtual키워드는 컴파일러에게 호출 바인딩을 실행 시간까지 미루게 하는 키워드로 동적 바인딩을 위한 키..
[C++] 상속
상속은 OOP의 꽃이라고 할 수 있다. 상속이 없으면 객체 지향 언어는 시체나 다름 없다고 생각한다. C++의 상속은 다른 언어와 크게 다를 바가 없다.상속(Inheritance)객체 지향 언어의 주요 특징 중 하나로, 기본 클래스의 속성과 메소드를 새로운 클래스가 물려받아 사용/재사용/확장하는 것이다.정리에 앞서 용어 정리를 하자면 C++에서는 부모 클래스를 기본 클래스(Base Class), 자식 클래스를 파생 클래스(Derived Class)라고 한다. C++의 상속 특징으로는 여러 클래스를 동시에 상속받는 다중 상속(Multiple Inheritance)를 지원한다. class Drink{ ... }; class Pepsi : public Drink{ ... }; class Diet..
[C++] friend / 연산자 중복
C++에는 friend라는 특이한 키워드가 있다. 상속을 위한 키워드도 아니고 접근지정자도 아닌 이상한 녀석인데 뭐하는 녀석인지 알아보자.friendC++ 언어는 같은 객체 지향 언어인 Java와는 차이점이 있다. Java의 경우 전역 함수를 허용하지 않지만 C++의 경우 C언어에서 파생된 언어이다 보니 호환성을 위해 전역 함수를 권장하지 않지만 허용한다. 이 뜻은 특별한 경우 OOP의 가장 큰 특징인 캡슐화를 깨야하는 상황이 발생한다는 것이다. 왜냐? 전역 함수가 객체 내부 정보에 접근해야 할 수도 있기 때문이다.하지만 애석하게도 C++은 객체 지향 언어이다보니 캡슐화 원칙을 함부로 포기할 수 없다. 이럴 경우 특별한 예외 케이스를 만들어 주면 될 것 같은데 이를 위한 키워드가 바로 friend키워드이..
[C++] 스마트 포인터
C언어 계열에는 포인터라는 특별한 기능이 있다. 다른 변수처럼 값을 나타내는 것이 아닌 값이 들어있는 위치를 가리키는 주소값이다. 개발자는 이 포인터 관리에 주의해야하는데void someFunc(){ int *p = new int(67); ... // Throw Exception!! delete p;}Int를 동적을 할당하고 작업한 뒤에 해제를 하는 일반적인 코드이지만, 중간에 예외가 발생해버린다면 delete문에 도달하지 못할 것이다. 이 경우라면 메모리 누수가 발생하게 된다. 물론 예외처리 코드를 이용해서 문제를 처리할 수 있지만, 메모리 할당과 해제를 알아서 해결해준다면 엄청 편해질 것이다.놀랍게도 모던 C++에서는 표준 라이브러리(STL)로 메모리나 리소스 누수로부터 ..
[C++] 복사 생성자
복사복사란 원본과 똑같은 사본을 만드는 것이다. 구글 스프레드에서 사본 만들기를 눌러봤다면 알듯이 서식, 연산, 값 모두 동일하게 복사해서 내 드라이브에 가져온다. C++에서도 여러 작업을 하면서 복사가 발생하는데, 얕은 복사(shallow copy)와 깊은 복사(deep copy) 두 종류의 복사가 있다. 이 복사는 객체에서도 일어난다.얕은 복사(shallow copy)얕은 복사는 객체를 복사할 때 최상위 값만 복사하는 것이다. 간단하게 설명하자면 변수의 값은 물론, 포인터나 참조가 가리키고 있는 주소값이나 공간의 위치 정보만 가져가 복사한다. 주소와 공간을 똑같이 가리키기 때문에 복사가 일어난 각각의 객체는 서로 같은 주소와 공간을 가리킨다. 얕은 복사는 구현이 매우 간단하지만, 앞에서 말한 공간 공..
[C++] 참조
참조에 대해 알기 전에, 우선 프로그램밍 언어의 인자 전달 방식을 알아보자인자 전달 방식크게 값에 의한 호출(call by value)방식과 주소에 의한 호출(call by address)로 구분된다.값에 의한 호출은 코드에서 함수에게 넘겨주는 실인자 값이 복사되어 전달하는 방식이다.주소에 의한 호출은 코드에서 함수에게 넘겨주는 실인자의 메모리 주소를 넘겨주는 방식이다.void swap(int a, int b){ // call by value int tmp = a; a = b; b = tmp;}void swap(int *a, int *b){ // call by address int tmp = *a; *a = *b; *b = tmp;}값에 의한 호출 방식은 값이 ..
[C++] 객체 포인터와 동적 생성
C언어 계열이기 때문에 포인터와 땔래야 땔 수가 없다. C++에서는 객체에 대한 포인터도 만들 수 있다. 포인터는 객체에 대한 주소를 가리키는 변수로 일반 변수와는 차이가 있다.객체 포인터객체 포인터 선언은 기본 타입 포인터 선언과 똑같다. Money *dollar;객체의 주소는 객체 이름 앞에 &연산자를 이용해 나타낸다.dollar = &quarter;Money *won = &manwon; // 포인터 선언할 때 객체 주소로 초기화포인터 접근 연산자는 ->이다. (일반 객체의 접근 연산자는 .이다.)Money quarter;Money* m = &quarter;quarter.getValue();m->getValue();(*m).getValue();아래 세 개의 접근 방법은 모두 동일한 접근이다. (..
[C++] 클래스와 객체
클래스? 객체?객체는 어려운 것이 아니다. 우리 주변에 있는 모든 것이 객체라고 할 수 있다. 사람, 컴퓨터, 커피 등 개별로 볼 수 있는 모든 것을 객체라 부를 수 있다. 그럼 클래스는 무엇일까? 객체를 만들기 위한 설계도이다. C++에서의 클래스와 객체의 차이점위에 설명한 것과 다를바 없다. 클래스(class)는 객체(object)를 정의하는 틀/설계도이며, 클래스 내부에서 멤버변수와 멤버함수가 선언된다. 객체는 C++ 프로그램이 작동하는 동안 존재하는 실체 / 인스턴스(instance)이다.C++에서 클래스 만들기C++에서는 class키워드를 이용해서 클래스임을 선언한다. 클래스는 일반적으로 클래스 선언부(class declaration)와 클래스 구현부(class implementation)로 ..
[SFML] SFML & CMake 환경세팅 (Mac)
SFML이란?https://www.sfml-dev.org/SFML은 Simple and Fast Multimedia Library의 약자로 C++ 기반 멀티미디어 라이브러리이다.그래픽, 윈도우, 오디오, 네트워크, 시스템 모듈을 제공하며, C++ 기반의 객체지향 설계로 만들어졌지만 현재는 Java, Ruby, Python 등 여러 언어 바인딩도 지원한다. Windows, Mac, Linux 등 멀티 플랫폼을 지원하며, 내부적으로 OpenGL 기반으로 동작하기 때문에 OpenGL 코드와 함께 사용할 수도 있다.Unity나 Unreal에 비해 직접 구현해야 할 것이 많지만, 그만큼 CS 기초와 게임 프로그래밍 구조를 깊게 이해할 수 있어서 선택했다.CMake란?https://cmake.org/한마디로 C++..
[C++] std::forward<T>
한줄요약std::forward는 템플릿에 들어오는 값의 종류(lvalue, rvalue)를 유지하기 위한 기능ㅤ서론ㅤhttps://danmarkjajang.tistory.com/22 [C++] lvalue와 rvalue 및 참조연산자미리보는 lvalue vs rvalue종류참조메모리lvalue이름이 있다주소가 있다(메모리에 존재)rvalue이름이 없다주소를 가지지 않음(임시로만 존재)왜 이게 있어야 하는데?lvalue와 rvalue는 C++에서 메모리 모델danmarkjajang.tistory.com 해당 글에서 보면 알 수 있듯이 rvalue가 함수 내로 들어간 경우 rvalue reference로 넘겨주었지만 함수 내부에서는 이름을 갖게 되므로 lvalue가 되어 의도한 대로 작동하지 않을 수 있다...
[C++] lvalue와 rvalue 및 참조연산자
미리보는 lvalue vs rvalue종류참조메모리lvalue이름이 있다주소가 있다(메모리에 존재)rvalue이름이 없다주소를 가지지 않음(임시로만 존재)왜 이게 있어야 하는데?lvalue와 rvalue는 C++에서 메모리 모델과 값의 카테고리를 구분하기 위해 도입되었다. 식 계산 시 임시 개체를 만들고 복사·이동할 때 적용하기 위한 규칙이라고 볼 수 있다.이것은 C++11 표준에서 정의되었으며, 다이어그램으로 보면 다음과 같다.glvalue = lvalue + xvalue → 어딘가에 존재하는 값rvalue = xvalue + prvalue → 이동하거나 버려저도 되는 값lvaluelvalue의 특징으로는 메모리 위치(identity)를 갖는다는 것이다. 이름을 갖고, 주소를 가져올 수 있다& 연산자로..
스핔이 네르지 마세요
최근 유튜브에 스피키라는 트릭컬 캐릭터가 많이 보이고 있다. 이런 서브컬쳐 캐릭터를 좋아하기 때문에 재미있게 보고 있었는데 '스피키 네르지 마세요'라는 영상이 상당한 인기를 끌고 있다. 단순하게 기어다니고 있는 스피키라는 캐릭터를 손가락으로 누르듯이 찌그러 뜨리면서 네응~ 으엥~ 하는 소리를 내는 영상일 뿐인데 상당히 중독성이 있다. 이런 귀여운 스피키를 영상으로만 보고 있자니 아쉽기 때문에 맥북에서 계속 찌부당하는 것을 보고싶었다. 그래서 만든 MacOS 메뉴바 스피키이다. https://github.com/Danmark-Jajang/SpeakiIsNotStupid GitHub - Danmark-Jajang/SpeakiIsNotStupid: 스피키 네르지 마세요스피키 네르지 마세요. Contribute..
코인트레이딩 봇으로 수익내보기
4월 1일 만우절 문뜩 코인으로 돈을 벌 수 있지 않을까라는 막연한 마음으로 정말 뜬금없이 오랜만에 개발을 시작해 보았다.부가적인 이유로 취업은 해야하는데 하는건 없고 뭐라도 해봐야 하는데 무엇을 해야할지 몰랐기 때문에 이참에 정말 예전부터 해보고 싶던 코인 트레이딩 봇을 만들어 볼려고 한다. 코인 거래를 할 거래소로 업비트와 바이낸스를 추려냈다. 바이낸스는 미화가 아닌 테더(USTD)라는 스테이블 코인으로 거래하기 때문에 상당히 귀찮아 보였다. 그래서 본인은 원화로 간단하게 거래 가능한 업비트 거래소를 사용하는 중이다. 일단 가장 먼저 시작한 것을 봇의 뼈대 만들기 및 만든 봇을 올릴 클라우드 세팅하기이다.봇의 경우 가장 간단하게 시작할 수 있는 Python을 사용해서 만들었다. 초단위 거래를 할 생각..