개요

컴퓨터의 특징을 정의하고 컴퓨터와 프로그래밍의 관계를 해석한다.


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. 유지보수

- 개발 이후 발생하는 버그 또는 사용자의 추가 요구사항에 따라 개발되는 내용

728x90

'Program > Program' 카테고리의 다른 글

드로우 콜(Draw call)과 최적화  (0) 2023.02.09
Rendering Pipeline  (0) 2022.09.08
컴퓨터 동작 원리  (0) 2022.04.21
컴퓨터 언어 체계  (0) 2022.04.19

+ Recent posts