본문 바로가기

프로그래밍 강좌/소프트웨어 개발

[소프트웨어] SW 개발 방법론(1) - 프로그래밍 차이 구조적 절차적 객체지향 모호성 명사 동사 모듈화 상속 추상화 프로그래머

우리는 지난 시간에 기술 부채 techincal debts 에 대해 알아봤습니다.

오늘 알아볼 내용은 아래와 같습니다.

1. 소프트 웨어와 프로그래밍의 차이
2. 소프트웨어는 언어다?
3. 구조적(절차적) 개발 방법론
4. 객체지향 개발 방법론
소프트웨어 vs. 프로그래밍

 

소프트웨어 개발 방법론을 논하기에 앞서, 소프트웨어가 무엇인가?

생각해 봅시다.

 

예를 들어, "1부터 100까지 더하는 프로그램을 짜시오." 라고 하지,

"1부터 100까지 더하는 소프트웨어를 짜시오." 라고 하지는 않습니다.

 

또한, "네비게이션 소프트웨어를 만드세요." 라고 하지, "네이게이션 프로그램을 만드세요."

라고 하지는 않습니다.

 

소프트웨어와 프로그램의 차이.. 감이 오시나요?

 

소프트웨어 프로그램(코딩)과의 차이는 바로 모호성에 있습니다.

그래서 소프트웨어를 만드는게 어려운 이유 입니다.

이걸 수식으로 표현해보면, 아래와 같이 쓸 수 있겠네요.

소프트웨어는 언어다

 

그럼 소프트웨어를 만들기 위해서 필요한 것이 무엇일까요?

 

소프트웨어의 목적이죠. 목적을 정하기 위해서는

사용자들의 의견을 들어보는게 중요하겠죠? 이것이 요구사항 입니다.

 

소프트웨어는 언어 입니다. 언어는 어떤 것으로 이루어져 있나요?

 

네~ 맞습니다.

명사 동사로 이루어져 있습니다.

 

자. 그럼 소프트웨어가 언어라고 했으니 명사와 동사가 있겠죠?

 

바로

동사를 중심으로 생각을 정리하여 소프트웨어를 만드는 개발 방법론을 구조적(절차적) 방법론이라고 하고,

명사를 중심으로 생각을 정리하여 소프트웨어를 만드는 개발 방법론을 객체지향 방법론이라고 합니다.

 

예를 들어 보겠습니다. 요구사항이 "코끼리를 냉장고에 넣는 소프트웨어를 만들어라" 라고 한다면,

구조적(절차적) 개발 방법론

 

1. 코끼리를 데려온다.

2. 코끼리를 자른다.

3. 냉장고 문을 연다.

4. 코끼리를 냉장고에 넣는다.

5. 냉장고 문을 닫는다.

 

이 절차에서 동사를 찾는다면 다음과 같습니다.

"데려온다", "자른다", "연다", "넣는다", "닫는다"

우리가 C 언어를 개발할 때 이런 식으로 개발을 했었죠.

 

만약,

코끼리를 호랑이로 바꿔달라는 요구사항 변경이 발생했을 경우, 1번, 2번, 4번의 코끼리를 바꿔야 하고,

또 냉장고가 아니라 창고에 넣어 달라고 변경되었을 경우, 4번, 5번의 냉장고를 바꿔야 합니다.

구현이 쉬운 반면 요구사항 변경에 대처가 어렵습니다.

 

그럼 객체지향 개발 방법론은 어떨까요?

 

객체지향 개발 방법론

우선 명사를 찾습니다. 명사는 뭐가 있죠?

코끼리, 냉장고, 문 등이 있습니다. 또 다른 명사는 없을까요?

우리나라 언어는 동사 중심의 언어 입니다. 영어는 명사 중심의 언어이고요.

그래서 외국 사람들이 객체 지향에 강한가요? 어찌되었든,

우리나라 말은 여러 명사가 생략되어도 다 이해하게 되죠.

이래서 객체지향이 어려운가봐요.. :)

 

자,

누가 코끼리를 데리고 오나요?

누가 코끼리를 자르나요?

어떤 것으로 코끼리를 자르나요?

명사를 찾는 일이 객체지향의 첫 걸음 입니다.

 

문장을 임의로 완성시켜보죠.

내가 코끼리를 데리고 옵니다.

내가 코끼리를 칼로 자릅니다.

내가 냉장고 문을 엽니다.

명사만 가지고 다이어그램을 그려보면

이렇게 되겠네요.

이걸 한번 모듈화 해 봅시다. 대표성을 갖는 명사를 뽑아보면,

아래와 같이 만들어 볼 수 있습니다. 대표성을 상속받아 그려보면,

여기에서도 요구사항이 변경됩니다.

'코끼리'가 '호랑이'로,

'칼'이 '톱'으로,

'냉장고'가 '창고'로

'나'가 '너'로

 

그렇게 된다면 아래와 같이 할 수 있습니다.

요구사항이 변해도 변하지 않는 영역이 있죠?

이게 바로 객체지향, 즉 모듈화, 상속, 추상화의 장점이죠.

이 모듈을 고정부라고 하고, 나머지를 변동부로 생각하면 요구사항이 계속 변해도 대응이 쉽겠죠?

 

소프트웨어 개발 Process 에 대해서는 아래 글을 참조하세요.

https://blog.naver.com/dorergiverny/223030882387

 

소프트웨어 개발 방법론(2) - 폭포수 모델 프로세스 나선형 통합 애자일 agile waterfall model process spi

지난 시간에 소프트웨어 개발 방법론에 대해 기초를 알아봤습니다. https://m.blog.naver.com/dorergiverny...

blog.naver.com