본문 바로가기

Programming/기초지식

절차지향과 객체지향

반응형

절차 지향

절차 지향은 하나의 큰 프로그램을 여러 개의 작은 프로시저(procedure_절차)들로 나누는 것을 목표로 한다. 프로시저는 서브 프로그램(subprogram), 서브루틴(subroutine), 메서드(method), 함수(function)등의 여러 이름이 있다.

 

절차 지향에서 프로그램 코드는 함수(function)라 불리는 프로시저들의 집합으로 구성되어 있다. 이 함수들은 변수(variable)라 불리는 데이터에 의해 동작한다.

 

https://www.learncomputerscienceonline.com/procedural-programming/

 

절차지향 프로그래밍은 구조적 프로그래밍(structured programming)에서 유래되었다. 구조적 프로그래밍은 명령형 프로그래밍에서 파생된 개념이다. 

 

https://www.learncomputerscienceonline.com/procedural-programming/

 

절차지향 프로그래밍의 기본 개념

절차 지향 또는 절차적 프로그래밍이라고 부른다. 앞서 언급 했듯이 절차지향 프로그래밍에서 하나의 프로젝트는 작은 여러개의 함수(function)들의 집합으로 이루어져 있다. 각 함수는 개발자의 코딩에 의한 특정 기능을 수행한다.

 

https://www.learncomputerscienceonline.com/object-oriented-programming/

 

함수는 해당 함수에만 사용되는 로컬 데이터와 다른 모든 함수와 공유하는 전역 데이터를 통해 동작한다.

 

아래 코드는 절차지향 코드의 예시이다.

// 인증 API
Account account = findOne(id);
if(account.getState() == DELETED) { ... }

// 암호 변경 API
Account account = findOne(id);
if(account.getState() == DELETED) { ... }

 

위 코드는 상태 정보(State) 데이터를 이용해 인증 및 암호 변경을 처리하는 코드이다. 

시간이 흘러 요구사항이 추가되어 아래와 같이 변경되었다.

 

// 인증 API
Account account = findOne(id);
if(account.getState() == DELETED || 
   account.getBlockCount() > 0 ||) { ... }

// 암호 변경 API
Account account = findOne(id);
if(account.getState() == DELETED || 
   account.getBlockCount() > 0 ||) { ... }

 

위 코드는 요구사항에 따라 account.getBlockCount() > 0이라는 조건이 추가된 모습을 보여준다.

State 뿐만이 아니라 BlockCount도 검사하는 코드로 변경되었다. 

시간이 흘러 요구사항이 또 추가되어 아래와 같이 변경되었다.

 

// 인증 API
Account account = findOne(id);
if(account.getState() == DELETED || 
   account.getBlockCount() > 0 ||
   account.getEmailVerifyStatus() == 0) { ... }

// 암호 변경 API
Account account = findOne(id);
if(account.getState() == DELETED || 
   account.getBlockCount() > 0 ||
   account.getActiveStatus() == ENABLED) { ... }

 

인증 API에는 Email 인증 상태 정보를, 암호 변경 API에는 계정 활성화 상태 정보를 체크하는 코드가 추가되었다.

시간이 갈수록 요구사항이 추가 또는 변경되기 마련이다. 절차 지향 코드 방식을 사용하면 요구사항 추가 또는 변경에 영향을 받는 코드를 모두 수정해야 한다. 프로젝트 규모가 클수록 반복작업이 늘어난다.

 

또한 일반적으로 절차지향 프로그래밍에서의 데이터는 전역 데이터라고 볼 수 있다. 즉 아래 이미지와 같이 모든 메서드로부터 데이터가 변경될 수 있다. 이는 개발자 부주의에 의한 데이터 변경을 초래하고, 해당 데이터와 연결된 메서드들에게 영향을 미칠 수 있다.

 

객체지향

객체지향은 객체(Object)와 클래스(Class)를 기반으로 한 프로그래밍 방식이다. 객체지향에서 데이터는 객체의 메서드를 통해 서로 통신한다. 각 객체는 자신의 데이터와 메서드를 가지고 있다. 

 

https://www.learncomputerscienceonline.com/object-oriented-programming/

 

객체는 현실 세계에 존재하는 '독립적이고 명확히 존재하는 어떤 것'을 의미한다. 사람, 자동차, 볼펜, 개 등이 있다.

각 객체는 객체 고유의 정체(identity)와 상태(state)를 가진다. 상태는 객체가 가지는 멤버 변수에 의해 정의된다. 객체의 행동(behavior)은 객체의 멤버 메서드에 의해 정의된다.

즉 객체는 내부 데이터(상태)와 메서드(행동) 그리고 모든 다른 객체와 구별될 수 있는 정체(메모리 변지)를 가지고 있다.

 

https://www.learncomputerscienceonline.com/object-oriented-programming/

 

객체들은 프로그램 실행 시 생성되는 런타임 개체(entity)들이다. 객체 생성을 위해서는 메모리 할당을 위한 자원이 필요하다. 

 

*개체: 사물의 속성을 담고 있는 하나의 정보 단위.(출처:나무 위키)

 

객체는 클래스 안에서 정의된다. 즉 클래스는 객체 생성의 기반(template)이라고 볼 수 있다.

 

객체지향 예시

 

자동차 객체가 있다고 가정하자.

자동차 객체는 다음과 같은 상태(state), 행동_메서드(behavior), 정체(identity)를 가질 수 있다.

 

객체 상태(state) 행동(behavior) 정체(identity)
Car Colour Start Registration Number
Brand Stop Chassis Number
Model Move Owner

 

객체의 상태는 프로퍼티(데이터)로 정의되며, 변수(variable)로 표현된다.

객체의 행동은 메서드에 의해 표현된다. 개발자는 유연하게 객체의 행동을 메서드를 통해 정의할 수 있다.

객체는 고유의 정체를 가진다.

 

객체지향에서 클래스의 역할

클래스는 객체를 구성하는 변수, 메서드 등을 하나로 묶는다. 이를 통해 객체는 하나의 고유한 객체로서 존재한다.

프로그램은 객체 하나하나를 정의한 클래스들의 집합으로 이루어져 있다.

 

클래스가 객체의 설계도라면, 객체는 설계도를 통해 완성된 하나의 무엇이다.

 

참조

https://www.learncomputerscienceonline.com/procedural-programming/

 

Procedural Programming | Procedural Programming Paradigm Explained

Comprehensive Guide to Procedural Programming. Important Features, advantages, disadvantages, program organization of procedural programming.

www.learncomputerscienceonline.com

https://www.learncomputerscienceonline.com/object-oriented-programming/

 

Object Oriented Programming | OOP Principles Explained With Example.

Object Oriented Programming concepts simple explanation for beginners. OOP concepts Inheritance , Encapsulation , Abstraction , Polymorphism.

www.learncomputerscienceonline.com

https://brunch.co.kr/@artiveloper/20

 

객체지향 프로그래밍(OOP)의 기본원리

Object Oriented Programming | 객체지향 언어이면서 자바 기반의 언어인 , '스몰토크'의 다섯 가지 기본 특성에 대해서 앨런 케이가 요약한 내용이다. 1. 모든 것이 객체다. : 객체를 변수라고 생각하자.

brunch.co.kr

반응형