[Javascript] 객체 지향 프로그래밍 (OOP_Object Oriented Programming)

wool·2022년 7월 22일
0

Javascript

목록 보기
6/10

intro


객체 지향 프로그래밍 이라는 패러다임이 만들어지기 전까지는 절차지향 프로그래밍을 사용했었다.

절차 지향 프로그래밍은 절차적으로 생각하며 함수로 이동하는 것이 전부였다.

초기의 C, 포트란 같은 언어들이 절차적인 언어이다.

객체 지향 프로그래밍이 만들어진 이후에 절차지향이 아닌

객체지향 프로그래밍을 사용하고 있다.
객체지향 프로그래밍이란 어떤 것이며 어떤 이유로 많이 사용하는지 지금부터 알아보고

왜 객체 지향 프로그래밍을 쓰고 있는 것인지 알아보려고 한다!

객체 지향 프로그래밍이란?


OOP(객체 지향 프로그래밍)이란

  • 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론이다.
  • OOP의 모든 것은 객체로 그룹화 된다
  • 프로그램 설계 철학 중 하나이다!
  • 객체지향 프로그래밍에는 class와 instances에 대한 개념이 필요한데 이에 대한 글은 따로 정리 해 두었다! ⇒ 블로그 링크 첨부
  • OOP는 코드 재사용성과 생산성의 향상 효과를 볼 수 있다.

  • 유지보수의 편의성 덕택에 협업이 중요하다

  • 규모가 큰 대형 프로젝트에 사용되는 프로그래밍 이론이다.

  • 객체지향 언어

    • class 라고 부르는 데이터 모델의 청사진을 사용해 코드 작성
    • 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있음
    • JavaSctipt가 객체 지향으로 작성이 가능하다!

OOP의 장점


코드 재사용성 증가

  • 상속을 통해 프로그래밍 시 코드의 재사용을 높일 수 있다.

생산성 향상

  • 잘 설계 된 class를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상 시킬 수 있다

자연적인 모델링

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

유지보수의 우수성

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

OOP의 단점


개발 속도가 느리다

  • 객체가 처리하려는 것에 대한 정확한 이해가 필요하기 때문에 설계 단계부터 많은 시간이 소모된다

실행 속도가 느리다

  • 객체 지향 언어는 대체적으로 실행 속도가 느리다

코딩 난이도가 높아진다

  • 다중 상속이 지원되는 C++같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

OOP의 특징


객체 지향 프로그래밍의 가장 큰 특징은 class를 이용해 연관 있는 처리 부분(함수)과 데이터 부분(변수)을 하나의 객체(instances)로 묶어 생성해 사용한다는 점이다.

객체 지향 프로그래밍의 특성은 총 네가지로 다음과 같다.

캡슐화 (Encapsulation)

캡슐화는 외부에서 데이터(속성)와 기능(메서드)을 따로 정의하는것이 아닌 하나의 객체 안에 묶어서 넣는 것을 말한다.

데이터가 하나로 묶일 때 구현은 숨기고 동작은 노출시킨다.

이때 데이터와 메서드들은 느슨하게 결합된다.

💡 Loose Coupling(느슨한 결합)이란? ⇒ 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다! 즉 순서에 상관없이 바구니에 담아두고 필요한 정보만 꺼내서 사용 할 수 있게 결합 해 둔다는 의미이다. 때문에 언제근 구현을 수정하기에 용이하다

추상화 (Abstraction)

객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다.

즉, 내부 구현은 아주 복잡하지만 실제로 노출 되는 부분은 단순하게 만든다는 개념이다.

실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악하여 필요 없는 특성을 제거하는 과정이 추상화에 해당되는 과정이다.

추상화를 한 문장으로 정리 하자면, 객체들의 공통된 특징을 파악해 정의 해 놓은 설계 기법이라 할 수 있다.

추상화를 통해 인터페이스가 단순해진다!

상속(Inheritance)

부모 class의 특징을 자식 class가 물려받는 것을 상속이라고 한다.

조금 더 정확히 표현하자면, 기본 class의 특징을 파생 class가 상속 받는다 라고 할 수 있다.

OOP에서 상속이 꼭 필요한 이유는 코드의 중복을 방지하기 위해서 이다.

코드의 중복이 많아지면 개발 단계와 유지보수에서 많은 비용이 들게 된다.

상속관계를 맺으면 자식 객체를 생성할 때 부모 class의 속성들을 자동으로 물려받기 때문에 자식class에서 또 정의할 필요가 없다.

다형성(Polymorphism)

다형성이란 상속과 연관 있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러 형태(객체)로 재구성 되는 것을 말한다.

쉽게 말하면 한 부모의 밑에서 태어난 자식들이 조금씩 다르다는 것이다.

오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예라 할 수있고, 이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding)이라고 한다.

간단하게 설명하자면,

오버라이딩은 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말한다.

오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현하는 것을 말한다.

오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 개수나 데이터 타입이 달라야 한다.

다형성을 사용하면 같은 이름의 속성을 유지함으로서, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않는다.

API가 많아질수록 복잡성은 증가하기 때문에 다형성은 유용하며 코드 재사용성을 늘려주어 유지보수가 용이하도록 도와주는 개념이다.

참고

https://velog.io/@gillog/OOP객체-지향-프로그래밍

profile
허위 정보 발견 시 댓글로 남겨주시면 감사하겠습니다.

0개의 댓글

관련 채용 정보