분류 전체보기 252

정적 바인딩과 동적 바인딩

1. 정적 바인딩 컴파일할 때 변수와 함수의 타입이 결정된다. 프로그램 실행 중 타입이 결정되는 동적 바인딩에 비해 미리 결정되어 있어 프로그램 실행 속도가 전반적으로 빠르다. 또한 프로그램 실행 중 형태를 바꿀 수 없기 때문에 타입 에러로 인한 문제점을 초기에 발견할 수 있어 안정성이 향상된다. 다만, 모든 타입이 결정되어 있기 때문에 유연성을 요구하는 코드의 재사용에서 불편함을 초래할 수 있다. 2. 동적 바인딩 프로그램 실행 중에 변수와 함수의 타입이 결정된다. 타입이 미리 정해져 있지 않고 프로그램 실행 중에 결정되기 때문에 다양한 방식의 프로그래밍이 가능해진다. 정적 바인딩에 비해 프로그램 속도가 상대적으로 느리고 타입 에러가 많다.

static 멤버

static 멤버 1. static의 특성 static은 변수와 함수의 생명 주기(life cycle)와 사용 범위(scope)를 지정하는 4가지 방식(storage class) 중 하나로서, static으로 선언된 변수와 함수의 생명 주기와 사용 범위는 다음과 같은 특징을 가진다. - 생명 주기: 프로그램이 시작할 때 생성되고 프로그램이 종료할 때 소멸- 사용 범위: 변수나 함수가 선언된 범위 내에서 사용. 전역(global) 혹은 지역(local)으로 구분 C++에서 클래스 멤버 변수와 멤버 함수를 포함하여 모든 변수와 함수는 static 지정자로 선언 가능하다. non-static 멤버는 각 객체마다 별도로 생성되므로 인스턴스(instance) 멤버라고 부르며, static 멤버는 클래스 당 하나만..

C++/C++ 기본 2018.07.31

비동기 프로그래밍

비동기 프로그래밍 일반적으로 파일 I/O나 네트워크 I/O는 메모리 I/O보다 현저히 느리다. 예를 들어 파일 4개의 입출력을 하나씩 처리한다면, 처리 시간은 길어지고 CPU의 사용 효율성은 떨어지게 된다. 이를 개선하고자 비동기 프로그래밍을 사용하는데, 순차적으로 I/O를 처리하는 것이 아니라 I/O 처리 요청만 운영체제에 전달하고 CPU는 다른 연산을 수행한다. I/O 처리가 완료되면 운영체제에서 I/O 처리를 완료했다는 메시지를 전달받아 이후 작업을 처리하는 방식이다. 참고로, 비동기 프로그래밍은 I/O 처리 요청 순서와 별개로 처리를 완료하는 순서는 제각각이다. 따라서 개발자는 보장되지 않는 I/O 완료 처리를 고려해 프로그래밍을 해야 한다. Node.js는 모든 함수와 모듈이 비동기 프로그래밍을..

JavaScript/Node.js 2018.07.31

모놀리식 아키텍처와 마이크로서비스 아키텍처

모놀리식 아키텍처와 마이크로서비스 아키텍처 1. 모놀리식 아키텍처 - 널리 활용해 온 전통적인 아키텍처이다. - 하나의 애플리케이션 안에 모든 컴포넌트를 포함하는 구조이다. - 구조가 단순해 개발과 배포가 간편하다. 1) 모놀리식 아키텍처의 한계 - 분산 처리가 비효율적이다. 모놀리식 아키텍처는 모든 기능을 프로세스 하나 또는 코드 베이스로 개발하기 때문에 기능별로 분산 처리를 할 수 없다. 항상 전체를 같이 분산해야 한다. - 코드를 관리하기 어렵다. 코드 구조가 하나이기에 새로운 코드를 추가하려면 전체 코드를 이해해야 하고 코드를 추가할수록 구조가 복잡해진다. - 새로운 기술을 적용하기 어렵다. 특정 기능에 새로운 기능을 적용하고 싶어도 기능별로 코드가 독립적이지 않아 적용하기 쉽지 않다. 2) 개선..

JavaScript/Node.js 2018.07.31

디폴트 매개 변수

디폴트 매개 변수 함수가 호출될 때 매개 변수에 값이 넘어오지 않는다면, 미리 정해진 디폴트 값을 받도록 선언된 매개 변수를 디폴트 매개 변수(default parameter) 혹은 기본 매개 변수라고 부른다. 1. 디폴트 매개 변수 선언 디폴트 매개 변수는 '매개 변수 = 디폴트 값' 형태로 선언된다. 다음은 디폴트 매개 변수를 가진 star() 함수 사례이다. i.e.void star(int a=5); //매개 변수 a의 기본 값은 5가 된다. int a는 디폴트 매개 변수로서 디폴트 값으로 5를 가지도록 선언되었다. 디폴트 매개 변수를 가진 함수를 호출할 때는 디폴트 매개 변수에 값을 넘겨주어도 되고 생략해도 된다. 생략하는 경우 자동으로 디폴트 값이 매개 변수에 전달된다. star() 함수는 다음..

C++/C++ 기본 2018.07.30

버블정렬 Bubble Sorting

버블정렬 버블정렬도 선택정렬처럼 제일 큰 원소를 끝자리로 옮기는 작업을 반복하는 정렬이다. 다만, 제일 큰 원소를 오른쪽으로 옮기는 방법이 다를 뿐이다. bubbleSort(A[], n) { for last (last의 값은 n에서부터 2까지) { for i (i의 값은 1에서 last까지) { if (A[i] > A[i+1]) then A[i] 와 A[i+1]의 값을 교환 (원소 교환)} } } 위의 코드는 버블정렬의 수도 코드(sudo code)이다. 버블 정렬의 알고리즘은 크게 두 개의 for 루프로 이루어져 있다. 첫 번째 루프는 선택정렬의 for 루프와 역할이 똑같다. 루프를 돌 때마다 제일 큰 원소를 맨 오른쪽으로 보내고 정렬할 배열의 크기를 하나씩 줄인다. 안쪽의 for 루프가 하는 일은 가..

알고리즘 2018.07.30

함수 중복

함수 중복 C++에서는 C 언어와 달리 같은 이름의 함수를 여러 개 만들 수 있으며 이것을 함수 중복(function overloading)이라고 부른다. 함수 중복은 다형성의 한 사례이다. 함수 중복은 전역 함수와 멤버 함수에 모두 적용되며, 상속 관계에 있는 기본 클래스와 파생 클래스 사이에도 가능하다. 1. 중복 함수 조건 함수 중복이 가능하려면 다음 조건이 동시에 만족되어야 한다. 1) 중복된 함수들의 이름이 동일하여야 한다.2) 중복된 함수들은 매개 변수 타입이나 매개 변수의 개수가 달라야 한다.3) 함수 중복에 리턴 타입은 고려되지 않는다. - 함수 중복의 성공 사례 다음은 매개 변수의 타입이나 매개 변수의 개수를 다르게 함으로써 함수 중복을 가능하게 만든 예시이다. i.e.int sum(in..

C++/C++ 기본 2018.07.28

대입 연산자

대입 연산자 대입 연산자는 연산자 오버로딩의 결과로서 실행된다. 복사 생성자와 비슷하게 값에 복사를 수행한다. 생성자와 마찬가지로 따로 선언하지 않을 경우 default로 얕은 복사를 하는 대입 연산자를 컴파일러가 자동으로 만들어서 삽입한다. 다음은 예제를 통해서 대입 연산자를 구현하는 방식에 대해서 알아보도록 하자. i.e.class TClass{public:TClass& operator = (const TClass& target) {if (this != &target) {//복사 수행}return *this;}} 대입 연산자는 TClass& 로 reference 형을 return 한다. 이는 cls = cls2 = cls3; 처럼 연속으로 대입 연산자를 수행가능 하도록 만들기 위해서 그렇게 한 것이다..

C++/C++ 기본 2018.07.28

묵시적 복사 생성

묵시적 복사 생성 C++의 복사 생성자가 묵시적으로 호출되며 객체가 복사되는 경우를 묵시적 복사 생성이라고 한다. 묵시적인 복사 생성의 경우는 다음 3가지로서, 컴파일러가 복사 생성자를 자동으로 호출하는 경우이다. 1. 객체로 초기화하여 객체가 생성될 때 다음은 son 객체를 생성할 때 father 객체로 초기화하도록 하는 선언문이다. ==> Person son = father; //복사 생성자 자동 호출 컴파일러는 위의 문장을 다음과 같이 변환하여 복사 생성자를 호출한다. ==> Person son(father); 위의 과정을 다음의 치환문과 혼돈하지 마라. i.e.Person son;son = father; //복사 생성자 호출되지 않음 위의 경우는 복사 생성자가 아니라 대입 연산자(혹은 대입 함수)..

C++/C++ 기본 2018.07.28