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

hyomkim·2021년 2월 2일
0

프로그래밍 지식

목록 보기
1/5

절차적 프로그래밍(절차지향 프로그래밍)

프로그램의 실행 절차에 중점을 둔 프로그래밍의 일종 입니다.
다른 프로그래밍 보다 프로그램이 순차적으로 동작하는것에 큰 의미를 뒀습니다.

절차지향 언어는 대표적으로 C가있습니다.

장점
1. 개인 프로젝트에 적합한 언어입니다.
2. 객체지향 프로그래밍과 비교하여 속도가 빠른편입니다.

단점
1. 유지보수가 어렵습니다.
2. 코드의 순서가 바뀌면 의도한 대로 프로그램이 동작하지 않을 수 있습니다.
3. 프로그램의 분석과 디버깅이 어렵습니다.
4. 위와 같은 단점들로 인해 대형 프로젝트에는 부적합합니다.

객체?

네이버 사전을 검색해 보면 다음과 같이 나옵니다.

객체(Object, 客體)
주체에 반대되는 말. 객관과 거의 동일한 뜻으로 1) 일반적 대상, 사상(事象), 2) 주체와 연관됨으로써 이 주체의 행위가 지향하는 것을 의미한다. 더 좁은 뜻에서 인식론적으로 보면 경험을 통해서 의식에 주어진 대상 또는 인식 주체와의 관계에서 본 실재(實在)라는 것이 된다.

이처럼 여러 뜻이 나오지만 그중 가장 중요한 키워드는 실재라고 할 수 있습니다.

객체는
1. 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터
2. 식별자에 의해 참조되는 공간
을 의미합니다.

객체는 변수, 자료구조, 함수 또는 메소드가 해당 될 수 있습니다.

절차적 프로그래밍에서의 객체
자료나 명령(프로시저, 함수)를 포함할 수 있지만, 두 가지를 동사에 포함하지는 않습니다.

객체지향 프로그래밍에서의 객체는 클래스의 인스턴스 입니다.
클래스 객체는 자료와 그 자료를 다루는 명령의 조합을 포함하여 객체가 메시지를 받고 자료를 처리하며 메시지를 다른 객체로 보낼 수 있도록 합니다.

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

컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위(객체)들의 모임으로 파악하고자 하는 프로그래밍 패러다임 입니다.

이전엔 프로그램이 어떤 논리를 가지고 동작하는지에 중점을 뒀다면,
객체지향 프로그래밍은 어떤 데이터를 다루는가 라는 데이터에 중점을 둔 사고방식을 가집니다.

객체지향 프로그래밍의 4원칙

  1. encapsulation(캡슐화)
    객체 내의 맴버변수에 직접적인 접근 제한하는 것을 의미합니다.
    맴버변수를 private으로 선언하고 getter와 setter를 통해 접근하는 것을 생각하면 됩니다.

  2. abstraction(추상)
    큰 객체를 이루는 작은 객체들이 또 그 작은 객체를 이루는 더 작은 객체들로 이루어져 있는데 이 작은 객체들을 공통된 하나의 객체로 보자는 것은 의미합니다.
    end-user가 큰 객체를 다루기위해 큰 객체 안의 작은 객체들이 무엇으로 이루어져 있는지 다 알 필요가 없습니다.
    즉 객체 내부의 구조를 end-user가 알 필요없이 사용할 수 있게 해주는 것을 의미합니다.

  3. inheritance(상속)
    객체를 생성하며 공통된 특성을 가진 부모객체를 만들고 그 부모로 부터 공통된 부분을 상속받으며 추가적으로 필요한 부분을 확장시켜 자식객체를 만드는 것을 의미합니다.

  4. polymorphism(다형성)
    하나의 메소드가 다향한 형태로 동작할 수 있음을 의미합니다.
    추상 클래스를 선언 하여 해당 클래스를 다향한 형태로 사용하거나(오버라이딩) 같은 메소드에 입력되는 인자에 다른 동작을 하는 것(오버로딩) 을 예로 들을 수 있습니다.
    즉, 간단하게 배열처럼 표현하자면 이런 느낌입니다.

    다형성 = {오버로딩, 오버라이딩}

객체지향 프로그래밍의 반대는 절차적 프로그래밍?


(아마 위의 그림이 둘의 차이점을 잘 설명한 듯 합니다. 그러나...)

객체지향 프로그래밍의 반대는 절차적 프로그래밍이 아닙니다.

  1. 절차적 프로그래밍이라고 해서 객체를 다루지 않는 것이 아닙니다.
  2. 마찬가지로 객체지향 프로그래밍이라고 해서 절차가 없는 것이 아닙니다.

객체지향 프로그래밍의 반대가 절차적 프로그래밍이다 라는 인식 자체가 잘못됨을 꼭 기억해야 합니다.

여기서 부터는 개인적인 생각입니다.

공부를 하다가 생각하게 된 부분이지만,
애초에 ~~프로그래밍 이라는 개념이 특정 언어에 속하는 법칙 같은 느낌 보다는
프로그래밍을 함에 있어서 프로그래머가 가장 중요하게 생각하는 것을 기준으로 선택하는 듯 합니다.

이를테면 절자적 프로그래밍은 프로그램이 동작하는 절차에 중점을 둔 방식이고
객체지향 프로그래밍은 프로그램 내부에서 다뤄지는 객체(데이터)의 컨트롤에 중점을 둔 방식이겠지요.
그리고 이러한 것들을 선택하는 것은 진행하려는 프로젝트의 속성과 잘 어울리는 방식의 프로그래밍을 선택해야 함을 의미하고, ~~프로그래밍 언어는 해당 프로그래밍을 구현하는데 특화된 언어 라고 할 수 있을듯 합니다.

어떤 프로그래밍을 사용할지 선택하는 순서는 아마도 이런 느낌이 아닐까요???
프로젝트에서 가장 주요시 해야하는 것 ->
이를 통해 프로그래밍을 선택 ->
선택한 프로그래밍에 가장 적합한 언어를 선택

References :
https://jeong-pro.tistory.com/95
http://www.incodom.kr/%EC%A0%88%EC%B0%A8_%EC%A7%80%ED%96%A5
https://gdtbgl93.tistory.com/149
https://m.blog.naver.com/atalanta16/220249264429

profile
C++을 좋아하는 조금 모자란 사람이랍니다!

0개의 댓글