본문 바로가기
카테고리 없음

객체지향과 절차지향의 데이터 처리 방식은 무엇이 다를까?

by 손너잘 2021. 3. 9.

프로그래밍을 공부하다 보면 객체지향과 절차지향이라는 용어를 많이 들어볼 수 있다.

그러면 여기서 우리는 의문점을 가질 수 밖에 없다. 객체지향과 절차지향이 뭐지? 무엇이 다르지? 에 대한 의문점 말이다.

 

이름만으로 생각해 보면, 

아! 객체지향은 객체를 지향하니까 객체를 사용하는거고, 절차지향은 절차를 지향하니까 순서대로 뭔가를 처리하는 방식이겠구나!

라고 생각할 수 있다.

 

결론부터 말하면 완전히 틀린 접근이다.

 

객체지향과 절차지향에 대해서 세세히 설명하자면 글이 끝없이 길어질 것 같으니, 이 글에서는 전하고자 싶은 부분만 전하도록 하겠다.

필자가 생각하기에 둘의 큰 차이점은 "데이터의 관리 및 가공 방법"에 있다.

 

예를 들어 한번 설명해 보겠다. 어느 학급 학생들의 시험 점수 평균과 을 구하는 기능을 구현한다고 가정해 보다.

절차지향 언어하면 가장 먼저 떠오르는 언어인 c를 통해 한번 구현해 보도록 하겠다.

 

#include <stdio.h>
#include <stdlib.h>

int main() {
    int scores[10] = {1,2,3,4};
    int i = 0;

    printf(average(scores, 10));
}

int average(int scores[], int cnt) {
	...
}

다음은 절차지향 언어의 대명사 자바를 이용하여 구현해 보도록 하겠다.

public class Scores {
	int[] scores;
    
    public Scores(int[] scores) {
    	this.scores = scores;
    }
    
    public double getAverage() {
    	return Arrays.stream(scores).average();
    }
}

public class Main() {
	public static void main(String[] args) {
    	int[] scores = {1,2,3,4};
        
    	for(int i=0; i<10; i++) {
        	scores[i] = args[i];
        }
        
        Score score = new Score(scores);
        System.out.println(score.getAverage());
    }
}

혹시 둘의 차이를 느끼겠는가?

데이터의 처리와 관리를 어떻게 하는지 한번 확인해 보자. 

 

C언어의 경우는 메인 함수에서 데이터를 관리하며 데이터를 처리하기 위해 데이터 의존적인 함수를 만들어 호출한다. 즉, 모든 프로세스가 데이터에 의존적이게 된다. 이는 곧 데이터와 데이터를 처리하는 로직이 분리되어 있다는 것을 의미한다.

 

자바의 경우를 보자. 자바는 메인 함수에서 데이터를 관리하지 않는다. 데이터를 관리하기 위한 객체를 생성하고, 객체가 그 데이터를 관리한다. 즉, 데이터와 데이터를 처리하는 로직이 뭉쳐있다. 따라서 데이터를 처리하기 위해 데이터를 처리하는 객체에게 그 요청을 보낸다.

 

즉, 절차지향을 다른말로 하면 프로세스데이터분리되어 있다고 말할 수 있고, 객채지향은 프로세스데이터합쳐져 있다고 말할 수 있다.

 

객체지향은 우리가 데이터를 직관적으로 바라볼 수 있도록 도와준다. 또한 응집도를 줄여주며 변경에 자유롭다.

객체지향과 절차지향의 차이는, 이론적인 학습 뿐만 아니라 많은 프로젝트를 통해 직접 체감해 보도록 하는게 더욱 좋은 학습방법일 것 이다.

댓글