코딩을 배우고 있는 이들이라면 C언어는 절차지향, C 는 객체지향이라고 하는 말을 들어봤을 것이다.
다 똑같이 C언어이고 타자쳐서 하는 것은 똑같은데 무슨 차이점일까? 전공자에 입장에서 코린이(코딩 어린이)들을 위한 용어 정리를 쉽게 해보도록 하겠다.
-코드도 위아래가 있지! 절차지향
기본적으로 모든 코드는 절차지향의 특성을 띄고 있다. 아까는 C언어는 절차지향 C 는 객체지향이라고 하더니 이게 무슨 소리인가 할 수도 있다. 하지만, 코딩을 조금 하다 보면 이해할 수 있을 것이다.
기본적으로 코드를 짜면 위에 있는 코드부터 차례로 컴파일(컴퓨터가 코드를 실행할 수 있도록 번역하는 과정)하여 실행한다는 것을 알 수 있다.
코드가 기본적으로 위와 같은 특성을 띄는 이유는 무작위로 코드가 실행될 경우 매번 결과가 다르게 나올 수 있으며, 아래나 중간부터 시작하면 코드를 짜는 데 어려움이 많을 수밖에 없기 때문에 위에서부터 순차적으로 시작하는 절차지향을 채택한 것이다.
-코드 분석과 간단한 프로그래밍에는 유리해! 하지만 복잡하고 비효율적이야..
그러면 절차지향 프로그래밍의 장점은 무엇일까? 일단 처음 보는 코드를 해석하는 데 어려움이 많지 않다는 것이다. 특정한 개념을 잡고 가는 것이 아니라 순서대로 따라가다 보면 코드를 해석할 수 있으므로 처음 보는 코드도 해석하고 실행 결과를 예측하는 것이 편하다. 또한, 간단한 프로그래밍에서는 많은 자원을 쓸 필요 없이 단순 연산만 하면 되기 때문에 자원을 많이 요구하지 않는 것은 장점이라고 할 수 있을 것이다.
하지만, 장점만 있는 것은 아니다. 특정한 값과 속성을 가진 개체를 프로그램 내에서 생성해야 하는데 이를 구현하기 매우 까다롭다는 점과 좀 더 복잡한 프로그래밍으로 들어가게 되면 효율성이 떨어지고 코드가 복잡해질 수밖에 없어진다. 결국 절차지향 언어로는 모든 프로그램(특히 게임)을 구현하기는 매우 힘들어진다.
- 자.. 이게 클릭..아니 특성이야. 객체지향
위에 있던 코딩의 복잡성과 특정한 특성을 가진 개체들을 여러 개 생성해야 할 때, 기존 절차지향 프로그래밍으로는 한계가 보인다.
당신이 게임 개발자이며 RPG 게임을 만든다고 가정해보자. 각각 캐릭터의 특성과 스킬을 제작하는 역할을 해야 한다. 하지만 절차지향 언어로 진행하게 된다면 당신은 일일이 캐릭터라는 개념을 구현해야 한다. 이 얼마나 비효율적인가. 그래서 나타난 개념이 바로 '객체'이다.
그러면, 객체라는 것은 무엇인가? '특성을 가진 하나의 개체'라고 설명할 수 있을 것 같다. 쉽게 이야기해서 기존에 절차지향으로 캐릭터를 생성하려면, '모험가' 따로, '해적' 따로, '마법사' 따로.. 다음과 같이 같은 특성, 다른 수치값을 가지더라도 다 각각 따로 구현해야 한다. 하지만 객체지향 언어로 구현을 하려면 이들을 '캐릭터'라는 객체로 정의하고 각각 특성에 맞는 수치만 넣어주면 된다.
- 효율적인 코드, 하지만 무겁지
앞서 이야기한 대로 비슷한 특성을 가진 개체들을 하나의 객체로 묶어놓으면 되므로 코드가 길어지고 비슷한 특징을 가진 객체를 많이 다룰수록 효율적인 코드를 완성할 수 있다. 또한, 이러한 특성을 계속 이용하면 되기 때문에 응용성에서도 이득을 볼 수 있다. 단점이 있다면, 간단한 작업마저도 객체로 실행할 때가 있어, 효율성이 떨어질 수 있다는 점이다.
[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]