소프트웨어 공학의 출현 배경 공학은 일반적으로 과학이나 수학을 기초로 구조나 기계, 생상 공정, 시스템 등을 생산에 합리적이고 체계적인 방법으로 적용시키는 학문을 의미한다. 이러한 원리 아래 대두된 소프트웨어 공학은 소프트웨어를 분석, 설계, 개발, 테스트, 유지보스 단계를 거쳐 개발하고 이와 관련된 전반적인 방법론 등을 연구하는 분야이다. 소프트웨어가 발전하지만 그에 따른 사용자의 요구는 더욱 급격히 증가되었고 결과적으로 소프트웨어의 위기를 불러왔다. 공학이 없던 당시 소프트웨어 개발은 개발 예산의 초과와 기간의 지연, 프로그래머 개인의 판단과 역량에 의한 소프트웨어 개발 추친, 소프트웨어 품질 문제 등이 있었고 결과적으로 체계적이고 기술적 검토를 거치지 않은 소프트웨어에 대한 신뢰는 무너졌다. 이러한..
All
시스템 개발 패러다임 4가지 과거 틀이 정해지지 않은 소프트웨어 개발은 이에 위기를 불러왔고 그 결과 소프트웨어 개발 방법론이 등장하게 되었다. 소프트웨어 패러다임으로 우리는 개발에 대한 여러 가지 시각과 관점, 틀을 생각하게 되었고 다양한 생각의 전환으로 목표를 달성하기 위해 필요한 방법, 개발 환경 및 관리에 대한 포괄적인 틀을 고려한 결과 많은 방식 중 대표적인 4가지 방법론이 대두되었다. 폭포수 모델(Waterfall Model) 폭포수 모델은 고전적 라이프 사이클 패러다임이라 불리며 건축과 같은 설계 공학에서 가장 많이 사용되고 있는 기법이다. 소프트웨어 개발에단계적이며 체계적인 순차적 접근법을 사용하여 정의하고 있으며 개념 정립에서 구현까지 하향식 접근 방법을 사용하여 요구사항 분석, 설계같은..
요구사항 명세서와 설계 문서의 차이 요구사항 명세서(Requirements specification)는 요구사항 분석(Requirements Analysis)단계에서 작성되는데 이는 하드웨어나 소프트웨어의 측면부터 시작하여 사용자의 요구사항, 타당성, 비용과 시간 등을 종합적으로 분석하고 이를 산출하여 만들어진 문서이다. 요구사항 명세서는 다른 말로 기능명세서(functional spec..) 또는 목표 문서 (target document)라고도 한다. 반면 설계 문서(design document)는 설계(Design)단계에서 작성되는데 이는 시스템의 안정감과 생명력, 유지 보수에 대한 대비, 품질 향상을 위하여 작성된다. 따라서 요구사항 명세서는 설계 전 소프트웨어 공학에 있어 전반적으로 추상적인 부분..
애플리케이션 서버 애플리케이션 서버(H/W)는 웹 서버와 데이터 베이스 서버 중간에 위치, 웹 애플리케이션 서버(WAS)가 동작하는 하드웨어를 의미한다. 애플리케이션 서버(S/W, WAS와 거의 유사한 의미)는 웹 용 프로그램을 동작시킬 수 있도록 해주는 소프트웨어 플랫폼을 의미한다. 웹 애플리케이션 서버(WAS) 자세히 보기 컴퓨팅 서버 일종의 슈퍼 컴퓨터로, 다양한 분야에서 사용되는 초고속/대용량 컴퓨터를 의미한다. 기존 슈퍼 컴퓨터가 주로 과학 기술 연산 분야를 목적으로 이용되었다면, 현재의 슈퍼 컴퓨터는 군사, 경제, 사회 통계 까지 넓은 분야로 확장되어 가고 있으며, 많은 기업에서 클라우딩 환경 제공을 위해 슈퍼 컴퓨터를 사용하는 경우가 늘어나고 있다. 데이터베이스 서버 정보를 저장하기 위한 서..
MFC란? Microsoft Foundation Class 마이크로 소프트에서 만든 클래스 MFC의 배경 윈도우 프로그래밍은 기본적으로 수많은 API가 사용된다. 이는 다양한 기능을 제공하지만 실제로 코딩을 하는 사람들에게 너무나도 복잡하고 많은 라이브러리로 개발자의 혼란을 불러 일으켰다. 따라서 마이크로소프트에서는 1990년 윈도우 API 함수를 캐슐화하여 라이브러리를 만들었고, 이후 이것은 MFC로 발전되었다. 따라서 MFC는 마이크로소프트에서 API 함수를 각 기능별로 클래스화한 형태로 만든 것이라 할 수 있으며 현재 MFC 라이브러리는 Visual C++에 기본적으로 포함되어 제공된다. MFC 계층도 MFC의 계층 구조를 간단하게 살펴보면 크게 CObject와 CObject에서 파생되지 않은 클래..
참조자 (Reference) – 변수에 또 하나의 이름 지정 – 변수 앞에 & 연산자를 사용하여 선언 int A = 10; int &ReferenceA = A; 사용 목적 참조자를 사용한 Call by reference 호출 가능 (ex. swap 함수) #include using namespace std; void Swap(int& x, int& y) { // 참조자 사용 int temp; temp = x; x = y; y = temp; } void main() { int a = 100, b = 1; Swap(a, b); // int &x = a, int &y = b와 동일 cout
포인터와 주소 포인터 메모리의 주소 값을 담고 있는 변수 또는 상수 데이터 위치를 가리키는 변수 주소 메모리 저장된 위치(번지) & 연산자를 사용하면 특정 변수의 주소를 반환 단항 간접 참조 연산자 #include void main() { int a; int *pa; a=10; pa=&a; printf("a: %d\n", a); // 10 *a=100; printf("a: %d\n", a); // 100 } 더블 포인터 #include void main() { int A = 50, B = 100; int* pA = &A; int** dpA = &pA; /* Test 1 */ printf("pA : %d\n", *pA); // 50 printf("dpA : %d\n\n", **dpA); // 50 /* T..
지역 변수 (Local Variable) – 선언한 지역을 벗어나면 기억 공간에서 자동 소멸 – 지역은 { } 로 구분 #include int main() { int a = 30; { int a = 60; printf(“1. a: %d\n”, a); } printf(“2. a: %d\n”, a); return 0; } 1. a: 60 2. a: 30 정적 변수 (Static Variable) – 정적 변수 사용하면 영역을 벗어나도 메모리 공간에서 소멸하지 않음 – 값 또한 그대로 유지 – 일종의 한번 선언하고 나면 계속 유지되는 변수 – 초기화 하지 않으면 자동으로 0으로 초기화 #include void count() { static int c; c = c + 1; printf(“c: %d\n”, c);..
증상 보안상의 이유로 scanf가 아닌 scanf_s 사용 권장 error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 이 함수 또는 변수는 안전하지 않을 수 있습니다. scanf_s를 대신 사용하는 것이 좋습니다. 사용 중단을 사용하지 않도록 설정하려면 _CRT_SECURE_NO_WARNINGS를 사용합니다. 자세한 내용은 온라인 도움말을 참조하세요 해결 방법 scanf 대신 scanf_s 사용 또는 코드 맨 위에 #define _CRT_SECU..
학습 방법론 Supervised Learning 지도학습은 학습에 필요한 데이터에 클래스 라벨이 이미 붙어 있는 경우이다. 클래스 라벨은 어떤 인스턴스(ex. 사람, 도시, 차, 음식 등)의 데이터가 주어졌을 경우 그 인스턴스가 어느 분류에 속하는지 나타낸다. 클래스는 연속된 값(continuous value) 또는 분리되어 나누어지는 값(discrete)로 분류된다. input feature(데이터의 클래스)를 직접 입력해 주어야 하는 한계가 있다. 예시 인스턴스. 인스턴스: 소리 데이터: 강아지 소리, 아기 울음 소리, 여성 목소리, 자동차 소리, … 클래스: 강아지 소리 클래스, 아기울음 의미 클래스, 자동차 소리 구별 클래스, 등 Unsupervised Learning 위와 같은 클래스가 붙지 않..