본문 바로가기

CS지식/개발 상식

[CS지식 - 개발 상식] 절차지향(PP) vs 객체지향(OOP)

1. 절차지향(PP)

  • 기능중심으로 바라보는 방식
  • 어떤기능을 어떤 순서로 처리하는가에 초점을 맞춤
  • 단점 - 유지보수의 어려음
            - 엄격한 실행순서로 인한 비효율적

→ 절차지향언어의 단점을 보안하기 위해 객체지향의 개념이 등장함

 

2.객체지향(OOP)

2-1. 객체지향 정의

  • Object Oriented Programming
  • 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식
  • 객체 : 프로그램상에서 구현할 대상
  • 클래스 : 객체의 '속성'과 '기능'을 정의한 설계도와 같은 것
  • 인스턴스 : 클래스의 내용대로 메모리상에 구현될 실재(일반적인 의미의 객체)

2-2. 객체지향 특성

  • 캡슐화
  • 상속
  • 추상화
  • 다형성
    이 특징들은 모두 유기적으로 연결된 개념

2-2-1. 캡슐화

  • 객체의 내부 구조 및 정보를 캡슐처럼 하나로 감싸 외부에서 볼 수 없게 은닉하여 보호하는 것
  • 완성도 : 높은 응집도(하나의 책임을 위한 메서드들이 너무 분산되지 않고 한 객체에 모여있는 정도)
  • 정보은닉 : 객체 안에서 밖으로 또는 밖에서 안으로 정보에 접근 할 수 없음

객체는 스스로 동작 할 수 있는 환경을 가지고(높은 응집도), 외부 의존을 최소화(낮은 결합도)하고 외부 침략을 제한 해야함

 

2-2-2. 상속

  • 자식클래스(서브클래스)가 부모클래스(슈퍼클래스)의 속성을 물려받는 것
  • 상속의 목적 : 추상과 구체화의 관계를 위한 것(공유x)

 

2-2-3. 추상화

  • 추상체 : 추상회된 객체(상위 객체)
  • 구상체 : 구체화된 객체(하위 객체)
  • 추상화는 상대적인 것 상위객체는 반드시 하위객체보다 추상적이여야함

 

2-2-4. 다형성

  • 하나의 객체나 메서드가 여러가지 다른 형태를 가질 수 있는 것
  • Overriding(오버라이딩) : 부모클래스로부터 상속받은 메서드를 자식클래스에서 재정의하여 사용하는 것
  • Overloading(오버로딩) : 메서드의 이름은 동일, 매개변수의 타입이나, 갯수를 달리하여 중복 정의함
                                              매개변수에 따라 특정 메서드가 호출 되는 것

 

2-3. 객체지향의 5가지 설계원칙( SOLID원칙)

  • Simple Responsibility Principle(SRP) : 하나의 클래스는 하나의 책임만 가져야한다
  • Open/ Closed Principle(OCP) : 클래스는 확장에 대해 열려 있어야 하고 변경에 대해서는 닫혀 있어야 한다
  • Liskov Substitution Principle(LSP) : 파생 클래스의 메소드는 기반 클래스의 메서드를 대체하여 사용 될 수 있어야 한다
  • Interface Segregation Principle(ISP) : 클라이언트가 사용하지 않는 메소드에 의존하지 않아야 한다
  • Dependency Inversion Principle(DIP) : 추상화된것은 구체적인 것에 의존하면 안된다
                                                                   (자주 변경되는 구체적인 것에 의존하지 말고 추상화된것을 참조)
    → SOLID원칙

 

3. 차이점

  객체지향(OOP) 절차지향(PP)
장점 코드의 재활용성이 높음
디버깅이 쉬움
생산성 향상
유지보수 우수성
컴퓨터의 처리구조와 유사
 → 실행속도가 빠름
단점 처리속도가 느림
설계에 많은 시간이 소요됨
개발속도가 느림
유지보수가 어려움
실행 순서가 정해져 있어 비효율적
과도한 전역변수의 사용
디버깅이 어려움
구현방법 기능 중심으로 메서드 구현 데이터 중심으로 함수구현
언어 JAVA, Object-C, Swift,C++,Python FORTRAN, COBOL,PASCAL, C, BASIC

 

 

 

참고)

https://velog.io/@sangmin7648/OOP%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-OOP-%EC%9E%98-%EC%84%A4%EA%B3%84%ED%95%98%EA%B8%B0

 

OOP의 특징과 OOP 잘 설계하기

객체지향 프로그래밍의 특징

velog.io

https://mangkyu.tistory.com/88

 

[기술면접] CS 기술면접 질문 - 프로그래밍 공통 (1/8)

1. 프로그래밍 공통 [ OOP란 ] OOP는 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법입니다. OOP

mangkyu.tistory.com

https://kadosholy.tistory.com/88

 

[Java] 객체지향언어란? 특징(캡슐화, 상속, 다형성)과 클래스, 객체, 인스턴스

객체지향언어의 특징(캡슐화, 상속, 다형성)과 클래스, 객체, 인스턴스 1. 객체지향언어란? 객체지향언어는 현실세상에서 우리가 관찰할 수 있는 모든 객체(ex, 자동차, 바퀴, 의자, 사람 등)는 자

kadosholy.tistory.com

https://lxxyeon.tistory.com/86

 

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

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

lxxyeon.tistory.com