** OOP는 필연성을 가지고 등장
* 객체지향 기술에 대한 일반적인 견해
– 현실 세계의 사물을 보는 견해에 따라 소프트웨어를 만드는 전혀 새로운 사고 방식
– 종래의 개발 기술을 바꾸어 놓을 것.
* OOP(필자의 견해)
– 그 이전의 프로그래밍 기술을 기초로 결점을 보완하기 위해서 고안된 것.
* 객체지향 기술
– OOP를 발전, 응용한 것으로 종래부터 있던 우수한 개발 기술의 연장 선상에 있던 것.
– 품질 좋은 프로그램을 높은 생산성으로 만들기 위한 실천적인 기술.
** 초창기에는 기계언어로 프로그램을 작성
* 컴퓨터?
– 2진수로 스여진 기계 언어밖에 해설할 수 없음.
– 1940년대 처음 등장
** 프로그램 언어의 첫걸음은 어셈블리 언어
** 고급 언어의 발명으로 보다 친숙해진 프로그램
* 고급언어
– 컴퓨터가 이해하는 명령어를 하나하나 기술하는 것이 아님
– 보다 사람이 알기 쉬운 “고급스러운” 형식으로 표현
– FORTRAN(1957년), COBOL(1960년)
* 1960년대 말 북대서양조약기구(NATO)
– “소프트웨어 위기” 선언
** 알기 쉬움을 중시하는 구조적 프로그래밍
* 구조적 프로그래밍
– “소프트웨어 위기”에 대응하기 위해 제안된 아이디어
– 기본적인 사상
+ 바르게 동작하는 프로그램을 작성하기 위해서는 알기 쉬운 고조로 하는 것이 중요하다.
– 구체적인 방법
+ GOTO문 폐지
+ 프로그램 논리를 3가지 구조(순차 진행, 조건 분기, 반복)만으로 표현
** 서브루틴의 높은 독립성을 유지보수에 강점
* 서브루틴?
– 1940년대 발명
– 여러 장소에 나타나는 같은 명령의 나열을 한곳에 모음
– 효과
+ 프로그램 사이즈가 작아짐
+ 프로그램 작성 시간 절약
* 서브루틴의 독립성을 높이는 방법
– 메인루틴과 서브루틴에서 공유하는 정보를 적게 하는 것.
* 전역변수(global variable)의 문제점
– 프로그램 전체의 어디에서도 접근 가능
– 어느 서브루틴이 언제 변경하거나 참조하고 있는지 알기 어려움
– 전역변수의 변경 시 : 프로그램 전체 논리 확인 필요
* 전역 변수 문제점의 해결 방안
– 지역변수 사용
– 값 복사에 의한 인수값 전달 방법(Call by value)
** “GOTO 없는 프로그램” 구조적 언어
* 구조적 언어 등장
– 구조적 프로그램 이론을 기초로 함
– ALGOL, Pascal, C언어 등
– 명확한 제어 기술 가능
+ if문, case문, while문, for문 등의 명령을 사용
+ 당시 COBOL과 FORTRAN등에서는 기본 3구조를 기술할 수 없음
– 별칭 “GOTO없는 프로그래밍”
– 대표적인 언어 : C
** 진화 방향은 유지보수성과 재사용성
– 기계언어 : 컴퓨터가 직접 해석하는 기계 언어를 2진수/16진수로 기술
– 어셈블리 언어 : 기계 언어를 기호로 기술
– 고급 언어 : 복수의 기계 언어를 중요한 고급 문법으로 기술
– 구조적 언어 : 기본 3구조(GOTO 없는)의 제공으로 서브루틴의 독립성 강화
** 남겨진 문제는 전역변수와 빈약한 재사용
* 구조적 프로그래밍
– 수년 전까지 대학과 기업의 신입사원 연수에서 거론되는 주제
– 아직 해결되지 않은 2가지 주제가 남아 있음
– 2가지 문제
+ 전역변수
+ 빈약한 재사용
* 전역변수 문제
– 해결안 : 지역변수 사용, Call by value
– 미해결 부분 : 전역변수로 보전
– 대규모 프로그램에서 전역변수 문제는 심각
* 빈약한 재사용의 문제
– 구조적 언어에서 재사용 가능한 것은 “서브루틴”
Tags: Software Engineering, 소프트웨어 공학