본문 바로가기

프로그래밍 언어/Java

객체 지향 프로그래밍, 절차 지향 프로그래밍

Java 는 객체 지향 프로그래밍 언어다.  

 

개발에 조금이라도 관심이 있는 사람은 누구나 한 번쯤은 들어본 문장. 

 

객체 지향 프로그래밍 언어라는 건 결국 Java 는 객체 지향 프로그래밍을 하기 위한 언어라는 뜻인데, 그렇다면 여기서 말하는 객체 지향 프로그래밍이란 뭘까?

 

컴퓨터는 명령을 수행하려면 명령어를 받아야하고 프로그램은 이러한 명령어들을 코드로 가진다. 하지만 기본 명령어 코드로만 구성된 프로그램을 짜게 되면 하나의 코드에 방대한 양의 코드가 들어가야 할 것이고 개발하기도 힘들며 이후 다른 개발자가 해당 프로그램 수정을 하기도 힘들다. 

 

그래서 초기 개발자들이 명령어가 아닌 프로그램의 기능과 속성으로 다시 재정의한 것이 객체라고 볼 수 있다. 예를 들어 Java 로 코딩할 때 우리는 Java 에서 제공하는 기본 변수, 클래스, 메소드, 함수, 자료구조 등을 사용하며 필요하다면 직접 만들기도 한다.

 

"int a = 10;"

가장 간단한 이 코드를 보자.

int 라고 하는 자료형을 사용하여

a라는 객체를 만들어 메모리에 공간 및 주소를 받고

해당 공간에 10을 저장한 것이다. 

 

결국 객체는 단순히 변수가 뿐만 아니라 언급한 기본 변수, 클래스, 메소드, 함수, 자료구조를 기반으로 생성한 인스턴스(현재 실행 중인 프로세스에 의해 생성된 것) 라고 볼 수 있다.

 

결국 객체 지향 프로그래밍이란 것은 이러한 객체들을 기반으로 프로그램의 기능을 설계하는 것이다. 

 

그렇다면 객체 지향 과 절차 지향의 차이는 무엇일까?

절차 지향 프로그래밍은 단순히 코드를 위에서 부터 아래로 실행하는 프로그램 설계 방식을 말한다. 

백문이 불여일견 다음 코드를 살펴보자.

 

public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int a = scan.nextInt();
		int b = scan.nextInt();
		
		String operator = scan.nextLine();
		char opChar = operator.charAt(0);
		
		switch (opChar) {
			case '+':
				System.out.println(a+b);
				break;
			case '-':
				System.out.println(a-b);
				break;
			case '*':
				System.out.println(a*b);
				break;
			case '/':
				System.out.println(a/b);
				break;
		}
	}

 

간단한 사칙연산 코드로 순차적으로 코드를 실행하며 결과값을 출력하며 종료된다. 

이렇게 위에서 아래로 순차적으로 코드가 진행되며 프로그램이 동작하도록 설계된 것을 절차 지향 프로그래밍이라고 한다.

 

 

위의 코드를 객체 지향 프로그래밍으로 재설계 하면 다음과 같이 리팩토링이 가능하다. 

 

public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		int a = scan.nextInt();
		int b = scan.nextInt();
		
		String data = scan.nextLine();
		Operation operation =  new Operation(data);
		operation.pringOperation(a, b);
	}

class Operation{
		
		char operator;
		
		public Operation(String inputData) {
			this.operator = inputData.charAt(0);
		}
		
		public void pringOperation(int a, int b) {
			switch (this.operator) {
				case '+':
					System.out.println(a+b);
					break;
				case '-':
					System.out.println(a-b);
					break;
				case '*':
					System.out.println(a*b);
					break;
				case '/':
					System.out.println(a/b);
					break;
			}
		}
	}

 

객체 지향 프로그래밍은 위와 같이 객체의 인스턴스를 생성해 해당 클래스를 다시 참조하게 되는. 어떻게 보면 아래에서 다시 위로 오는 방식으로 진행되며 결과적으로 절차 지향 프로그래밍보다 간단하게 코드 작성이 가능하다.

 

현대에는 특별한 몇몇 프로그램을 제외하면 대부분 프로그램이 객체 지향 프로그래밍으로 설계 되어있으며 사실 상 절차 지향에서 발전하여 객체 지향이 된 것이라고 봐도 무방하다. 물론 그렇다는 것은 아니다 개인적인 의견입니다

 

마지막으로 구글링해서 찾을 수 있는 여러 정보를 기반으로 두 프로그래밍 기법의 장단점을 보며 마무리하자.

  절차 지향 프로그래밍 객체 지향 프로그래밍
장점 모든 함수가 데이터를 공유할 수 있다.

순차적으로 처리하기에 객체 지향 보다 빠르다.
유지 보수가 쉽다.

코드의 중복을 방지해 절차 지향 보다 단순하며 가독성이 높다.

디버깅 및 결과값 도출이 쉽다.

대형프로젝트에 적합하다.
단점 유지보수가 힘들다.

코드 가독성이 떨어진다.

대형 프로젝트에 부적합하다.

디버깅 및 결과값 도출이 힘들다.
초기 설계 시 시간이 많이 든다.

절차 지향에 비해 느리다.

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

예외처리(Exception)  (0) 2023.02.21
Java 문법 정리  (0) 2023.02.17
Java 실행, 동작 그리고 JVM, JRE, JDK, JIT  (0) 2023.02.17