본문 바로가기
Programming/정보처리기사

정보처리기사 소프트웨어 개발 절차 이해하기 알고리즘이란?

by 하하호호 2022. 2. 4.
반응형

 

 

 

소프트웨어 개발절차

소프트웨어를 개발할 때 우선 필요한 것은 '필요성'이다. 이 프로그램을 통해서 어떤 사용자가 만족을 하고 가치를 느낄 수 있을지 생각하는것이 우선이다. 만약 그 사용자가 나 혼자여도 상관없다. 먼저 문제해결이 시급한 문제를 먼저 정의해야 그 상황을 해결할 수 있는 프로그램이 개발되는 것이다.

 

문제분석

해결해야 할 문제가 먼지 정확하게 분석을 해야 한다. 아무도 필요 없는 문제를 해결하기 위해서 고군분투 할 필요없다. 해결하지 않아도 될 문제를 잡고 프로그램 공부를 한답시고 잡고 있으면 시간만 버린다. 당연히 프로그램 개발 실력도 늘지 않는다. 백날 hello world만 출력한다고 개발자가 되는게 아니다.

 

기능결정

문제 해결을 위해서 수행해야 하는 작업을 결정하는 단계다. 프로그램을 개발하는 과정에서 추가적인 기능이 필요해서 계획이 수정될 수는 있지만, 기본적으로 전체적인 기능을 정의할 필요가 있다. 프로그램 작동 방식이 아니라 유저가 필요한 기능을 정의하는 것이다.

 

설계

프로그램의 전체적인 구조(흐름)을 설계한다. 사용자가 어떤 순서로 프로그램을 사용하고 어떤 input으로 output을 얻어가는지 과정을 그리는 것이다. 서버, 데이터베이스, 프로그램을 어떻게 구성할지를 결정한다. 결정된 기능을 수행하기 위한 알고리즘 설계에 집중한다. 순서도 및 의사코드등을 이용해서 설계한다.

 

구현

문제를 분석하고 기능결정이 완료되면 이제 설계 프로그램과 알고리즘을 프로그래밍 언어로 구현해낸다. 프로그래밍 언어별로 구현하는 방식에 차이가 있기 때문에 각각 전문가가 구현해야 한다. 프로그램 개발 과정에서 호화되지 않는 외계인 코드를 가지고 와서 구현하면 나중에 완성하고 나서 알 수 없는 에러로 밤을 설쳐야 한다.

 

테스트/디버그

프로그램을 실행해서 제대로 작동하는지 확인한다. 오류가 잇는 경우에만 수정을 진행한다. 비정상적인 모든 경우에 대해 테스트를 진행한다. 이 때 테스트를 위한 프로그램을 하나 더 만들기도 한다. 

 

유지관리

사용자 피드백을 통해서 프로그램을 지속적으로 업그레이드 한다. 소프트웨어 개발은 개발자 스스로 멈추지 않는 한 계속 되어야 한다. 서비스가 운영되고 있는 동안 사용자의 피드백을 지속적으로 반영해서 사용자 친화적인 프로그램을 개발하는데 집중해야 한다.

 

알고리즘이란?

알고리즘은 문제를 해결하기 위해 수행해야 할 기능의 집합이다. 알고리즘과 데이터 구조를 결합해서 프로그램이 완성되는 것이다. 순서도, 의사코드 등을 통해 알고리즘을 표현할 수 있다. 알고리즘은 입력은 존재하지 않을 수 있지만 출력은 반드시 1개 이상 존재해야 한다.

 

모든 기능은 명확한 의미와 완벽한 구성을 갖춰야 하고 지정한 횟수만큼 반복된 후 종료되어야 한다. 실제로 연산 가능한 것들이어야 한다. 알고리즘의 성능을 판단하는 기준은 특정 입력에 대해 기대 출력값이 동일한지를 확인하는 것이다. 보통 대기업 코딩 테스트에서 알고리즘 테스트가 많이 나오는데, 이때 문제와 출력값을 주고 알고리즘을 설계 하고 프로그래밍으로 구현하라는 문제가 나온다.

 

알고리즘 표현이 간단하고 이해가 용이한지를 판단한다. 입력 데이터에 비례해서 몇 번의 명령을 실행하여 결과를 출력하는지를 분석한다. 평균적인 수행 시간과 최악의 명령 수행시간의 차이를 분석한다. 최소의 시간과 최소의 리소스를 가지고 동일한 출력값을 내는 프로그램이 우수한 프로그램이다.

 

알고리즘 모형(출처 : 위키백과)

순서도란 약속된 도형와 기호를 사용해 알고리즘을 표현하는 양식이다. 쉽고, 고통된 형식으로 표현하기 때문에, 서로 다른 프로그래밍 언어로 변환이 가능한 것이다. 

 

의사코드의 한 예(출처 : 위키백과)

 

의사코드란 일반적인 언어로 코드를 흉내내어 알고리즘을 표현한 코드다. 특정 프로그래밍 언어의 문법에 따른것이 아니기 때문에 컴퓨터에서 실행은 불가능하다. 특정 언어로 프로그래밍 하기 전에 알고리즘의 모델을 대략적으로 모델링하는 경웨 사용한다.

 

알고리즘 설계하는 방법

동적 계획법

어떤 문제를 해결하기 위해 그 문제를 더 작은 문제의 연장선으로 생각하는 방식이다. 작은 문제의 해를 활용해 큰 문제의 해를 찾는 방법이다.

 

탐욕적 알고리즘

분기마다 가장 최적의 해를 선택해서 결과를 도출하는 방식이다. 반드시 종합적인 최적 해를 보장하지 않는다.

 

재귀적 알고리즘

풀이 도중 같은 풀이를 다시 불러오는 과정을 반복하는 방식이다. 호출의 역순으로 결과가 출력된다.

 

근사 알고리즘 

최적화되는 답을 구할 수는 없지만 비교적 빠른 시간에 계산이 가능하도록 근사 해법을 수행하는 알고리즘이다. 

 

분할 정복법

크고 방대한 문제를 효율적으로 풀 수 있는 단위로 작게 나누는 방식이다. 계싼된 결과를 다시 합쳐서 큰 문제의 결과를 구한다.

 

퇴각 검색법

분기구조 탐색에서 탐색을 실패하는 경우, 탐색이 성공했떤 이전 분기로 되돌아가는 방식이다. 새로운 탐색이 가능한 분기까지 과정을 되돌려 진행하는 알고리즘이다. 대푲거으로 깊이 우선 탐색 알고리즘(DFS)이 있다.

반응형

댓글