Language

[Language] 절차지향과 객체지향

Ella_K 2023. 3. 13. 16:08

절차지향 (Procedural Programming)

일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 프로그래밍 방법

데이터와 기능(함수)으로 나누어서 기능의 목록을 절차적으로 수행

 

장점

  • 초기 프로그래밍 언어로, 컴퓨터와 처리구조가 비슷해 실행 속도가 빠르다.
  • 적은 개발 비용 및 시간

 

단점

  • 유지보수의 어려움 - 디버깅이 어려움
모든 구성 요소가 유기적으로 연결되어 있다는 것은, 하나가 고장 났을 때 시스템 전체가 고장난다는 의미이다.
문제를 해결하기 위해 일부분이 아닌 시스템 전체를 수리해야한다.
  • 엄격하게 순서가 정해져 있어 비효율적
실행 순서가 정해져 있어 코드의 순서가 바뀌면 결과가 달라질 가능성이 높다. 즉, 언어의 융통성이 부족하여 생산 효율이 떨어진다.
  • 과도한 전역변수 사용
모든 함수에 개방되어 잇어 값을 잘못 설정하게 될 수 있다.
  • 프로그램 이해가 어려워짐
함수가 많아지면 어떻게 상호작용하는지 이해하기 어려움

 

언어

FORTRAN, COBOL, PASCAL, C, BASIC


객체지향 (Object-oriented Programming)

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

 

클래스와 객체

클래스: 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보

인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

 

장점

  • 코드 재사용 용이
남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.
  • 유지보수가 쉬움
절차 지향 프로그래밍에서는 코드를 수정해야 할 때 일일이 찾아 수정해야하는 반면, 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.
  • 대형 프로젝트에 적합
클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.

 

단점

  • 느린 개발 속도
모든 객체의 역할과 기능을 이해해야 하기 때문에 설계시 많은 시간과 노력이 필요
  • 느린 실행 속도
객체지향언어의 처리 속도는 절차지향언어보다 느리다.
  • 객체가 많으면 용량이 커질 수 있음

 

언어

JAVA, Objective-C, Swift, C++, Python, etc.

 

특징

1. 추상화

객체의 공통적인 속성과 기능을 추출하여 정의하는 것

실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요 없는 특성을 제거하는 과정

💡 여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다.

즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.

 

2. 캡슐화

하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶은 것

접근 제어자를 통한 정보를 은닉 한다. 보호된 변수는 getter나 setter등의 메서드를 통해서만 간접적으로 접근이 가능하다.

💡 getter, setter를 사용하는 이유 (접근제어자 활용)

멤버변수에 직접 접근하지 못하게 private으로 접근 지정자를 설정하고, public으로 getter, setter 메서드를 만들어 메서드를 통해 데이터에 접근한다.

getter, setter를 사용하면 메서드를 통해서 데이터를 접근하기 때문에, 메서드 안에서 매개변수같이 어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있게 제한하거나 조절할 수 있다. (외부로부터 데이터를 보호)

 

3. 상속

절차지향 프로그래밍에서도 라이브러리를 통해 남이 짜놓은 코드를 가져와 사용할 수 있다. 하지만 내 의도에 맞게 수정하게되면 다른 라이브러리가 되어 버전에 따라 동작하지 않을 수 있고, 불필요한 코드의 수정작업을 해야한다.

상속은 부모클래스의 속성과 기능을 상속받아 그대로 사용할 수 있게 하고, 기능의 일부분을 변경해야 할 경우 상속 받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 한다.

 

4. 다형성

  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다. 형태가 같은데 다른 기능을 한다. 즉 오버라이딩(Overriding), 오버로딩(Overloading)이 대표적인 예이다.

오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것.

오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.

  • 자바에서 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하는 것
    1. 코드의 양을 줄일 수 있고
    2. 매개변수에 조상타입을 이용하여 자손 인스턴스들을 동적으로 제공받을 수 있다.
    3. 조상타입의 참조변수 배열을 사용해 공통의 조상을 가진 서로 다른 종류의 객체를 배열로 묶어서 다룰 수 있다.

비교

https://brownbears.tistory.com/407


source

https://lxxyeon.tistory.com/86

 

객체지향(OOP) VS 절차지향(PP) 프로그래밍

객체지향, 절차지향 프로그래밍의 정의, 특징, 장단점, 종류에 대해 알아보고 비교해보자 그전에, 🔥 간단 이해 🔥 ✔️ 절차식 방법은 프로그램을 위 그림같이 데이터와 기능(함수)으로 나누

lxxyeon.tistory.com

https://brownbears.tistory.com/407

 

절차지향 VS 객체지향

절차지향(Procedural Programming)이란? 절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입

brownbears.tistory.com

https://velog.io/@keembogeul/2.-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%B4%EB%9E%80

 

객체 지향 프로그래밍(Object Oriented Programming)

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해

velog.io

https://kk-programming.tistory.com/121

 

[Java] 객체지향 프로그래밍2 (다형성, 추상클래스, 인터페이스)

다형성 다형성: 여러가지 형태를 가질 수 있는 능력 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현 조상 클래스 타입의 참조

kk-programming.tistory.com

 

'Language' 카테고리의 다른 글

[Language] SOLID  (0) 2023.03.13
ASCII Code (아스키 코드)  (0) 2023.01.22