분류 전체보기 252

ESP32 블루투스 모듈 사용 시 컴파일 오류

Arduino IDE를 사용해서 ESP32 보드용 프로그램을 컴파일하고 업로드하려고 할 때, 메모리 사이즈의 문제로 컴파일 오류가 나는 경우가 있다. 특히, 블루투스 모듈을 사용할 경우 이러한 문제가 더 자주 나타나게 된다. 컴파일 오류 메세지를 보게되면 예상 사용 메모리가 허용된 메모리의 크기보다 더 크기 때문에 컴파일 및 업로드가 불가능하다는 것이다. Github의 esp32 관련 repository의 issue를 확인해보니, 그 이유가 BLEDevice 객체가 메모리 사용량이 생각보다 커서 생기는 문제라는 것이다. 이에 대한 해결책으로는 esp32 보드의 파티션을 바꿈으로써 블루투스 모듈을 사용할 수 있게 만드는 것이다. 이 문제와 관련된 github issue 페이지에 대한 링크를 아래에 첨부해 ..

IoT 2019.06.30

Bluetooth Low Energy(BLE)란?

1. BLE란? 스마트폰이 출시되어 대중화가 될 무렵, ‘스마트’한 개념의 밴드, 워치, 글래스 등이 출시되면서 웨어러블 디바이스 시장이 태동하기 시작했다. 그리고, 2015년 상반기, 애플워치의 등장으로 작은 생태계를 이루고 있던 웨어러블 디바이스들이 다시 한번 각광을 받게 되었다. 각기 생긴 모습은 다르지만 이들의 공통점은 스마트폰과 연동되어 작동한다는 것이었다. 과거부터 기기들간의 단거리 무선통신은 Bluetooth라는 기술이 이용되었다. Bluetooth가 공식적으로 등장한지 약 16년이라는 세월이 흘렀지만, 여전히 기기간의 무선통신에는 Bluetooth가 사용된다. 하지만, 지금 사용되는 Bluetooth는 기존과는 다른 방식이다. 바로 BLE라는 특징을 가진 Bluetooth인데, 바로 이것이..

네트워크 2019.06.30

구글 프로토콜 버퍼

1. 개요 및 특징 프로토토콜 버퍼는 구글에서 개발하고 오픈소스로 공개한, 직렬화 데이타 구조 (Serialized Data Structure)이다. C++,C#, Go, Java, Python, Object C, Javascript, Ruby 등 다양한 언어를 지원하며 특히 직렬화 속도가 빠르고 직렬화된 파일의 크기도 작아서 Apache Avro 파일 포맷과 함께 많이 사용된다. (직렬화란 데이타를 파일로 저장하거나 또는 네트워크로 전송하기 위하여 바이너리 스트림 형태로 저장하는 행위이다.) 특히 GRPC 라는 네트워크 프로토콜의 경우 HTTP 2.0 을 기반으로 하면서, 메세지를 이 프로토콜 버퍼를 이용하여 직렬화하기 때문에, 프로토콜 버퍼를 이해해놓으면 GRPC를 습득하는 것이 상대적으로 쉽다. 프..

네트워크 2019.06.25

가상 함수와 추상 클래스

가상 함수와 추상 클래스 1. 상속 관계에서의 함수 중복 파생 클래스에 기본 클래스와 동일한 형식의 함수가 중복 작성된 경우, 기본 클래스에 대한 포인터로는 기본 클래스에 선언된 함수를 호출하고, 파생 클래스에 대한 포인터로는 파생 클래스에 선언된 함수를 호출한다. 2. 가상 함수와 오버라이딩 - 가상 함수(virtual function)란 virtual 키워드로 선언된 멤버 함수 컴파일러에게 자신에 대한 호출을 실행 시간까지 미루도록 지시한다. - 파생 클래스에서 기본 클래스에 선언된 가상 함수와 완전히 동일한 타입의 함수를 재정의하는 것을 함수 오버라이딩 혹은 함수 재정의라고 한다. - 파생 클래스에서 가상 함수를 오버라이딩하고 기본 클래스의 포인터로 파생 클래스의 객체를 가리킬 때, 가상 함수를 호..

C++/C++ 기본 2019.01.21

bind()와 화살표 함수 (arrow function)

bind()와 화살표 함수 (arrow function) 리액트에서도 마찬가지겠지만, 리엑트 네이티브에서 컴포넌트에 이벤트 리스너를 추가할 때 (예를 들면 TouchableOpacity의 onPress에 이벤트 리스너를 추가할 때) 흔히 bind()와 화살표 함수를 사용한다. 예를 들어, 버튼을 누르면 "generateList('product')"가 실행되도록 만들고 싶다면 다음과 같은 2 가지 방법으로 구현할 수 있다. 1) bind() Product 2) 화살표 함수 (arrow function) this.generateList('product')}> Product 두 방법 모두 렌더링 시에 함수를 실행시키지 않고, 함수 자체를 리턴시켜서 이벤트 리스너로서 장착시키지만, 한 가지 차이점이 있다. 화살..

c++ 상속

상속 1. 상속의 개념 - 객체 지향 언어에서 말하는 상속은 부모의 유전자가 자식에게 물려지는 것과 같다 - 중복된 기능을 가진 여러 클래스들을 상속 관계로 설정하면 클래스를 간소화할 수 있다 - 상속은 클래스들을 계층적으로 분류하여 관리를 용이하게 한다 - 자식 클래스는 부모 클래스의 메소드와 멤버 변수들(private 접근 지정자 제외)을 상속 받는다. - 상속은 부모 클래스의 재사용을 통해 소프트웨어 생산성을 향상시킨다 - 부모 클래스를 기본 클래스 (base class), 자식 클래스를 (derived class)라고 한다 2. 클래스 상속과 객체 - c++에서 파생 클래스(자식 클래스)는 다음과 같이 선언한다. class Derived : public Base {// Base 클래스를 상속받는 ..

C++/C++ 기본 2019.01.09

연산자 함수는 멤버 함수나 프렌드 함수 중 어떤 것이 바람직한가?

연산자 함수는 멤버 함수나 프렌드 함수 중 어떤 것이 바람직한가? 알다시피, c++에서는 연산자를 오버라이딩(overriding)할 수가 있다. 이 때, 오버라이딩을 하는 방법에는 다음과 같은 2가지 방법이 존재한다: 1) 멤버 함수로서 오버라이딩한다.2) friend 키워드를 이용해서 외부 함수를 통해서 오버라이딩한다. 최선의 방법은 역시 멤버 함수로서 오버라이딩하는 것이다. 새로운 연산자는 클래스와 연계하여 작동하기 때문에 클래스의 멤버로 선언하면 외부의 연산자 함수를 friend로 취할 필요도 없고, 프로그램의 가독성도 높아지기 때문이다. 물론, 가끔씩 연산자를 외부 함수로 밖에 만들 수 없는 경우들이 있는데, 이러한 경우에만 예외적으로 friend 키워드를 이용해서 오버라이딩 하는 것이 좋다.

C++/C++ 기본 2019.01.01

CPU 스케줄링

CPU 스케줄링 CPU 스케줄링은 다중 프로그램 운영체제의 기본이다. 운영체제는 CPU를 프로세스들 사이에서 교환함으로써 컴퓨터를 보다 생산적으로 만든다. CPU 스케줄러는 다양한 프로세스들과 각 프로세스의 스레드들이 CPU를 할당받을 수 있게 해주는 역할을 한다. 모든 프로세스는 실행되기 전에 스케줄링 되기 때문에, 이 CPU 스케줄링은 운영체제의 핵심이라고 할 수 있다. 1. CPU 입/출력 버스트 사이클(CPU I/O Burst Cycle) 프로세스 실행은 CPU 실행과 입/출력 대기의 사이클로 구성된다. 프로세스들은 이들 두 상태 사이를 교대로 이동 한다. 프로세스 실행은 CPU 버스트(Burst)로 시작된다. 뒤이어 입/출력 버스트가 발생하고 그 뒤를 이어 또 다른 CPU 버스트가 발생하며 이어..

스레드

스레드 (Thread) 스레드라고 하는 것은 프로그램 내부에 흐르는 맥, 흐름이라고 한다. 우리가 상위 언어 예를 들어 자바나 C로 프로그램을 작성할 때 메인 함수를 통해 각종 표현식이 돌아 프로그램이 끝이 나는 것을 “맥이 흐른다.”라고 한다. 기본적으로는 한 프로그램에 맥이 하나 흐른다. 하지만 한 프로그램에 2개 이상의 맥이 흐를 수 있는데 이것을 다중 스레드(Multi Thread)라고 한다. 하지만 다중 스레드는 실제로 맥이 빠른 시간 간격으로 스위칭을 진행하는 것이 여러 가지 맥이 동시에 진행되는 것이 아니다. 시간 간격이 매우 짧아 동시에 맥이 흐르는 것처럼 보이는 것이다. 현재 대부분의 프로그램은 다중 스레드이다. 예를 들어, 웹 브라우저를 들면 화면을 출력을 시켜주는 프로그램 스레드가 있..

메시지 전달 시스템(Message-Passing System)

메시지 전달 시스템 (Message-Passing System) 메시지 전달 시스템 방식은 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그들의 동작을 동기화할 수 있도록 허용하는 기법을 제공한다. 메시지 전달방식은 통신하는 프로세스들이 네트워크에 의해 연결된 다른 컴퓨터들에 존재할 수 있는 분산 환경에서 특히 유용하다. 메시지 전달 시스템은 최소한 두 가지 연산(send와 receive)을 제공한다. 프로세스가 보낸 메시지는 고정 길이일 수도 있고 가변 길이일 수도 있다. 고정 길이 메시지만 보낼 수 있다면, 시스템 수준의 구현은 간단하다. 그렇지만, 이러한 제한은 프로그래밍 작업을 더욱 힘들게 한다. 반면에, 가변 길이 메시지는 보다 복잡한 시스템 수준의 구현을 필요로 하지만, 프로그..