분류 전체보기 252

Java JIT compiler

Java JIT compiler 1. JIT 컴파일러란? 자바 파일을 컴파일하게 되면 ".class" 확장자를 가진 클래스 파일이 생성된다. 이 클래스 파일은 자바 바이트 코드(java byte code)로 이루어져 있다. 가상 기계(Virtual Machine)을 사용하는 언어에서의 가장 중요한 점으로는 컴파일된 바이트 코드를 어떻게 하면 더 효율적으로 빠르게 실행시킬 수 있을지에 대한 점이다. 자바 바이트 코드는 인터프리터 언어(interpreter language)이다. 한줄씩 읽고 해석하고, 그에 해당하는 기능을 실행시키는 인터프리터 언어이기에 비효율적으로 보일 수 있겠지만, 가상 머신에서 돌아가는 바이트 코드들은 매우 저수준의 인터프리터 언어이기에 자바스크립트 한줄에 비하면 자바 바이트 코드 한..

Java/JVM 2018.07.28

복사 생성자

복사 생성자 1. 얕은 복사와 깊은 복사 복사란 원본과 동일한 별개의 사본을 만드는 것이다. 복사를 자세히 살펴보면 얕은 복사(shallow copy)와 깊은 복사(deep copy)로 구분할 수 있다. 어린이가 장난감을 가지고 있다고 하자. 얕은 복사의 경우에는 어린이만 복사를 하고 장난감은 복사를 하지 않는다. 얕은 복사 후, 두 어린이는 장난감을 서로 자기 것이라고 아는 충돌이 생긴다. 이와 달리 깊은 복사는 원본이 소유한 모든 것까지 복사한다. 깊은 복사가 이루어지면 어린이가 소유한 장난감도 복사되므로 얕은 복사에서 생기는 충돌은 발생하지 않는다. - 객체의 얕은 복사와 깊은 복사 얕은 복사와 깊은 복사는 C++의 객체 복사에도 존재한다. 어떤 복사 방식을 사용하느냐에 따라 복사 결과에 심각한 차..

C++/C++ 기본 2018.07.27

참조와 함수

참조와 함수 1. 참조 개념 C++에서는 C 언어에 없는 참조(reference)개념을 도입하였다. 포인터 변수를 선언하기 위해 * 기호를 사용하지만, 참조 변수를 선언하기 위해서는 & 기호를 사용한다. &를 참조자라고 부른다. C++에서 참조는 다음과 같이 활용된다. 1) 참조 변수2) 참조에 의한 호출3) 함수의 참조 리턴 2. 참조 변수 1) 참조 변수 선언 참조 변수는 이미 선언된 변수(원본 변수로 지칭)에 대한 별명으로서, 참조자(&)를 이용하여 선언하며, 선언 시 반드시 원본 변수로 초기화하여야 한다. 다음은 두개의 참조 변수 refn과 refc를 선언하는 코드이다. i.e.int n = 2;int &refn = n; //참조 변수 refn 선언. refn은 n에 대한 별명으로, 둘은 동일한 ..

C++/C++ 기본 2018.07.27

객체 치환 및 객체 리턴

객체 치환 및 객체 리턴 1. 객체 치환 객체 치환 시 객체의 모든 데이터가 비트 단위로 복사된다. 다음 예를 보자. i.e.Circle c1(5); //반지름 값 = 5Circle c2(30); //반지름 값 = 30c1 = c2; //c2 객체를 c1 객체에 비트 단위로 복사한다. c1의 반지름이 30이 된다. 객체 치환 후 c1과 c2의 내용이 완전히 같다. 그러나 c1, c2가 하나의 객체가 되는 것은 아니다. c1과 c2는 별개이며 내용물만 같을 뿐이다. 객체 치환(assignment)은 동일한 클래스 타입에 대해서만 적용된다. 2. 함수의 객체 리턴 C++에서 함수가 객체를 리턴하는 경우를 보자. 다음은 Circle 클래스의 객체를 리턴하는 getCircle() 함수이다. i.e.Circle ..

C++/C++ 기본 2018.07.26

함수 호출 시 객체 전달

함수의 인자 전달 방식 - 값에 의한 호출과 주소에 의한 호출의 특징 값에 의한 호출(call by value)은 실인자의 값을 복사하여 전달하므로, 함수 내에서 실인자를 손상시킬 수 없는 장점이 있다. 그러므로 함수 호출에 따른 부작용(side-effect)은 없다. 반면, 주소에 의한 호출(call by pointer)은 실이자의 주소를 넘겨주어 의도적으로 함수 내에서 실인자의 값을 변경하고자 할 때 이용된다. C++에서는 이들 외에 참조에 의한 호출(call by reference)을 추가하였다. 1. 함수 호출시 객체 전달 C++에서는 함수의 객체를 전달할 수 있으며, 이것은 int, char등 기본 타입의 값을 전달하는 것과 여러 가지 면에서 다르다. 1) 값에 의한 호출로 객체 전달 - 값에 ..

C++/C++ 기본 2018.07.26

cin.getline()과 getline()의 차이점

cin.getline()과 getline()의 차이점 c++를 공부하다보면 "cin.getilne()" 함수와 "std::getline()" 함수를 마주하게 된다. 둘다 "getline()'이라는 이름의 함수이고, 문자열을 입력 받는데에 사용된다. 그래서인지 흔히들 두 함수를 혼동한다. cin.getline() 함수는 문자 배열이며 마지막 글자가 0(terminator)인 c-string을 입력 받는데에 사용한다. 이에 반해, std::getline() 함수는 원하는 구분자(delimiter)를 만날 때 까지 모든 문자들을 입력 받아서 하나의 string 객체에 저장한다.

C++/C++ 기본 2018.07.24

express에서의 템플릿 엔진 사용

express에서의 템플릿 엔진 사용 node.js로 서버를 구현하고 클라이언트에게 보낼 웹페이지를 구현하는 과정에서, 대부분의 경우에는 HTML과 CSS를 사용한다. 그러나, jade나 pug등을 사용할 경우에는 html을 사용할 때와는 달리 템플릿 엔진을 사용해서 jade나 pug를 html로 렌더링해야 한다. 템플릿 엔진을 node.js에서 사용하는 자세한 방식은 아래의 링크를 통해서 확인할 수 있다. http://expressjs.com/ko/guide/using-template-engines.html

JavaScript/Node.js 2018.07.24

Node.js에서 MariaDB를 연결할 때에 생기는 문제

Node.js를 사용해서 서버를 구현하다보면 mysql 모듈을 사용해서 MySQL이나 MariaDB에 연결을 시켜서 데이터를 주고 받는 기능을 구현해야 할 때가 생긴다. 이 때에 흔히들 다음과 같은 에러 메세지를 마주하게 된다. 이 "ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server"라는 에러 메세지 통해서 알 수 있듯이 클라이언트 쪽에서 지원하지 않는 인증 모드를 사용하고 있어서 db 연결이 실패했다는 것이다. MySQL의 경우 5.7 버전 이전과 5.7 버전 이후 버전에서 사용하는 비밀번호 인증 방식이 다르기 때문에 생기는 문제로 아래와 같은 방식을 통해서 쉽게 문제 해결이 가능하..

JavaScript/Node.js 2018.07.24

this 포인터

this 포인터 1. this의 기본 개념 this는 객체 자신에 대한 포인터로서 클래스의 멤버 함수 내에서만 사용된다. this는 전역 변수도 아니고 함수 내에 선언된 지역 변수도 아니다. 정확히 말하자면, this는 객체의 멤버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체에 대한 주소이다. this 포인터를 이용하여 Circle 클래스를 작성하면 다음과 같은 형태가 된다. i.e.class Circle {int radius;public:Circle() { this->radius = 1; }Circle(int radius) { this->radius = radius; }void setRadius(int radius) { this.radius = radius; }...}; 2. this..

C++/C++ 기본 2018.07.17

객체와 객체 배열의 동적 생성 및 반환

객체와 객체 배열의 동적 생성 및 반환 1. 객체의 동적 생성 및 반환 기본 타입 변수와 마찬가지로, new와 delete를 이용하여 객체를 동적으로 생성하고 반환할 수 있다. - new를 이용한 객체의 동적 생성과 생성자 다음은 new 연산자를 이용하여 객체를 동적 생성하는 구문이다. 클래스_이름 *포인터_변수 = new 클래스_이름; //기본 생성자 호출클래스_이름 *포인터_변수 = new 클래스_이름(생성자_매개_변수_리스트); //매개 변수 있는 생성자 호출 new는 클래스 크기의 메모리를 할당받아 객체를 생성하며, 이때 생성자를 호출한다. 앞의 첫 번째 형식의 경우기본 생성자가 호출되며, 두 번째의 경우 매개 변수를 가진 생성자가 호출된다. - delete를 이용한 객체 반환과 소멸자 동적으로 ..

C++/C++ 기본 2018.07.17