프로그래밍 시작하기
저자: 박혜웅
이 문서는 김성연씨의 강좌의 내용에 기초하여 수정되었음을 알립니다.
1. 프로그램 개발론의 발전
개발론은 절차지향 개발론(=구조지향론) 에서 객체지향 개발론으로 발전하였다.
(1) 절차지향 개발론
DOS 시절의 명령 처리방법과 같이 순차적으로 명령들을 처리하는 방식이다.
효율성을 높이기 위해 함수와 , 구조체가 사용된다.
(2) 객체지향 개발론 (OOP)
절차지향 개발론으로는 대규모의 프로젝트를 감당할 수가 없어 생겨났다.
알고리즘과 데이타가 연관성을 갖고 있음을 착안하여
연관성있는 알고리즘(메소드)와 데이타(멤버변수)를 하나의 객체를 통해 구현하는 방식이다.
2. 프로그램
프로그램은 데이타와 알고리즘으로 이루어져 있다.
알고리즘은 명령들의 조합인데 가장 중요한 명령은 제어문이다.
(1) 알고리즘
제어문은 조건문과 반복문으로 이루어져있는데 각각 다음과 같은 순서로 발전했다.
조건문은 if -> if else -> switch 의 순서로 발전하였다.
반복문은 while -> do while -> for 의 순서로 발전하였다.
같은 알고리즘의 반복을 [함수] 로서 효율성을 높일 수 있다.
(2) 데이타(기본형)
대부분의 언어가 지원하는 기본자료형은 다음과 같다.
① bool (1 byte)
② int (4 byte), char (1 byte)
③ float(4 byte), double( 8 byte)
char형은 unsigned int 형이 1byte 크기로 사용되는 형태이다.
저장시에는 ACSII 코드를 이용하며, 그 값이 0 일 경우에는 NULL 을 의미한다.
(문자배열일 경우에 문자열을 끝을 의미함)
(3) 데이타(확장형)
① pointer 형 (4 byte)
데이타자체를 저장하는 변수가 아니라, 데이타가 저장된 주소값만을 저장한다.
포인터형은 메모리에서의 주소를 나타내며, 2의 32승(약 40억) 개의 주소값을 표시할수 있다.
1byte 단위로 40억개라고 가정하면 약 4 GByte의 메모리를 사용할 수 있는 것이다.
포인터형의 값을 저장할 때는 크기가 같은 다음과 같은 자료형도 사용가능하다.
WORD는 unsigned short int(2byte) 이며 예전 운영체제(16bit)에서 포인터형이 2byte 일때 사용했다.
DWORD는 unsigned long int(2byte) 이며 현재 운영체제(32bit)에서 포인터형이 4byte 일때 사용한다.
② 배열
같은 자료형의 묶음이다
연속된 자료를 연속된 공간안에 하나의 변수명으로 선언하여 사용하는 방식이다.
같은 자료형의 변수들은 일일히 선언한다면, 100번을 선언해야 하지만 배열을 이용하면 1번만 선언하면 된다.
int a[10] 으로 선언했을 경우 int형 * 10개의 공간을 사용한다.
[]안의 숫자는 0~9까지 사용가능하며, 숫자가 2일 경우 의미하는 것은 " a[0]이 있는 주소값 + (int형*2) "한 곳의 데이타값이다.
[]안의 숫자를 배열이 선언된 범위 밖에서 사용하면(위의 예에서 0보다작거나 10이상이면) 잘못된 곳을 참조하게 되어
의도한대로 데이타를 사용할 수 없다.
배열은 포인터와 밀접한 관계를 갖으며 특히 문자열(char형의 배열)에서 그 성질을 크게 나타낸다.
보통 문자열을 char형의 배열로 사용하며 이는 char* 를 사용하는 것과 매우비슷하다.
( 단, char* 형을 사용할때는 그 끝을 NULL 문자에 의해 일임한다. 크기를 알수 없는 문자열일 경우 char*를 사용하면된다. )
예를 들어
char[5] ch= "abcd"; 는
char* ch = "abcd"; 와 같으며
char[5] ch= {'a','b','c','d',''};
char* ch= {'a','b','c','d',''};
와 모두 동일하다.
즉 ch[0]='a', ch[1]='b', ... 이런식으로 각 데이타를 입력한 것과 같다.
③ 구조체
다른 자료형의 묶음이다.
배열과 비교하면 다른 자료형을 묶을 방법이 필요하게 되어 생겨난 자료형이다.
(3) 데이타(동적할당)
프로그램이 실행되면 프로그램과 전역변수, 지역변수, 동적변수 는 각각 TEXT, 스택, 힙에 로딩된다.
C 에서는 malloc 을 이용하여 동적메모리를 할당하며, C++에서는 new 를 통하여 메모리를 할당한다.
해제할때에는 C에서는 free를 이용하며 C++에서는 delete를 이용한다.
메모리의 해제라는 것은 포인터변수를 없애는 것이 아니라, 힙영역에 할당된 데이터를 삭제하고
포인터가 가리키는 곳을 NULL로 초기화 한다.
프로그램에서의 메모리 누수나 메모리 오류(뻑났다고 하여 다운되는 현상) 는 동적 메모리의 사용에
따른 오류이다.
지역변수는 스택영역에 할당되며, 사용후 유효영역을 벗어나면 (C++에서 중괄호밖) 자동적으로 해제된다.
프로그램과 전역변수는 TEXT영역에 할당되며, 프로그램이 종료하면 자동적으로 해제된다.
그러나 힙영역에 할당된 동적변수는 프로그램이 해제하지 않으면 자동적으로 해제 되지 않는다.
따라서 동적메모리를 할당후에 해제하지 않으면 메모리 누수가 발생하게 된다.
또한 동적메모리를 사용하고 해제한 후, 다시 해제하려고 하면
할당된 동적메모리가 없는 주소에 잘못된 포인터를 참조하게 되어 메모리 오류가 발생하게 된다.
---------------------------------------
프로그래밍의 일반적인 난이도
웹(저) < 클라이언트 < 서버 (고)
윈도(저) < 유닉스(고)
프레임(저) < 통신 모듈(고)
---------------------------------------
저자: 박혜웅
이 문서는 김성연씨의 강좌의 내용에 기초하여 수정되었음을 알립니다.
1. 프로그램 개발론의 발전
개발론은 절차지향 개발론(=구조지향론) 에서 객체지향 개발론으로 발전하였다.
(1) 절차지향 개발론
DOS 시절의 명령 처리방법과 같이 순차적으로 명령들을 처리하는 방식이다.
효율성을 높이기 위해 함수와 , 구조체가 사용된다.
(2) 객체지향 개발론 (OOP)
절차지향 개발론으로는 대규모의 프로젝트를 감당할 수가 없어 생겨났다.
알고리즘과 데이타가 연관성을 갖고 있음을 착안하여
연관성있는 알고리즘(메소드)와 데이타(멤버변수)를 하나의 객체를 통해 구현하는 방식이다.
2. 프로그램
프로그램은 데이타와 알고리즘으로 이루어져 있다.
알고리즘은 명령들의 조합인데 가장 중요한 명령은 제어문이다.
(1) 알고리즘
제어문은 조건문과 반복문으로 이루어져있는데 각각 다음과 같은 순서로 발전했다.
조건문은 if -> if else -> switch 의 순서로 발전하였다.
반복문은 while -> do while -> for 의 순서로 발전하였다.
같은 알고리즘의 반복을 [함수] 로서 효율성을 높일 수 있다.
(2) 데이타(기본형)
대부분의 언어가 지원하는 기본자료형은 다음과 같다.
① bool (1 byte)
② int (4 byte), char (1 byte)
③ float(4 byte), double( 8 byte)
char형은 unsigned int 형이 1byte 크기로 사용되는 형태이다.
저장시에는 ACSII 코드를 이용하며, 그 값이 0 일 경우에는 NULL 을 의미한다.
(문자배열일 경우에 문자열을 끝을 의미함)
(3) 데이타(확장형)
① pointer 형 (4 byte)
데이타자체를 저장하는 변수가 아니라, 데이타가 저장된 주소값만을 저장한다.
포인터형은 메모리에서의 주소를 나타내며, 2의 32승(약 40억) 개의 주소값을 표시할수 있다.
1byte 단위로 40억개라고 가정하면 약 4 GByte의 메모리를 사용할 수 있는 것이다.
포인터형의 값을 저장할 때는 크기가 같은 다음과 같은 자료형도 사용가능하다.
WORD는 unsigned short int(2byte) 이며 예전 운영체제(16bit)에서 포인터형이 2byte 일때 사용했다.
DWORD는 unsigned long int(2byte) 이며 현재 운영체제(32bit)에서 포인터형이 4byte 일때 사용한다.
② 배열
같은 자료형의 묶음이다
연속된 자료를 연속된 공간안에 하나의 변수명으로 선언하여 사용하는 방식이다.
같은 자료형의 변수들은 일일히 선언한다면, 100번을 선언해야 하지만 배열을 이용하면 1번만 선언하면 된다.
int a[10] 으로 선언했을 경우 int형 * 10개의 공간을 사용한다.
[]안의 숫자는 0~9까지 사용가능하며, 숫자가 2일 경우 의미하는 것은 " a[0]이 있는 주소값 + (int형*2) "한 곳의 데이타값이다.
[]안의 숫자를 배열이 선언된 범위 밖에서 사용하면(위의 예에서 0보다작거나 10이상이면) 잘못된 곳을 참조하게 되어
의도한대로 데이타를 사용할 수 없다.
배열은 포인터와 밀접한 관계를 갖으며 특히 문자열(char형의 배열)에서 그 성질을 크게 나타낸다.
보통 문자열을 char형의 배열로 사용하며 이는 char* 를 사용하는 것과 매우비슷하다.
( 단, char* 형을 사용할때는 그 끝을 NULL 문자에 의해 일임한다. 크기를 알수 없는 문자열일 경우 char*를 사용하면된다. )
예를 들어
char[5] ch= "abcd"; 는
char* ch = "abcd"; 와 같으며
char[5] ch= {'a','b','c','d',''};
char* ch= {'a','b','c','d',''};
와 모두 동일하다.
즉 ch[0]='a', ch[1]='b', ... 이런식으로 각 데이타를 입력한 것과 같다.
③ 구조체
다른 자료형의 묶음이다.
배열과 비교하면 다른 자료형을 묶을 방법이 필요하게 되어 생겨난 자료형이다.
(3) 데이타(동적할당)
프로그램이 실행되면 프로그램과 전역변수, 지역변수, 동적변수 는 각각 TEXT, 스택, 힙에 로딩된다.
C 에서는 malloc 을 이용하여 동적메모리를 할당하며, C++에서는 new 를 통하여 메모리를 할당한다.
해제할때에는 C에서는 free를 이용하며 C++에서는 delete를 이용한다.
메모리의 해제라는 것은 포인터변수를 없애는 것이 아니라, 힙영역에 할당된 데이터를 삭제하고
포인터가 가리키는 곳을 NULL로 초기화 한다.
프로그램에서의 메모리 누수나 메모리 오류(뻑났다고 하여 다운되는 현상) 는 동적 메모리의 사용에
따른 오류이다.
지역변수는 스택영역에 할당되며, 사용후 유효영역을 벗어나면 (C++에서 중괄호밖) 자동적으로 해제된다.
프로그램과 전역변수는 TEXT영역에 할당되며, 프로그램이 종료하면 자동적으로 해제된다.
그러나 힙영역에 할당된 동적변수는 프로그램이 해제하지 않으면 자동적으로 해제 되지 않는다.
따라서 동적메모리를 할당후에 해제하지 않으면 메모리 누수가 발생하게 된다.
또한 동적메모리를 사용하고 해제한 후, 다시 해제하려고 하면
할당된 동적메모리가 없는 주소에 잘못된 포인터를 참조하게 되어 메모리 오류가 발생하게 된다.
---------------------------------------
프로그래밍의 일반적인 난이도
웹(저) < 클라이언트 < 서버 (고)
윈도(저) < 유닉스(고)
프레임(저) < 통신 모듈(고)
---------------------------------------