본문 바로가기

웹 기술 쌈싸먹기/용어정리

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

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

 

  • 객체지향 프로그래밍 생활코딩에서 정리해준 개념을 바탕으로 정리해 보았다~ 설명을 참 쉽고 친절하게 잘해주신다!
객체 Object
지향 Oriented
프로그래밍 Programing

객체지향 프로그래밍은 줄여서 OOP라고 부른다.

1) 절차적 프로그래밍 언어(Procedure Programming)

  • 명령이 순차적으로 실행된다. 대표적인 예로는 c언어가 있다.
  • 자동차 제조를 예로 들자면, 자동차는 엔진, 차체, 핸들, 의자, 바퀴 순으로 차례대로 만들어져야 한다. 서로 분리가 안되어 있고, 순서가 틀려서도 안된다.
  • 따라서 실행속도가 빠르다가 장점.
  • 엄격한 실행순서가 정해져있어서 비효율적인게 단점.
  • 절차적 프로그래밍 언어로 구성된 시스템은 시스템중 한 부분이 고장이나면 시스템을 전체 수리해야되서 유지보수의 어려움이 존재하는게 단점.

👉 절차적 프로그래밍

 

 

2) procedural functions routine subroutine

👉 procedural functions routine subroutine

  • procedural functions routine subroutine -> 함수라는 것을 이용해서 기능성있는 프로그래밍을 하는 것이라고 부른다.

 

 

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

  • 객체지향 프로그래밍(Object Oriented Programing)언어와 절차적 프로그래밍 언어(Procedure Programming)는 서로 대립되는 것이아니다! 서로 대립되는 기반위에서 객체지향 프로그래밍이 탄생한 것이고 절차적 프로그래밍 언어를 보완해주는 역할을 하는 것이다.
  • 절차지향 프로그래밍은 함수라는 것이 존재하는 반면, 객체지향은 함수 + 객체라는 것이 추가로 존재하는 것이다.

 

👉 감당할 수 있는 그릇의 크기가 다르다.

👉 우리가 코드를 작성하면 코드간의 간섭도는 기하급수적으로 높아진다.
간섭도가 증가하게 되면 인간이 감당할 수 없는 영역에 도달하게 되고 복잡하게됩니다.
인간이 감당할 수 없는 복잡도에 도달한 소프트웨어는 소프트하다 할 수 없다!

복잡한 부분의 복잡성을 낮추지 않는다면 우리가 만드는 프로그램을 더 복잡한 것으로 나아갈 수 없다!

 

👉 장난감을 담기 위한 그릇

  • 프로그램에서 수납상자와 같은 역할을 하는 그릇들은 절차지향 언어에서 function(method, subroutin)이 있었다.

 

  • 우리는 프로그래밍을 하기위해 위에그림을보면 do라는 함수만 호출해서 do 함수의 기능을 사용할 수 있다.

 

  • 똑같은 기능들을 묶어서 객체란 것을 만들고 그룹핑하여 정리정돈하였다. 이렇게 정리정돈 하는 것이 객체지향의 핵심이라고한다.

 

 

4) 객체지향 언어의 특징

  • 객체지향언어의 특징은 크게 캡슐화, 상속, 다형성, 추상화 4가지로 나눌 수 있습니다.

1. 캡슐화

  • 데이터와 알고리즘을 하나로 묶어 하나의 캡슐처럼 만드는 것입니다. 이 특징 때문에 데이터와 코드의 형태를 외부에서 알 수 없습니다.
  • 당연히 캡슐화되어있지 않은 데이터와 코드는 사용하기 어렵습니다.

 

2. 상속

  • 부모가 자식에게 유전자를 물려주듯, 상위 클래스의 모든 것을 하위 클래스가 이어 받는 것입니다.

 

3. 다형성

  • 상속과 연관된 개념으로, 하나의 객체가 다른 여러 객체로 재구성되는 것입니다.
  • 부모가 쌍둥이 자식을 낳으면 부모의 유전자가 두 명의 자식으로 재구성되는 것과 같은 이치입니다.
  • 하지만, 그렇다고 해서 두 쌍둥이(재구성된 객체들)의 유전자가 부모(원 개체)의 유전자와 똑같다고 볼 수는 없습니다.
  • 자바의 오버로드, 혹은 오버라이드 다형성이 이 다형성을 드러내는 대표적인 예입니다.

 

4. 추상화

  • 실존하는 객체의 여러 특성 중, 프로그램을 만드는데 필요한(공통적인) 부분만 파악해서 추출하고 필요하지 않은 것은 제거하는 것입니다.

 

 

참고 : https://www.youtube.com/watch?v=dy9yQIx38u8