이 글의 그림들은 모두 흰색 배경이므로 현재 접속 환경이 다크 모드를 적용한 경우, 눈뽕을 받을 수 있습니다.
어제 재검토 과정에서 전체 원고 흐름에 문제가 있다는 것을 확인하였습니다.
따라서 큰 변경 사항이 없는 요약 단원만 깃갤에 연재하고, 차후에 내용을 보강하여 재연재하려고 합니다.
재연재를 할 경우, 지금 연재하는 글은 깃갤에서 모두 삭제할 계획입니다.
또한 이후 내용 수정에 따라 원본 파일의 url이 달라지므로, 저장소의 url만 출처로 표기합니다.
이에 대해 너른 양해 부탁드립니다.
출처: https://github.com/JasonDevlog/oop-analysis
보다 구체적인 내용은 저장소에 있는 본문을 참고해주시고, 그래도 궁금한 점이 있으면 댓글로 문의 바랍니다.
프로그램 모형
프로그램을 바라보는 관점은 크게 2가지로 구분할 수 있다.
- 클릭하면 실행되는 파일 또는 컴파일되어 그 자체로는 정상적인 수정이 불가능한 상태
- 설계 또는 작성(제작) 대상 (개발자 입장)
이 글에서는 프로그램을 후자의 관점으로 취급하되, 프로그램의 차원을 설계와 작성으로 구분한다.
프로그램 모형은 "작업"이라는 개념을 제시한다.
작업은 다시 "작업목표"와 "작업수단"으로 구분된다.
이 모형에서는 프로그램을 가장 큰 작업 단위로 취급한다.
이때 작업 단위는 작업목표 차원과 작업수단 차원을 모두 의미한다.
"작업목표"는 프로그램에서 수행해야 하는 어떤 추상적인 목표를 의미한다.
반면 "작업수단"은 프로그램에서 수행될 수 있는 구체적인 수단을 의미하며, 이 글에서는 "선택 가능한 코드 구문"으로 취급한다.
작업목표는 더 작은 작업목표로 분할할 수 있으며, 작업목표들의 연쇄로 구성될 수 있다.
그리고 더 이상 분할할 수 없는 작업목표를 "단말 작업목표"라고 한다.
단말 작업목표는 이를 달성할 수 있는 작업수단으로 구현된다.
또한 작업수단은 작업목표를 수행하기 위한 일종의 구현체이며, 더 작은 추상적인 단위로 분할할 수 없다.
마찬가지로 작업수단은 다른 작업수단들의 연쇄로 구성될 수 없다.
이는 소스코드 그 자체와 어떻게 소스코드를 구성해야하는지 그 추상적인 설계를 구분하는 관점에서 기인한다.
이때 작업목표와 작업수단은 각각 변형 생성 문법에서의 비단말기호, 단말기호 개념과 형식적으로 대응한다.
따라서 작업목표의 연쇄와 작업수단의 연쇄를 구성하는 과정은 변형 생성 문법의 문장 산출 과정과 형식적으로 유사하다.
회색 수평 점선 위를 작업목표 또는 설계 영역, 밑을 작업수단 또는 구현 영역에 대응시켜볼 수 있다.
프로그램은 "작업목표들의 구성과 연쇄", "작업수단들의 연쇄"를 모두 의미한다.
전자는 "추상적인 프로그램", 후자는 "구현된 프로그램"으로 표현할 수 있다.
그리고 이들을 형성하는 과정을 각각 "프로그램 설계", "프로그램 작성"으로 지칭할 수 있다.
이 글에서는 "프로그래밍"을 "프로그램 설계"와 "프로그램 작성" 모두에 해당하는 개념으로 취급한다.
Jason Devlog에 의해 작성된 이 문서는 크리에이티브 커먼즈 저작자표시-비영리 4.0 국제 라이선스에 따라 이용할 수 있습니다.
라이선스와 별도로 이 글은 재연재 시 삭제할 예정입니다.
추가
엄밀히 말해 그림 21은 구구조 규칙만 나타나 있는, 이른바 구구조 문법에 해당합니다.
이는 제가 그림을 정확하게 그리지 못한 탓입니다.
중요한 건 문장을 어떻게 산출하느냐가 아니라, 프로그램 모형과 형식이 어떻게 유사하느냐는 겁니다.
나중에 재연재할 때 고치도록 하겠습니다.
감사합니다.
댓글 0