절차지향언어? 객체지향언어?

Minji Lee·2024년 1월 8일
0

CS공부

목록 보기
3/6


절차지향언어

프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식 → Top-Down 방식

ex) C언어, Pascal 등

[특징]

  • 순차적으로 실행
  • 데이터 중심으로 구현
  • 데이터와 함수를 별개로 취급
  • 모든 함수는 데이터 공유 가능

[장점]

  • 객체나 클래스 구현 없이 바로 프로그램 코딩 가능
  • 필요한 기능을 함수로 만들어 두기 때문에 같은 코드 복사하지 않고 호출하여 사용 가능
  • 프로그램의 흐름 쉽게 추적 가능

[단점]

  • 각 코드가 긴밀하게 연관되어 있기 때문에 수정하기 힘듦 → 새로운 데이터나 기능 추가 어려움
  • 프로그램 전체에서 코드 재사용 불가능하므로 프로젝트 개발 비용과 시간이 늘어남
  • 디버그가 어려움

객체지향언어

자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행순서와 흐름을 짜는 방식Bottom-Up 방식

ex) Java, Python, C++ 등

[특징]

  • 객체는 자신만의 기능 제공
  • 객체들끼리 서로 연결되어 다른 객체가 제공하는 기능 사용 가능
  • 객체지향 프로그래밍은 절차를 무시하는 것이 아닌 모듈화를 통해 수행절차를 간소화해주는 것! 실행 순서는 존재하며 순서대로 코드 실행됨!

[장점]

  • 재사용이 쉽고, 확장하기 좋아서 유지보수가 쉬움
    • 상속, 캡슐화, 다형성의 특징을 지님
  • 자연스러운 모델링
    • 관련이 많은 객체의 상호작용을 생각해 실세계에 대한 모델링을 좀 더 쉽게 해줌
  • 보안성
    • 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 해줌

[단점]

  • 느린 실행 속도
    • 캡슐화와 격리구조로 실행 속도가 절차지향언어보다 느림
  • 느린 개발 속도
    • 모든 객체의 역할과 기능을 이해해야 하므로 프로그래밍에 많은 시간 소요
  • 메모리 용량
    • 객체 단위의 구성으로 필요한 메모리 비용이 큼

객체지향 주요 특징 5가지

  1. 추상화(abstraction)

    구체적으로 정의하는 것이 아닌 필요한 정보만 중심으로 간소화 하는 것

  2. 캡슐화(Encapsulation)

    객체가 독립적인 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리

  3. 상속성(Inheritance)

    하나의 클래스가 가진 데이터나 기능을 다른 클래스가 그대로 물려받는 것

    기존 코드 재사용하여 확장 가능

  4. 다형성(Polymorphism)

    하나의 클래스나 메서드가 다양한 방식으로 동작 가능

    오버 라이딩(overriding): 상위 클래스의 메서드를 하위 클래스에서 재정의
    오버 로딩(overloading): 같은 이름의 메서드를 여러개 정의하고, 매개변수의 유형과 개수를 다르게하여 다양한 유형 호출

  5. 정보은닉(Information hiding)

    객체 간의 의존성을 낮춰(추상화) 기능의 교체나 변경이 쉽도록(다형성) 하는 동시에 쉽게 변경될 수 있는 내용 또는 비밀을 내부에 감추고 쉽게 변경되지 않을 내용만 외부로 노출(캡슐화)

    → 캡슐화, 추상화, 다형성의 개념들은 정보은닉을 위해 사용되는 개념들임!

객체지향 설계 원칙(SOLID)

  1. 단일 책임 원칙(Single Responsibility Principle/SRP)

    한 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함

  2. 개방-폐쇄 원칙(Open/Closed Principle/OCP)

    클래스, 모듈, 함수 등은 확장에 대해 열려 있어야 하고, 변경에 대해서는 닫혀 있어야 함

  3. 리스코드 치환 원칙(Liskov Substitution Principle/LSP)

    프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함

  4. 인터페이스 분리 원칙(Interface Segregation Principle/ISP)

    큰 덩어리의 인터페이스를 구체적이고 작은 단위로 분리하여 클라이언트가 꼭 필요한 메서드만 이용할 수 있게 함

  5. 의존관계 역전 원칙(Dependency Inversion Principle/DIP)

    상위 모듈은 하위 모듈에 의존해서는 안되며, 추상화는 세부 사항에 의존해서는 안됨


참고자료

객체지향 vs 절차지향??

객체지향과 절차지향

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

[OOP] 객체 지향의 정보 은닉

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

0개의 댓글