네, 됩니다!
C는 절차지향 프로그래밍 언어인데요?
C가 객체지향 프로그래밍 언어는 아닙니다.
문법적으로 객체지향 프로그래밍을 지원하지 않습니다. ( = 도와주지 않습니다. )
someObject.someMethod("Hello world!");
Java
복사
객체지향 프로그래밍 문법/기능을 활용한 예시
C++이나 자바 등의 언어에서는 이렇게 쓸 수 있는 것을, C로 한다면 이렇게 됩니다.
someObject.vtable->someMethod(&someObject, "Hello world!");
Java
복사
객체지향 프로그래밍 예시
언어 차원에서 지원해주지 않을 뿐, 충분히 가능합니다.
C++이나 자바를 쓰면 객체지향 프로그래밍인가요?
객체지향 프로그래밍 언어는 언어 차원에서 객체지향 프로그래밍을 지원할 뿐입니다.
비구조적 프로그래밍 언어, 어셈블리
대표적으로 절차지향 프로그래밍이 아닌, 비구조적 프로그래밍 언어로 어셈블리가 있습니다.
cmp eax,3
je anywere ; anywere로 점프! anywere가 어디 있을까요? 아무도 몰라요.
mov eax,999
Lisp
복사
아무 곳에서나 아무 곳으로나 점프할 수 있습니다.
if나 비슷한 구조적 프로그래밍 문법을 지원하지 않습니다.
어셈블리로 구조적 프로그래밍?
하지만 그와 관련해 구조적인 규칙을 만든다면, 그리고 그를 지킨다면 구조적 프로그래밍입니다.
if/while같은 전형적인 구조를 정의하고, 그 구조에 맞지 않는 점프를 사용하지 않는 식으로요.
je my_if_skip ; if라는 문법은 없지만, if라면 아래 어딘가 있겠네요
mov eax,999
my_if_skip:
Lisp
복사
실제로 C의 콜 스택과 같은 개념을 사용해 어셈블리로도 함수를 만들어서 사용합니다.
비구조적 프로그래밍 언어임에도 불구하고 절차적 프로그래밍을 하고 있는 것이죠!
구조적/절차적 프로그래밍 언어, C
C는 구조적 프로그래밍이 편하도록 if/while 등의 구조를 언어 차원에서 문법적으로 지원합니다.
그리고 더 나아가 절차적 프로그래밍이 편하도록 함수를 언어 차원에서 문법적으로 지원합니다.
C로 비구조적 프로그래밍??
하지만 마찬가지로 C에서도 goto를 통해 아무 곳에서나 아무 곳으로 점프할 수는 있습니다.
함수나, if/while 등의 기능이 있는데도 goto를 남발한다면, 그건 비구조적 프로그래밍입니다.
int main(void) {
loop_start:
puts("Hello world!");
goto loop_start; // 반복문이 있는데 굳이?
}
C
복사
결론
그 언어에 객체지향 프로그래밍 관련 기능이 있는지와는 별개로, 객체지향적으로 짜지 않는다면...
객체지향 프로그래밍 언어를 사용하더라도 그건 객체지향 프로그래밍이 아닙니다.