반응형

SW 2021

C++11 : 구조체에 대해 알아볼까요? (개념 및 예제)

이번 포스팅에서는 C에서의 구조체를 이해하시고 있다는 가정하에 C++ 구조체에 대해 말씀드리겠습니다. 하지만 처음 보신다 해도 잘 이해하실 수 있을 것입니다. #include using namespace std; #define NAME_LEN 20#define SEX_LEN 10#define JOB_LEN 20#define CHARACTER_LEN 20 struct Chulsoo{ char name[NAME_LEN]; char sex[SEX_LEN]; char job[JOB_LEN]; char character[CHARACTER_LEN]; int age; bool marriageStatus; void introduce() { cout

SW/C++ 2019.01.03

C++11 : 람다 함수에 대해 알아볼까요? (개념 및 예제)

람다 함수는 인라인 함수처럼 복잡한 함수 호출 과정을 생략해서 시간을 절약할 수 있을 뿐만 아니라, 코드의 가독성까지 높여줍니다. 람다 함수는 C++11부터 사용할 수 있으면 고급 함수이므로 처음 배울 때는 어려울 수 있으므로 반복 학습이 필요합니다. 먼저 다음 예제를 살펴보겠습니다. 인라인과 람다 함수를 비교하였습니다. 코드가 다소 난해하다면 넘기고 읽으셔도 됩니다. #include using namespace std; class Chulsoo{public: void eat(int steakWeight); inline void eatInline(int steakWeight) { cout

SW/C++ 2019.01.02

C++11 : 인라인 함수에 대해 알아볼까요? (개념 및 예제)

인라인이라는 단어 그대로의 의미는 줄 안쪽을 의미합니다. 실제 인라인 함수의 의미와도 일맥상통합니다. 일반 함수와 호출 과정부터 비교해보며 예제를 통해 알아보겠습니다. 함수 호출은 보통 메모리상의 점프를 이용하며, 여러 가지 상태 정보 등을 저장하고 복원해야 하므로 내부적으로 복잡한 과정을 거칩니다. 인라인 함수를 사용하면 복잡한 함수 호출 과정을 단순하게 대체할 수 있습니다. 인라인 함의 문법은 다음과 같습니다. 일반 함수와 같은 형태이지만 inline 키워드로 시작하는 점이 다릅니다. inline 반환형 함수명(매개변수 목록); 인라인 함수가 앞에서 배운 일반 함수와 어떻게 다른지 다음 예제를 보면서 비교해보겠습니다. #include using namespace std; class Chulsoo{pu..

SW/C++ 2019.01.01

C++11 : 함수 오버로딩에 대해 알아볼까요? (개념 및 예제)

오버로딩은 사전 상에서는 짐을 많이 싣는다는 의미를 가지고 있습니다. 함수 오버로딩은 과연 무슨뜻일까요? 단어의 의미는 함수를 짐처럼 많이 싣는다고 생각할 수 있습니다. A 함수, B 함수, C 함수가 있다고 가정하겠습니다. 여러 함수를 하나의 장소, 즉 하나의 함수 이름에 쌓는 것을 함수 오버로딩이라고 설명할 수 있습니다. 함수 오버로딩은 객체지향의 특징 중 하나인 다형성이라는 개념과 일맥상통합니다. 함수의 다형성이란 하나의 함수를 다양한 형태로 나타내는 것을 의미합니다. 다양한 함수를 결합하는 방식에 대해 알아보겠습니다. #include using namespace std; class Chulsoo{public: void Eat(void); void Eat(int SteakNum); void Eat(..

SW/C++ 2018.12.31

무차별 대입 공격(Brute Force Attack)에 대한 방어 설계

해결 방안에 대한 설계 방어 방법1) 암호는 최소 10자리 이상을 사용.2) 암호에 특수문자를 사용하면 더욱 좋지만 길이가 짧다면 큰 의미가 없다.3) 무차별 공격의 경우 사전 공격을 가하기 때문에 사전 공격에 포함되는 단어들을 사용한 비밀 번호는 더욱 더 취약.4) 사전 공격과 무차별 공격을 동시에 실행하면 단어를 몇 개 조합하는 것도 쉽게 돌파 가능5) 영어의 경우 대문자, 한글의 경우 된소리의 자음을 섞는 방법도 효과적6) 일정 횟수 이상 암호를 잘못 입력할 경우 계정 일시동결7) 브루트 포스의 경우 무조건적으로 마구 대입하는 것이 아니라 비트 순서대로 대입하는 것. 따라서 아스키 코드 상에서 65인 대문자 A로 시작하는 비밀번호와 122인 소문자 z로 시작하는 비밀번호는 돌파당하는 속도가 두 배정..

SW/정보보호 2018.12.30

C++11 : 디폴트 매개변수에 대해 알아볼까요? (Default Argument)

디폴트 매개변수는 말 그대로 기본 매개변수를 의미합니다. 함수를 정의할 때 매개변수를 넣거나 안 넣으면 되지 왜 디폴트 매개변수가 필요할까요? 그러나 실제로 프로그래밍을 하다보면 항상 넣어줘야 하는 값 마저도 귀찮아 지는 날이 옵니다. 프로그래머는 아주 현명하고 게으른 사람들이 만드는 것이라고 교수님의 말씀이 생각납니다. 다음 예제를 살펴보겠습니다. #include using namespace std; class Chulsoo{public: int Eat(int SteakNum);}; int main(void){ Chulsoo chulsoo; chulsoo.Eat(); return 0;} int Chulsoo::Eat(int SteakNum){ cout

SW/C++ 2018.12.30

무차별 대입 공격(Brute Force Attack)에 대한 방어 프로젝트

1. 문제 정의무차별 대입 공격, 즉 브루트 포스 공격은 Encrypted된 암호를 Decrypt하여 암호를 찾아내는 것이 아니라 무차별적으로 암호를 입력하여 비밀 번호를 찾아내는 공격 방법을 의미한다. 이러한 무차별 대입 공격에 대한 예와 해결 방안에 대해서 찾아보고 설계한다. 2. 문제의 실제 사례최근에는 무차별 대입 공격에 대한 방비가 대체적으로 이루어져 있는 경우가 많기 때문에, 브루트 포스 공격은 원시적이고 효율적이지 않으며 쉽게 방어할 수 있는 공격방법으로 알려져 있다. 하지만 아이러니하게도 이 원시적이고 단순한 공격방법은 오히려 그 단순함 때문에 방비가 허술해지면 바로 그 모습을 드러내는데 실제로도 1~2년에 한 번씩 iCloud 해킹을 통한 할리우드 스타들의 사생활 사진 노출 등의 사고가 ..

SW/정보보호 2018.12.29

아두이노 개발 환경을 구축해볼까요?

Arduino 개발환경 구축을 하기 위해서는 Arduino IDE를 먼저 다운로드 해야 합니다. 공식 홈페이지에 들어가서 다운로드를 받아주세요. JUST DOWNLOAD를 선택해주세요. 다운로드 및 압축 해제해주세요. arduino.exe를 실행해서 설치하면 됩니다. 앞으로 포스팅에서는 Arduino MEGA ADK를 기준으로 포스팅할 계획입니다.이제는 아두이노와 컴퓨터를 연결합시다. 아두이노와 전원 케이블을 준비해주세요. 다음과 같은 모양으로 컴퓨터와 연결해주시면 됩니다. PC USB 포트에 삽입해주세요. 연결이 되었다면 자동적으로 드라이버가 설치됩니다.설치됬는지 확인하기 위해서는 제어판에서 장치관리자를 실행해 주세요. 제어판에 하드웨어 및 소리로 들어 갑시다.오른쪽 위에 장치 관리자를 선택합니다. 다..

SW/IoT 2018.12.28

C++11 : 형변환에 대해 알아볼까요?

배열의 포인터 변환배열을 포인터로 변환해 주소 이동만 가지고 효율적으로 배열의 값들을 읽거나 수정할 수 있습니다. ptr 포인터 변수에 arr배열을 대이배 자동으로 포인터 형으로 변환합니다. 다음으로 배열의 두번째 요소 값을 출력하는데, 포인터 변수 ptr의 주소를 한 칸 옮긴 값과 일치함을 알 수 있습니다. 배열의 원리가 기본적으로 포인터와 같으므로 자동으로 형변환이 되는 것입니다. #include using namespace std; int main(){ int i; int arr[10]; for (i = 0; i

SW/C++ 2018.12.26

리눅스 시스템 "파일 입출력"에 대해 알아볼까요?

파일은 읽거나 쓰기 전에 열어야 합니다. 커널은 파일 테이블이라고 하는 프로세스별로 열린 파일 목록을 관리하고 있습니다. 음이 아닌 정수 값인 파일 디스크립터로 인덱싱되어 있습니다. 각 항목은 열린 파일에 대한 정보를 담고 있습니다. 메모리에 복사된 inode를 가리키는 포인터와 각종 메타데이터(파일 위치, 접근 모드 등)가 포함되어 있습니다. 파일 디스크립터는 사용자 영역과 커널 영역 모두에서 프로세스 내의 고유한 식별자로 활용합니다. 파일을 열면 파일 디스크립터가 반환됩니다. 이 파일 디스크립터를 관련 시스템 콜의 첫 번째 인자로 넘겨 (읽기, 쓰기 등) 다양한 연산을 수행하는 것입니다. 파일 디스크립터는 int 자료형입니다. 각 리눅스 프로세스가 열 수 있는 최대 파일 개수는 정해져 있습니다. 파일..

SW/리눅스 2018.12.23

yocto 사용자 레이어 생성과 레시피 커스터마이즈에 대해 알아볼까요?

새로운 레이어 추가새로운 레이어를 생성하기 전에 항상 오픈임베디드 메타데이터 인덱스에 이미 이용가능한 비슷한 레이어가 있는지 확인하는 것이 좋다. 필요한 레이어를 찾을 수없으면 다음 단계로 폴더를 생성한다. $: ./poky/scripts/yocto-layer create newlayer 기본값을 사용하거나 사용자가 지정한 값을 사용할 수도 있다. 생성된 레이어의 예는 다음 그림과 같다. 사용자 레이어를 작업하기 위해 다른 레이어를 추가해야 할 필요가 있을 때 사용하는 중요한 변수는 다음과 같다. layerversion, layerdepends 의존성이 만족되지 않거나, 버전 정보가 맞지 않으면 에러가 나타난다. 레이어에서 메타데이터 추가레이어를 사용하는 논리적인 이유는 비트베이크 데이터베이스에 메타데이..

SW/Yocto 2018.12.20

C++11 : 포인터에 대해 알아볼까요?

포인터는 참조자와 유사하게 주소로 특정 변수나 객체를 참조할 수 있습니다.포인터변수에는 특정 변수의 주솟값이 저장됩니다.참조자와 다른 점은 가리키는 대상이 없을 수 있고 가리키는 대상을 언제든 변경할 수 있습니다.따라서 초기화할 필요도 없겠죠? 변수명 앞에 *를 선언하면 포인터 변수를 지정할 수 있습니다.정수형 변수 value를 선언하고 100으로 값을 초기화합니다.그 다음 pointerValue를 포인터 변수로 선언해 value 변수의 주소 참조 값을 저장합니다. int value = 100;int* pointerValue = &value; 다음의 예제의 결과를 생각해보세요. 그리고 한번 돌려보시고 메모리 주소를 확인해봅시다.이번 포스팅에서는 간단하게 다루겠습니다.이미 좋은 강좌들이 많으니 참고하여 다..

SW/C++ 2018.12.20

C++11 : 참조자와 한정자에 대해 알아볼까요?

참조자의 이해이번 포스팅에서는 변수의 별칭을 만드는 참조자와 포인터에 대해 알아보겠습니다.어떤 변수를 참조자로 선언하려면 다음처럼 주소 연산자(&)를 변수명 앞에 지정합니다. int peter = 185;int &seoul = peter; 이렇게 선언하면 seoul 변수는 int형으로 선언한 peter를 참조하게 되며 peter 변수의 별칭이 됩니다.참고로 cout을 이용해 변수를 그대로 출력하면 값이 출력되고 주소 연산자(&)를 변수명 앞에 붙여서(&변수명) 출력하면 해당 변수의 메모리 주소가 출력됩니다. #include using namespace std; int main(){ using salary = double; salary peter = 100.12; salary &sangwon = peter..

SW/C++ 2018.12.18

C++11 : 변수와 자료형에 대해 알아볼까요?

변수이름을 지을 때 일반적으로 지켜야 할 사항1. 의미를 파악할 수 있도록 식별할 수 있는 단어로 구성2. 일반적으로 소문자로 구성클래스 이름은 일반적으로 대문자로 시작3. 숫자는 변수 이름의 첫 글자로 사용할 수 없음4. 여러 단어를 조합할 때는 일관성 있는 규칙을 적용할 것5. 예약어는 변수 이름으로 사용할 수 없음 c++ 기본자료형C++11 표준 문서에 정리된 기본 자료형은 아래 표와 같습니다.데이터를 담을 수 있는 최소 크기를 비트 단위로 명시하고 있는데요.실제 크기는 운영체제나 cpu에 따라 달라질 수 있습니다.최대 크기는 달라질 수 있으나 최소 크기는 준수할 수 있도록 컴파일러에게 기준을 제시합니다. 자료형 의미 최소크기 short 짧은 정수 16bit int 정수 16bit long 긴 정수..

SW/C++ 2018.12.18

C++11 : 표준입출력에 대해 알아볼까요?

컴퓨터 장치는 외부 장치와 소통해야 합니다. 따라서 입력과 출력 인터페이스를 제공합니다. 컴퓨터 장치는 키보드 입력과 모니터 출력을 주요 입출력 인터페이스로 사용하고 있습니다. C++에서는 다른 프로그래밍 언어와 마찬가지로 입출력을 쉽게 할 수 있는 클래스 라이브러리를 제공하며 기본 기능으로 std 표준 라이브러리에 포함했습니다. 뿐만 아니라 파일에 읽고 쓰는 것도 중요한 입출력 인터페이스입니다. 우리는 개발을 하면서 설정 파일을 쓰며 동적으로 읽고 변경된 사항을 반영하기 때문입니다. 입출력의 시작 C++은 scanf()와 printf() 함수 대신 cin, cout 클래스를 제공합니다. 가능하면 C++에서는 scanf()와 printf() 함수를 사용하지 맙시다. 키보드와 모니터 입출력을 위한 헤더와 ..

SW/C++ 2018.12.17

[ C++ ] namespace에 대해 알아볼까요?

C++ 공부를 하면 namespace라는 문법을 자연스럽게 접합니다.하지만 정확한 의미를 모르고 using namespace std 라고 입력할 뿐입니다.화면에 자열을 출력할 때 필요한 규칙 정도로 생각하고는 합니다. 네임스페이스는 지정한 라이브러리를 사용할 수 있도록 소속을 알리는 역할을 합니다. using namespace std using 키워드로 std 라이브러리에 포함된 내용들을 사용할 것이라고 선언합니다. 따로 소속을 알리지 않아도 사용할 멤버가 std 라이브러리에 포함된 것으로 간주하게 됩니다. 만약 using 키워드로 네임스페이스를 지정하지 않고 cout을 활용한다면 어떻게 될까요?std::cout 처럼 std 라이브러리에 포함된 멤버임을 알려주어야 합니다. 다음은 네임스페이스를 활용한 간..

SW/C++ 2018.12.15

yocto GPL 규정 준수와 커스텀 임베디드 리눅스 부팅에 대해 알아볼까요?

카피레프트카피레프트는 권리를 최대한 활용하고 자유롭게 표현하기 위해 저작권을 사용하는 합법적 방법이다. 오픈소스와 무료 소프트웨어 라이선스를 다루는 것은 기업에 큰 영향을 미치기 때문에 매우 중요하다. 리눅스 배포판을 빌드할 때, 최소한 두가지 프로젝트가 사용된다. 요즘 가장 흔히 사용되는 컴파일러는 gcc다. 리눅스 커널은 GPLv2 라이선스로 릴리스 되고, GCC는 프로젝트에 사용되는 것에 의존적이며 GPLv2, GPLv2.1, GPLv3 라이선스를 가지고 릴리스 되었다. 카피레프트 규약과 상용화 코드의 비교상용화 코드와 카피레프트 코드가 같은 프로젝트에 동시에 존재할 수 있다는 것을 아는 것이 중요하다. 일부가 라이선스 호환 문제를 가지고 있기 떄문에, 코드와 함께 링크하는 라이브러리들을 주의 깊게..

SW/Yocto 2018.12.14
반응형