절차지향 vs 객체지향

고장난 고양이·2022년 7월 18일
0

개발지식

목록 보기
15/25

✅ 절차지향이란?

절차지향(procedural programming)이란, 순차적인 처리가 우선시되며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다.

장점

  • 초기 프로그래밍 언어로, 컴퓨터 처리구조와 비슷해 실행속도가 빠르다.

단점

  • 유지보수의 어려움
    • 하나가 고장나면 시스템 전체가 고장남
    • 문제를 해결하기 위해서는 전체를 수정해야함
    • 디버깅(프로그램의 문제를 찾아내어 고치는 과정)이 매우 힘듦
  • 순서가 엄격히 정해져있음으로 인한 비효율성
    • 코드의 순서가 바뀌면 결과가 바뀔 가능성이 높음
    • 언어의 융통성이 부족 -> 생산성 하락
  • 과도한 전역변수의 사용
    • 값을 잘못 설정하게될 가능성이 높음
  • 프로그램의 이해가 어려워짐
    • 함수가 너무 많아져서 함수간의 상호작용을 판단하기 어려움

예시

FORTRAN, COBOL, PASCAL, C ...etc

✅ 객체지향이란?

객체지향(Object-Oriented Language)란 컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법이다.

특징

📌 캡슐화

클래스의 내부변수와 메소드를 하나로 패키징하는 것

-> 정보 은닉 : 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다.

참고
https://blog.itcode.dev/posts/2021/08/08/encapulation

📌 상속

상속은 객체들간의 관계를 구축하는 방법이다.

  • 코드를 재사용할 수 있다. : 하위 클래스는 상위 클래스의 메소드나 필드를 이용할 수 있습니다.

  • 다형성 구현

  • but 상위클래스에 강하게 결합하기 때문에 변화 및 확장에 어려움을 겪을 수 있다.

  • 따라서 상속은 클래스의 행동을 확장할 때가 아니라 정제할 때 사용하는 편이 좋습니다.

참고
https://steady-coding.tistory.com/451

📌 다형성

다형성은 같은 모양의 코드가 다른 행위를 하는 것을 나타냅니다.

  • Overriding
    메소드 오버라이딩은 상위 클래스의 메소드를 재정의하는 것을

  • Overloading
    메소드 오버로딩은 한 클래스 내에 이미 사용하는 이름의 메소드가 있더라도 특정 규칙을 지킨다면 동일한 이름의 메소드를 정의하도록 허용하는 기술

    • 메소드의 이름이 같아야한다.
    • 매개 변수의 개수 또는 타입이 달라야한다.
    • 매개 변수는 같고, 리턴 타입이 다를때는 성립하지 않는다.
    • 오버로딩된 메소드들은 매개 변수로만 구분된다.

참고
https://steady-coding.tistory.com/446

📌 추상화

객체들의 고통 속성과 행위를 추출하는 것을 추상화라고 한다.

예를 들어 맥북과 삼성 노트북이 존재하면 둘다 노트북이라는 공통특징이 있기에 노트북이라는 속성과 행위를 추출해서 추상화 객체를 만드는 것과 같다.

참고
https://wpaud16.tistory.com/94
https://fierycoding.tistory.com/42

장점

  • 재사용성
    상속으로 코드 재활용을 높일 수 있다.

  • 생산성 향상
    잘 설계된 클래스는 개발의 생산성을 높인다.

  • 모델링의 쉬움
    우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현 가능.

  • 유지보수의 우수성
    프로그램 수정 시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기 때문에 유지보수가 쉬워서 매우 경제적이라 할 수 있음.

단점

  • 느린 개발 속도
    모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요됩니다.

  • 느린 실행 속도
    객체지향언어의 처리 속도는 절차지향언어보다 느립니다.

  • 높은 난이도
    객체지향언어는 대체로 난이도가 높습니다. 특히 다중 상속이 지원되는 c++는 악명이 높습니다.

예시

JAVA,C++,swift,Python etc


참고
https://lxxyeon.tistory.com/86

profile
개발새발X발일지

0개의 댓글