개요
컴퓨터의 특징을 정의하고 컴퓨터와 프로그래밍의 관계를 해석한다.
1. 컴퓨터
과거의 컴퓨터는 계산을 위한 기계였으나,
현대적인 의미의 컴퓨터는 명령어들을 리스트에 따라 데이터를 처리하는 기계이다.
<KeyPoint>
- 명령어 : 프로그래밍 언어
- 리스트에 따라 : 알고리즘
- 데이터를 처리 : 실행
▶ 프로그래밍 언어를 알고리즘에 의해 설계하여 실행시키는 기계
2. 프로그래밍
컴퓨터가 우리의 목적을 달성할 수 있도록 절차를 기술하는 행위.
사람 대신에 컴퓨터에게 내 생각을 전달할 수 있는 도구.
코드는 문법에 맞춰 적어놓은 명령어를 의미하며,
코드를 작성하는 것을 코딩이라 한다.
프로그래밍은 목적을 달성할 수 있도록 논리적인 절차를 기술하는 것이며,
코딩은 이 절차를 바탕으로 명령어로 옮기는 것.
프로그래밍 언어는 문법을 의미하는 코어(Core) 부분과 문법을 이용해 많은 사람들이 편하게 프로그래밍 할 수 있도록 도와주는 라이브러리(Library) 부분을 그린다.
1) 저급 언어
- 기계 중심의 언어로 컴퓨터가 직접 이해할 수 있어 실행 속도는 빠르지만 사람에게 불친절한 언어
- 저급 언어에는 기계어와 어셈블리어로 구분된다.
(1) 기계어
- 컴퓨터가 직접 이해할 수 있도록 0과 1의 2진수 형태로 표현된 언어
- 기종마다 기계어의 차이로 언어의 호환성이 좋지 않음
- 프로그램 작성이 어려움
(2) 어셈블리어
- CPU와 1:1 대응 가능한 기호 언어 (ex. MOV ADD)
- 기계어보다 높은 수준의 저급언어
- 최적화가 잘 되어 단순한 프로그램에 유리
2) 고급 언어
- 사람 중심의 언어로 사람이 이해하기 쉽게 작성된 언어
- 가독성이 좋고 작업 하나의 명령으로 다수의 동작을 지시할 수 있으며 효율성이 높은 언어
- 컴퓨터가 직접 이해할 수 없어 번역이 필요한 언어
3) 컴파일러
- 고급언어로 프로그래밍된 코드를 CPU가 이해할 수 있도록 기계어로 변환해주는 도구
3. 프로그램 개발 과정
1. 요구사항 분석
- 사용자의 요구사항을 만족시키기 위하여 개발에 필요한 요소를 분석한다.
요구사항 명세서 : 요구 조건을 만족하도록 소프트웨어가 갖는 기능 및 제약 조건, 성능 목표 등을 포함한 명세서
개발 목표 (업그레이드 레벨 * 100G)의 가격으로 플레이어 캐릭터 공격력을 (업그레이드 레벨)만큼 업그레이드 시키는 버튼 제작 |
2. 알고리즘 설계
- 어떤 단계를 밟아서 어떤 순서로 작업을 처리할 것인지 개발의 구조를 설계한다.
1) 자연어
- 인간이 사용하는 언어로 알고리즘을 정리한다.
1. 플레이어 소지금이 업그레이드 레벨 * 100G 가격보다 많으면 업그레이드 버튼을 활성화 시킨다. 2. 업그레이드 버튼을 누르면 업그레이드 비용이 소비되고 공격력이 업그레이드 레벨 만큼 상승한다. 3. 업그레이드가 완료되면 게임을 저장하고 UI를 갱신해준다. |
2) 순서도 (Flow Chart)
- 자연어로 정리한 내용을 프로그램의 논리 순서 또는 작업 순서에 따라 그래픽으로 표현
3) 의사 코드
- 자연어보다는 더 체계적이고 프로그래밍 언어보다는 덜 엄격한 언어로서 알고리즘의 표현에 주로 사용되는 코드
공격력 = 기본 공격력 + (공격력 상수 * 공격력 업그레이드 레벨) 업그레이드 페이지 오픈() { UI 갱신(); } 업그레이드() { 입력 : 업그레이드 버튼 if 업그레이드 비용 > 소지금 // 버튼 눌릴 때 다시 한 번 확인 소지금 -= 업그레이드 비용; 업그레이드 레벨 ++; 게임 저장(); UI 갱신(); } UI갱신() { if 업그레이드 비용 > 소지 금 업그레이드 버튼 활성화; else 업그레이드 버튼 비활성화; } |
3. 코딩
- 알고리즘을 프로그래밍 언어의 문법에 맞추어 기술한 것 (소스 프로그램)
// 예시 코드 C#
playerAttackPower = defaultAttackPower + (constantAttackPower * attackLevel);
// 플레이어 공격력 = 기본 공격력 + (공격력상수 * 공격력레벨)
UpgradePageOpen() // 업그레이드 페이지 오픈
{
RefreshUI();
}
UpgradeButton() // 업그레이드 버튼 눌릴 때
{
if(playerGold >= attackUpgradeGold * attackLevel) // 업그레이드 비용 재 확인
{
playerGold -= (attackUpgradeGold * attackLevel) // 골드 사용
attackLevel ++; // 공격력 레벨 증가
Gdata.Save(); // 게임 저장
RefreshUI(); // UI 갱신
}
// 비용이 없는데 버튼이 눌리면 아무런 반응도 하지 않는다.
}
RefreshUI() // UI 갱신
{
if(playerGold >= attackUpgradeGold * attackLevel) // 플레이어 소지 금 >= 업그레이드 비용
{
attackUpgradeButton.setactive(true); // 활성화
}
else
{
attackUpgradeButton.setactive(false); // 비활성화
}
}
4. 컴파일 & 링크
1) 컴파일
- 소스 프로그램을 목적 프로그램으로 변환하는 작업
컴파일 에러 : 컴파일 과정에서 작성한 코드의 문법에 오류가 발생하는 경우
2) 링크
- 컴파일된 목적 프로그램을 라이브러리와 연결하여 실행 프로그램을 작성하는 것
라이브러리 : 프로그래머들이 많이 사용되는 기능을 미리 작성해 놓는 것
링커 : 링크를 수행하는 프로그램
5. 실행 & 디버깅
1) 실행
- 컴파일 & 링크를 통해 작성된 실행 파일을 실행하는 것
실행 시간 오류 (run time error)
- 불가능한 계산을 진행하는 경우 ( ex. 0으로 나누는 것 )
- 잘못된 메모리 주소에 접근하는 경우 ( ex. NullReferenceException )
논리 오류 (logical error)
- 뮨법은 틀리지 않았으나 논리적으로 정확하지 않은 것
if(0>1) // 문법은 틀리지 않았으나 말도 안되는 코드
{
playerAttackSpeed ++;
}
2) 디버깅
- 소스에 존재하는 오류를 잡는 것
6. 유지보수
- 개발 이후 발생하는 버그 또는 사용자의 추가 요구사항에 따라 개발되는 내용
'Program > Program' 카테고리의 다른 글
드로우 콜(Draw call)과 최적화 (0) | 2023.02.09 |
---|---|
Rendering Pipeline (0) | 2022.09.08 |
컴퓨터 동작 원리 (0) | 2022.04.21 |
컴퓨터 언어 체계 (0) | 2022.04.19 |