본문 바로가기

Language

[PHP] PDO 데이터베이스는 웹 어플리케이션 개발에 절대 빠지지 않는 기능이다. php 역시 데이터베이스를 위한 추상화 계층인 PDO를 제공하며 이를 통해 데이터베이스를 간편히 사용할 수 있다. PDO는 php의 내장 기능이며 php프로그램과 데이터베이스 사이의 통신을 단순화하는 역할을 한다. 실습은 다음과 같은 환경에서 진행했다. php 7 MySQL 5.71. 테스트 테이블 생성 MySQL에 실습을 위한 새로운 스키마를 만들고 테이블을 생성했다. ` CREATE SCHEMA `test_sch` DEFAULT CHARACTER SET utf8 ; /* test용 테이블 */ CREATE TABLE `world_of_renaissance`.`test_table` ( `id` INT NOT NULL AUTO_INCREM..
[PHP] phpstorm code sniffer 설정 윈도우 phpstorm에 코드 검사기인 mess detector와 codesniffer를 연동하여 코딩 컨벤션 및 PSR-2 형식를 검사할 수 있다. 1. php 설치 링크에서 PHP의 윈도우 버전 설치 압축 해제 후 파일을 C:/php7/에 옮긴다. 그리고 php.ini-production 파일을 열어 extension_dir를 찾아 아래처럼 수정한다. ; extension_dir = "C:/php7/ext"설치확인 php -v2. composer 설치 공식 홈페이지에서 다운로드 설치확인 composer help3. 설치 mess detector 설정 composer global require squizlabs/php_codesniffer phpmd/phpmd설치를 시작하면 아래처럼 첫 줄에 어느 경로..
[C++]inline 함수 [C++]inline 함수기본적으로 함수 호출은 메모리상의 점프를 이용하며, 여러가지 상태 정보등을 저장하고 복원해야 하므로 내부적으로 복잡한 과정을 거친다. 프로그램이 실행되며 한줄씩 수행해 나가다가 함수 호출을 만나면 해당 함수의 메모리 영역으로 이동후 동작을 수행한다. 하지만 인라인 함수는 해당 함수 호출을 함수의 코 저체를 호출한 코드 위치로 모두 복사하여 대체한다. 따라서 함수 호출 단계가 줄어 복잡한 과정이 생략되므로 함수 동작 방식이 더 간단해지고 성능이 향상된다. 하지만 인라인함수가 항상 좋은것은 아니다. 인라인 함수는 코드를 대체하는 것이기 때문에 해당 함수를 호출하는 구문이 많아질 수록 실행 파일의 크기도 커진다. 호출 구문이 모두 함수의 정의로 바귀어서 전체 코드 양이 늘어나기 때문이..
[C/C++]std::mutex [C/C++]std::mutex멀티 쓰레드를 이용한 프로그램을 작성할 때 공유 자원의 관리에 주의해야한다. 여러 쓰레드가 동시에 같은 데이터를 변경할 경우 의도하지 않은 결과를 초래할 수 있다. 이런 멀티 쓰레드 환경에서 발생하는 문제점을 동기화 메커니즘으로 해결할 수 있다.먼저 동기화를 사용하지 않을 경우 발생하는 문제를 살펴보자.#include //std::thread #include //printf() using namespace std; int sum = 0; void Add(int cnt) { for (int i = 0; i < cnt; i++) { sum += 1; } } void Sub(int cnt) { for (int i = 0; i < cnt; i++) { sum -= 1; } } in..
[C/C++] 소켓 프로그래밍 [C/C++] 소켓 프로그래밍 오류윤성우의 열혈 TCP/IP 소켓 프로그래밍 책을 보고 소켓 통신을 실습할 때 코드를 그대로 쓰면 실행이 잘 안된다. 실행하며 나온 오류를 잡아봤다.환경 : Window10, visual studio 2015LNK2019 에러소스코드를 그대로 복붙하고 빌드하면 LNK2019에러가 나온다.#pragma comment(lib, "ws2_32.lib") 를 추가하면 빌드가 잘 되고 실행된다.클라이언트 연결도 안했는데 Accept 처리C++로 혼합개발할 경우 발생했던 문제이다. 원인은 #include을 포함하고 using namespace std를 썼을 때 생긴다. std::bind와 WinSock2의 bind의 이름 충돌로 발생한다. using namespace std 사용의 ..
[C/C++] const keyword [C/C++] const keywordconst 키워드를 적절히 사용할 수 있으면 유용하다. 코드 작성 중 발생할 수 있는 실수를 컴파일 단계에서 확인가능하기 때문에 활용하면 좋다. const의 개념은 간단하다. 이 키워드를 통해 선언되면 프로그램 실행 중 변경할 수 없음을 지정한다. 이를 통해 할 수 있는 기능 중 하나는 상수 지정이다. 상수를 지정하는 다른 방법은 #define을 이용하는 것이다. const는 #define보다 이점을 가지고 있다. 먼저 #define을 사용할 경우는 단순 대체만 수행하기 때문에 타입 확인을 할 수 없는 반면 const를 사용하면 컴파일러에서 확인이나 검사가 가능하다. 또한 const변수를 이용하면 디버거에서 변수를 이용할 수 있어 디버깅에 유용하다.포인터와 const..
[C++]optional [C++]optional [C++]optionalC++17의 표준으로 optional이 도입되었다. 이전에 자바 스프링 개발을 할 때도 본적이 있었는데 C++에서 보니 반갑다. 자바는 jdk1.8부터 optional 지원이 된것으로 알고있다. 그러면 이 optional은 무엇일까?함수를 작성하는 예시를 들어보자. 두 INT값을 나누어 결과를 반환하는 함수를 작성하려고 한다.double divide(int a, int b) { return (double)a / b;}만일 이 함수에 인자 b에 0이 주어진다면 exception이 발생할 것이다. 따라서 b == 0일 경우 실패했다는 결과값을 반환해야 한다. xxxxxxxxxxdouble divide(int a, int b) { if (b == 0) { //f..
아이템선택 아이템 선택x#include#include#include#include#include​using namespace std;​struct Table{ struct Item { int id; int weight; };​ vector table;};​int select(const Table& table, int w) { int randomNum = rand() % (w + 1);​ int sum = 0; for (auto it : table.table) { sum += it.weight; if (randomNum