분류 전체보기 273

C++ 프렌드 개념

C++ 프렌드 1. 프렌드 함수 C++에서는 클래스 외부에 작성된 함수를 클래스 내에 friend 키워드로 선언하여, 클래스의 멤버 함수와 동일한 접근 자격을 부여할 수 있다. 물론, 멤버가 아니기 때문에 상속되지는 않는다. 클래스 내에 friend 키워드로 선언된 외부 함수를 프렌드 함수(friend function)라고 부른다. 프렌드 함수는 마치 클래스의 멤버인 것처럼 멤버 변수와 멤버 함수에 접근할 수 있다. 그렇다면, 프렌드 함수는 왜 필요할까? 프렌드 함수를 클래스의 멤버 함수로 작성하면 되지 않을까? 프로그램을 작성하다보면, 클래스 멤버 함수로는 적합하지 않지만, 클래스의 private, protected 멤버에 접근해야 하는 함수가 생기게 된다. 이러한 함수를 프렌드 함수로 사용하는 것이다..

C++/C++ 기본 2018.08.02

정적 바인딩과 동적 바인딩

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