전체 글 779

[ C ] 10. 함수와 포인터

[ 함수와 포인터 ] void 포인터 매개변수 사용하기 void 포인터 매개변수를 사용하면 자료형 변환을 하지 않아도 모든 자료형을 함수에 넣을 수 있다. 이번에는 char, int, float형을 매개변수로 받아서 값을 서로 바꿔보겠다. #include enum TYPE { TYPE_CHAR, TYPE_INT, TYPE_FLOAT }; void swapValue(void *ptr1, void *ptr2, enum TYPE t){ switch(t){ case TYPE_CHAR:{ // 문자면 char *로 변환한 뒤 역참조하여 값을 서로 바꿈 char temp; temp = *(char *)ptr1; *(char *)ptr1 = *(char *)ptr2; *(char *)ptr2 = temp; break..

[ C ] 09. 전처리기 ( if, ifdef, elif, ifndef, define, endif )

[ 전처리기 ] 일반적인 if조건문과의 차이는 일반 if조건문이 FALSE일 경우, 실행이 되지 않을 뿐 컴파일은 된다면, #if가 0이라면 컴파일 자체가 되지않는다. #include int main(){ if(0){ printf("실행되지는 않지만 컴파일은 됨\n"); } #if 0 printf("컴파일 자체가 안됨\n"); #endif return 0; } => 전처리기의 특성을 이용한 것이다. 전처리기는 실제 컴파일이 수행되기 전에 실행되어 소스에 치환되는 데 #if가 0일 경우에는 소스에 삽입 되지 않는다. 즉 #if는 if와 다르게 조건에 따라 소스코드를 삽입하거나 삭제하기 위해 사용되는 지시자이다. #include #define NUM -3 int main(){ #if NUM printf("i..

[ C ] 08. 구조체

[ 구조체 ] 구조체는 struct 키워드로 정의한다. struct 구조체이름{ 자료형 멤버이름; ... }; // 구조체는 정의만 해서 사용할 수가 없다. 구조체도 변수로 선언해서 사용한다. struct 구조체이름 변수이름; ex. #define _CRT_SECURE_NO_WARNINGS // strcpy 보안 경고로 인한 컴파일 에러 방지 #include #include // strcpy 함수가 선언된 헤더 파일 struct Person{ // 구조체 정의 char name[20]; // 구조체 멤버 1 int age; // 구조체 멤버 2 char address[100]; // 구조체 멤버 3 } int main(){ struct Person p1; // 구조체 변수 선언 // 점으로 구조체 멤버에..

[ C ] 07. 열거형

[ 열거형 ] 열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다. 만약 여러개 정수형 상수를 선언한다면 두세 개까지는 괜찮지만 개수가 많아지면 귀찮아 질 것이다. 열거형을 사용하면 정수형 상수를 좀 더 편하게 정의할 수 있다. enum 열거형이름{ value1 = 초깃값, value2, value3 }; 열거형은 정의로만 사용이 안되고 변수로 선언해서 사용해야 한다. enum 열거형이름 변수이름; #include enum DayOfWeek{ // 열거형 정의 Sunday = 0; // 초깃값 할당 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; int main(){ enum DayOfWeek week; // 열거형 변수 선언 week ..

[ C ] 06. 포인터연산

[ 포인터연산 ] 포인터로 선언한 변수에는 메모리 주소가 들어있다. 이 포인터 변수에서 연산을 할 수 있다. 마찬가지로 메모리 주소에 일정 숫자를 더하거나 빼면 메모리 주소가 증가,감소 한다. 즉, 포인터 연산을 하면 다른 메모리 주소에 접근할 수 있으며 메모리 주소를 손쉽게 옮겨 다니기 위해서 사용한다. 여기서 메모리 주소가 커지는 상황을 순방향 이동(forward), 메모리 주소가 작아지는 상황을 역방향이동(backward)라 하겠다. 포인터연산으로 메모리 주소 조작하기 #include int main(){ int numArr[5] = { 11, 22, 33, 44, 55 }; int *numPtrA; int *numPtrB; int *numPtrC; numPtrA = numArr; // 배열 첫 번..

[ C ] 05. 메모리와 포인터의 사용

[ 메모리와 포인터의 사용 ] #include #include // malloc, free 함수 int main(){ int *numPtr; // int형 포인터 선언 numPtr = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당 *numPtr = 10; // ****포인터를 역참조 한뒤 값 할당**** printf("%d\n", *numPtr); // 10 , 포인터를 역참조하여 메모리에 저장된 값 출력 free(numPtr); // 동적 메모리 해제 return 0; } malloc함수에 실제로 값을 저장할 때는 시스템의 한계(RAM, 디스크)이상 저장할 수 없다. 메모리 내용을 한꺼번에 설정하기(memset) memset함수를 사용하면 메모리의 내용을 원하는..

[ C ] 04. 포인터의 형변환

[ 포인터의 형변환 ] #include #incldue // malloc, free 함수가 선언된 헤더파일 int main(){ int *numPtr = malloc(sizeof(int)); // 4바이트만큼 메모리 할당 char *cPtr; *numPtr = 0x12345678; cPtr = (char *)numPtr; // int 포인터 numPtr을 char 포인터로 변환. 메모리 주소만 저장됨 printf("0x%x\n", *cPtr); // 0x78 : 낮은 자릿수 1바이트를 가져오므로 0x78 free(numPtr); // 동적메모리 해제 return 0; } # 실행 결과 0x78 numPtr에 메모리를 할당하고 역참조하여 0x12345678을 저장했다. 그리고 cPtr = (char *)n..

[ C ] 03. 포인터와 역참조 연산자

[ 포인터와 역참조 연산자 ] 포인터 변수에는 메모리 주소가 저장되어 있다. 이 때 메모리 주소가 있는 곳으로 이동해서 값을 가져오고 싶다면 역참조 연산자 *를 이용한다. #include int main(){ int *numPtr; // 포인터 변수 선언 int num1 = 10; // 정수형 변수를 선언하고 10 저장 numPtr = &num1; // num1의 메모리 주소를 포인터 변수에 저장 printf("%d\n", *numPtr); // 10 // 역참조 연산자로 num1의 메모리 주소에 접근하여 값을 가져온다 return 0; } # 실행 결과 10 역참조 연산자 *는 포인터 앞에 붙인다. 다음과 같이 numPtr 앞에 *를 붙이면 numPtr에 저장된 메모리 주소로 가서 값을 가져온다. 여기..

[ C ] 02. 문자열 관련 자주 쓰이는 함수

[ atoi, atof, atol ] 1. atoi, atof, atol 함수의 기원 atoi 함수를 살펴보면 a - to - i 이렇게 나눌 수 있다. a=char(AScII), i = int atoi (char to int) = 문자열을 정수 타입으로 atof (char to double) = 문자열을 실수 타입으로 atol (char to long int) = 문자열을 long 정수 타입으로 중요한 것은 여기서 char는 char[N], char*로 표현이 되는 문자열을 말한다. // ( char * to int )가 더 정확한 표현같음? C++에서는 string클래스에 의해서 문자열을 string으로 표현할 수 있는데, C언어에서는 string클래스가 존재하지 않기 때문에 char배열을 이용하여 ..

[ C ] 01. 동적할당이란?

[ 동적할당 ] 동적할당이라는 것은 프로그램 실행중에 동적으로 메모리를 할당하는 것을 말한다. 여기서 중요한것은 동적으로 메모리를 할당할때 Heap(힙)영역에 할당한다는 것이다. # 함수원형 void* malloc(size_t size) 해당함수를 사용하기 위해서는 헤더파일을 include해야한다. 함수 동작은 매개변수에 해당하는 size_t 만큼의 크기만큼 메모리를 할당하고 성공하면 : 할당한 메모리의 첫 번째 주소 리턴 실패하면 : NULL 리턴 제일 중요한점 !! 할당한 메모리는 꼭 해제해주어야한다.!! 그렇지 않으면 메모리 릭, 메모리 누수가 발생한다. 함수 원형 메모리 할당 void *malloc(size_t size); - 할당받을 메모리 크기를 인자로 받는다 - ex) int * arr = ..

[ C ] 00. 함수 호출방식

[ 함수 호출방식 ] Call-by-value 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.(c++의 경우 stack frame) => 함수가 종료되면 해당 공간은 사라진다. 스택 프레임(Stack Frame) : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록) call-by-value 값에 의한 호출방식은 함수 호출 시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다. 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다. 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않는다.!! 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다. 단..

[ Embedded ] 06. SSD 요약정리

SSD 기본 1. 메모리 셀타입 SSD(Soild state drive)는 플래시 메모리를 기반으로 하는 저장 장치이다. 각 비트들은 셀에 저장되는데, SSD의 셀은 1비트(SLC), 2비트(MLC), 3비트(TLC) 셀 타입이 있다. 2. 수명 제한 각 셀은 최대 가능한 P/E(Program/Erase) cycle을 가지며, 최대 가능한 P/E cycle을 초과하면 결함 셀(Defective cell)로 간주된다. 이는 NAND 플래시 메모리는 언젠가는 Wear-off되고 수명이 제한적이라는 것을 의미한다. 3. 벤치마킹의 어려움 테스트도 결국 사람이 수행하는 것이기 때문에, 모든 벤치마크는 오류나 실수를 담고 있다. 그래서 제조사나 제 삼자에 의한 벤치마킹 결과를 참조할 때는 주의해야 한다. SSD를..

[ 정보처리기사 ] 04. 2020 정보처리기사 3회차 실기 대비 - 화면설계 ( UI 요구사항 확인 )

화면 설계 - UI 요구사항 확인 UI 사용자와 사물 또는 시스템, 컴퓨터 프로그램 등 사이에서 의사소통을 할 수 있도록 만들어진 매개체 HCI 인간과 컴퓨터간의 상호작용에 관한 연구 인간과 컴퓨터가 쉽고 편하게 상호작용할 수 있도록 작동시스템을 디자인하고 평가하는 과정을 다루는 학무 UI수단 입력 : 사용자가 시스템 조작 출력 : 시스템이 사용자가 이용한 것에 대한 결과 표시 UI 종류 GUI : 그래픽과 텍스트로 이루어져 있으며 객체지향 인터페이스와 응요프로그램 지향 인터페이스가 공존 WUI : 인터넷과 웹 브라우저를 통해 웹 페이지를 열람하고 조작하는 인터페이스 CLI : 사용자가 컴퓨터 자판 등을 이용해 명령 문자열을 입력하여 조작하는 인터페이스 TUI : CLI처럼 문자열을 입력하나 GUI처럼 ..

[ 정보처리기사 ] 03. 2020 정보처리기사 3회차 실기 대비 - 요구사항 관리( SW 개발 방법론 선정)

요구사항 관리 - SW 개발 방법론 선정 요구공학 요구사항에 관계되는 모든 활동과 원칙들에 대한 공학적인 접근 즉, 요구사항을 정의, 문서화, 관리하는 프로세스 요구사항 추출-분석-기술-검증-유지보수 요구사항 추출 생명 주기 동안 지속적으로 반복 시스템에 대한 요구사항 수집(개발자관점) 이해관계자 식별, 개발 팀과 고객 사이의 관계 생성 도출기법 : 인터뷰, 설문, 브레인스토밍, 워크샵, 유스케이스, 프로토타이핑 요구사항 분석 무슨 시스템을 구현할 것인가 분석 요구사항 간 상층 해결, 소프트웨어 범위 파악, 호나경과의 상호작용 이해 시스템 요구사항을 정제하여 소프트웨어 요구사항 도출 분석기법 : 요구사항 분류, 개념모델링, 요구사항 할당, 요구사항 협상, 정형분석(수학적 기호 표현) 요구사항 기술(명세화..

[ 정보처리기사 ] 02. 2020 정보처리기사 3회차 실기 대비 - 요구사항 분석모델 확인

요구사항 분석모델 확인 모델링 실세계의 물리현상을 특정한 목적에 맞추어 이용하기 쉬운 형식으로 표현하는 일 개념모델링의 역할 실세계 문제에 대한 모델링이 소프트웨어 요구사항 분석의 핵심 모델은 문제가 발생하는 상황에 대한 이해를 증진시키고 해결책을 설명 개념 모델은 문제 도메인의 Entity들과 그들의 관계 및 종속성을 반영 개념모델의 종류(대부분 UML을 사용) Use case Digram, Data Flow Model, Goal-Based Model, User Interactions, Object Model, Data Model 등 데이터가 시스템에 의해서 어떻게 처리되는지 보여주는 직관적인 방법 ER모델(개체관계도) 개체와 개체간의 관계 도식화 UML 다이어그램의 사용 사용 시나리오를 나타내기 위해..