DailyOscar

C와 C++의 간단한 철학 본문

IT

C와 C++의 간단한 철학

OscarHS 2016. 1. 31. 03:00
반응형

일반적으로 컴퓨터 언어는 데이터와 알고리즘 이 두 가지 개념을 다룬다.


Data : 프로그램이 사용하고 처리하는 정보

Algorithm : 프로그램이 데이터를 처리하는 방법


->  Program = Data + Algorithm ;


C는 절차적(Procedural) 언어이다. 

절차적이라는 말은 프로그래밍에서 데이터보다 알고리즘에 더 치중한다는 뜻이다.


개념적으로 말해서, 절차적 프로그래밍은 컴퓨터가 수행해야할 동작들을 명확히 구분하고,

그 구분된 동작들을 프로그래밍 언어로 구현하는 것이다.


즉 원하는 결과를 얻기 위해 컴퓨터가 따라야 할 절차들을 규정해 놓은 것이 절차적 프로그램이다.


케이크를 만들기 위한 재료들 (버터, 설탕, 달걀 등..) -> 데이터

케이크를 만들기 위한 동작들 (크림을 만든다, 설탕을 친다, 달걀을 깬다 등) -> 알고리즘  


또한 C언어는 구조적 프로그래밍을 지원한다. 


하향식(top-down) 설계는 구조적 프로그래밍이 고수하는 하나의 철학이며

C언어에서는 규모가 큰 프로그램을 작고 다루기 쉬운 단위 작업들로 쪼개는 것이다.

쉽게 다룰 수 있는 최소한의 단위까지 쪼갠다.

그러면 전체 프로그램이 프로그래밍하기 쉬운 작은 모듈들의 집합이 된다.

(방 -> 책상, 서랍, 책꽂이, 침대 등등)


C언어에서는 개별적인 작업을 수행하는 Function단위로 프로그램을 개발한다. 


----------------------------


C++의 등장


규모가 큰 프로그래밍은 여전히 어려운 문제로 남아 있었다.

그 해결책으로 객체 지향 프로그래밍(Object Oriented Programming)이 등장하였다.


절차적 프로그래밍은 알고리즘을 강조하지만, 객체 지향 프로그래밍은 데이터를 강조한다.


또한, 객제 지향 프로그래밍은 해결해야 할 문제를 언어의 절차적 접근 방식에 억지로 끼워 맞추지 않고,

언어 자체를 해결해야할 문제로 맞춘다.  

즉, 해결해야 할 문제의 특성에 맞게 데이터형 자체를 설계한다.


C++에서는 클래스(Class)가 그와 같은 목적으로 설계되는 새로운 데이터형이다.

객체(Object)는 그러한 클래스에 의해 만들어지는 특정한 데이터 구조이다.


일반적으로 클래스는 객체를 나타내는 데이터 부분과, 

그 데이터를 대상으로 수행할 수 있는 동작 부분으로 정의된다.


사각형을 그릴 수 있는 드로잉 프로그램을 개발한다고 가정 했을 때,

사각형의 위치, 가로세로의 길이 색상 등이 클래스의 데이터 부분이 된다.

그리고 사각형을 다른 위치로 옮기거나, 복사, 크기변경 등의 작업은 클래스의 동작 부분이 될 수 있다.


사각형 객체는 실제로 사각형을 나타내는 모든 데이터 값을 가지게 되며,

사각형 클래스의 동작부분을 메서드들을 사용해서 그 사각형을 수정할 수 있다. 

사각형을 두개 그려야 한다면? 

사각형 객체를 두 개 생성하면 된다.


객체 지향적으로 프로그램을 설계하려면

프로그램이 다루어야 하는 객체를 정확하게 서술하는 클래스를 먼저 설계해야한다.


위에 말한 드로잉 프로그램을 개발하기 위해서는 

사각형, 선, 붓, 펜 등을 정확하게 서술하는 각각의 클래스를 먼저 정의 해야 한다.


이 때, 원을 옮기거나 선을 회전하는 등의 동작은 해당 클래스의 정의에 포함되어야만 한다.

그리고 나서, 각 클래스에 해당하는 객체를 만들어가면서 프로그램 설계를 계속 진행한다.


이렇게 저수준의 클래스를 먼저 설계한 후에 고수준의 프로그램 설계로 진행하는 것을 상향식(bottom-up) 프로그래밍이라고 한다.



데이터와 메서드를 클래스 정의 안에 함께 넣을 수 있는 것 외에도

OOP의 몇 가지 특징이자 장점이 있지만 생략.



따라서, OOP는 해결해야 할 작업이 아니라 

개념 자체를 표현하는 데 주안점을 두고 상향식으로 프로그래밍을 진행 한다.



출처 : 책 C++ 기초 플러스 5판 Stephen Prata 저, 윤성일 역  성안당,  페이지 4-6

오늘의 타자연습 끝



반응형
Comments