c# 생성자Constructor 소멸자Destructor

클래스가 생성될 때 변수들을 초기화해주고 값을 해제해주는 함수

생성자는 따로 하지 않으면 자동으로 default 생성자가 호출되는데
따로 해놔야될때가 있다. 예는 생각이 안나는데 씨언어에 있을듯

public class Practice
{
  public int aint = 0;
  public bool bbool = FALSE;
  public String cstring = "asdfjkljasdfkl";

  public ConstructTest() // 이게 생성자... 함수 반환타입이 없는게 특징
{
  this.aint = 100;
  this.bbool = TRUE;
  this.cstring = "jljkljkljl";
}
생성자는 new 가 되면서 클래스의 메모리가 생성된 직후 호출된다

public ConstrucTest( int d, bool e, String f)
{
  this.aint=d; //이런식으로 하면 될거다.
.............
}
생성자 두개가 오버로딩이 될거다... 아마... 맞겠지

소멸자는 C++에서는 delete로 지워줘야되는데...
시샾은 가비지콜렉터가 알아서 해준다는 것 같다.
C++도 자동으로 해주게 바꾸면 안될까
~ DestructorTest()
{
}

함수명 당연히 클래스이름과 동일하게 ~~필수~~

c#에서 상속Inheritence 문법 그리고 sealed 상속금지

public class Form1 : MotherFormer
{

}

: 뒤에 있는게 상속되는 엄마

개념은 씨블하고 같다

상위클래스=엄마클래스=부모클래스=Base Class
하위클래스=자식클래스=Sub Class=Derived Class

sealed

public sealed class Father
{
 클래스 내용들~
}

public class Jasic : Father //오류메세지 발생
{
 클래스 내용들
}

C#의 데이터 타입(Data Type)과 변수(Variable) 상수(Constant) 할당(Assignment)

- 데이터 타입 : 메모리를 생성하기 위한 기준
메모리의 크기Size와 형태Type 지정
예. int의 크기 : 4바이트, 형태 : 정수형 비트 조합

- 변수 : 데이터 타입에 따른 값이 입력될 수 있는 메모리공간
변수의 이름 : 식별자
변수명은
'_' 언더바로 시작해야한다.
첫번째 문자는 숫자가 아닌 문자
대소문자 구분

상수는 값을 바꿀 수 없는 변수

int a = 1;
a에 1을 할당 했음

........대강이정도

닷넷의 핵심언어라는 C#에 손을 대 보기로 했다 이번에야 뭘 만들게 생겨서

비전공자로 찍어먹기식으로 배워서 너무 뒤죽박죽이라 개념도 없고 참 난감한게 ...
별로 의무감도 없고 목표도 없어서 흐지부지 한 경우가 많았는데 이번에는 목표가 생겻다
증권사 API를 이용한 HTS 프로그램

그리 어려운 목표도 아니다.

시스템트레이딩 툴을 쓰면 되지 왜 만들고 있냐고 하기도 하던데... 투자 스타일에 따라서 다르다고 생각한다.
리딩투자증권, 하이투자증권, 우리투자증권 세개 증권사 사용가능하다. 이중에서 리딩만 써봤는데 수수료가 좀 쎄다.
그리고 데이터 제공이 좀 부족하고.. 내맘에 쏙 드는 수식을 사용하지 못하게 돼 있다. 그래서 API를 통해 직접 만들자는 결심을 하게 됐다.

제작 목표는 두가지
1 데이터 수집 - 2 데이터를 활용한 투자

일단 몇 가지를 준비해야한다.

첫번째 단계 증권사 선정


비교대상은 이렇게 네가지다. - 수수료 - API지원수준 - 레퍼런스 - QnA
대신증권 - 수수료가 좀 쎄다 - API와레퍼런스는 정말 좋다. 딱 보면 이해가 가니까... API구조도 간단해보인다. 수수료가 걸림돌...
QnA게시판은 무슨 컴퓨터학원 게시판인 줄 알았다. 대답도 정말 잘해주고 그쪽 직원 실력도 뛰어나다. 언어도 이것저것 다 지원해주는 것 같다. 대신증권 HTS는 자바로 만들었다고 하는 것 같든데... 자바도 지원해줄듯.. COM은 원래 자바에서도 쓸 수 있는건가 모르겠다.

이트레이드증권 - 주식 수수료가 싸다. 선물과 옵션수수료는 좀 쎄다. - 레퍼런스... 어렵다. C++전용설명서라서 먼소린지 하나도 못 알아먹겠고 초보자가 하기엔 거의 진짜 죽도록 어렵다. 그런데 난 초보자... 고행의 길에 발을 들여놓은 것 같다. QnA게시판 답변 잘 안해준다. ㅠ
아직 처음 시작하는 단계라면 거래횟수는 그냥 줄이면 되니까... 대신증권으로 옮기라고 말해주고싶다.

SK증권 - C++예제를 좋은걸 지원해준다. C#도 있다고 하는데 아직 제대로 검토를 못 해봤다. TR은 그냥 쓰지도 못하고 신청을 해야되고 뭐 복잡하다.
TR은... 증권의 메뉴를 말한다. '종목조회TR' '선물호가TR' 이런 개념이다. 필요한거 하나하나 신청해야된다. 난 원래 이런건 다 신청해놓고 한개씩 골라서 쓰는 스타일이라서...

우리투자증권 - 있다고 한다.
삼성선물 - 엑셀로 만드는걸 지원하던데... 안써봤다.
농협선물 - 홈페이지에 가보면 딱 써 있다. API지원.. 써보진 않았다. 선물회사인만큼 선물옵션 파생상품만 거래가 가능하다. API 받으려면 전화하고 해야되서 귀찮아서 안해봤다.
동양증권 - 난 잘 모르겠는데 있다고 한다
하나대투 - 잘 모르겠는데 있다고 한다
대우증권 - 잘 모르겠는데 있다고 한다

두번째 단계 데이터베이스 설계
두번째와 세번째는 병행해야되는거지만.. 굳이 나누자면 이런 것 같다.
어떤 형태로 저장할지 데이터베이스 구조는 결정했는데...
꼭 데이터베이스로 해야할까 하는 생각이 든다. 그리고 데이터베이스는 어떻게 쓰는건지... ㅠ
ADO.NET이니 OLE DB니... 뭐 하는데 이 둘중에 하나를 써야할 것 같다. DB는 아무래도 무료인 큐브리드나 mysql을 써야할 것 같다.
1초에 수십개씩 데이터가 넘어가는데... 무료DB가 버텨줄지도 걱정이다.
대략 하루 누적량이 500메가 정도일 것 같다.
이걸 file i/o로 CSV파일로 뽑아서 장마감후에 데이터를 넘기는게 나을까
... 둘다 해보고 나은걸로 해야할 것 같다.

세번째 단계 데이터 수집기 C#프로그래밍
데이터베이스에 안정적으로 돌아갈만하게 만들어야지...

네번째 단계 궁극의 단계 데이터 처리 프로그램
그냥 거래프로그램이다.
마지막이네.. .이건 오히려 쉽다.

어쨌든 시작... C#기본개념부터 공부하면서 메모를 시작하고.. 만드는 과정도 조금
c#은 아무리 봐도 제대로 돼먹은 책이 없다.
아무래도 비슷한 개념이 많은 c와 c++을 하고 c#을 하는게 쉬울 것 같다. 돼먹지 못한 책으로 개념잡으려면 힘드니까

헤더 파일을 이용한 파일 분할

Door.h
#include <iostram>
using std::cout;
using std::endl;

const int OPEN=1;
const int CLOSE=2;

class Door
{
private:
    int state;

public:
    void Open();
    void Close();
    void ShowState();
}

Door.cpp
#include"Door.h"
void Door::Open()
{
    state=OPEN;
}
void Door::Close()
{
    state=CLOSE;
}
...........생략
}

Main.cpp
#include"Door.h"

int main()
{
    Door d;

    d.Open();
    d.ShowState();

    return 0;
}

함수 오버로딩과 디폴트default 매개변수

1번함수 int calc(int a, int b, int c) {return a+b+c}
2번함수 int calc(int a, int b)
3번함수 double calc(double a, double b)
4번함수 double calc(double a, double b, double c)

int main(void)
{
 int a, int s, int d;
 double q, double w, double e;
 calc(a, s); //2번함수 호출
 calc(q, w); //3번함수 호출
 return 0;
}

5번함수 void calc(int a, int b)
2번함수와 반환형태만 다르다.
이 경우에는 오버로딩이 안됨

디폴트default 매개변수
1번함수를 변형해서 int calc(int a=1, int b=2, int c=3)
이라고 하는 것처럼 함수 선언시 변수가 입력되지 않아을 경우 사용할 기본값을 정해주는 것
result=calc();

result값은 6이 된다. void일 경우

6번함수를 void calc(void)라고 하면
result=calc();일 경우
1번과 6번 두개가 다 호출이 가능하기 때문에..