[JavaScript] : 객체 지향 프로그래밍(OOP)

먹보·2023년 1월 3일
0

MUK_BO's JavaScript

목록 보기
16/18
post-thumbnail
post-custom-banner

객체 지향 프로그래밍 (Object-Oriented Programming, 이하 OOP)는 이전에 자바스크립트가 무엇 인지에 대해 설명을 했을 때, 잠깐 본 적이 있을 것이다..

가볍게 넘어가기에는 여러 유명한 언어들의 기반이기 때문에 한 번 쯤은 조금 더 깊게 파고들 필요가 있고, 앞으로 배울 클래스에 대해 공부할 때 이걸 이해하고 넘어가면 조금 더 쉽게 자바스크립트 언어를 이해 할 것 같아 적어 본다

✍️ 정의

객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

사실 여기 저기 둘러봐도 OOP에 대한 고정된 정의가 있지 않고 특성을 풀어 설명한 것만 찾을 수 있어 그나마 내가 조금 더 이해하기 쉬운 용어를 가져와 정리해왔다.

💡 OOP 기반의 언어는 다음과 같다. C++, C#, Java, Python, JavaScript, Ruby, Swift

정의가 쉽게 이해하기 어려우면, 특징을 이해해보자.

✍️ OOP의 특징

📝 추상화

  • 객체에서 공통된 속성(프로퍼티)과 행위(메서드)를 추출 하는 것
  • 정보의 접근 권한을 공통적으로 묶어 컨트롤하여 중복된 행위를 최소화하여 프로그램을 간소화 하는 것

쉽게 생각해서 OOP는 하나의 커다란 통상적이자 추상적인 개념이 있고 그걸 본 떠 그 개념을 가진 조금 더 구체적인 무엇가를 찍어 낼 수 있게 한다.

📝 캡슐화

  • 자료 구조와 메서드(객체 내 함수)를 결합 시켜 하나로 묶는 것
  • 묶은 자료를 쉽게 재활용 할 수 있다.

📝 상속

  • 만들어진 캡슐의 내용물을 하위 캡슐로 물려줘 부모와 자식 관계와 같은 상속 관계가 만들어진다.

📝 다형성

  • 하나의 변수 명, 함수 명이 상황에 따라 다른 의미로 해석 될 수 있음
  • 하나의 요소 내에 여러가지 연관된 개념을 묶을 수 있음

이러한 다양한 특징을 가지고 있으며, 현재 많이 쓰이고 있는 OOP임에도 장/단점을 가지고 있다.

✍️ OOP의 장/단점

📝 장점

  • 객체 단위로 모듈화 시켜 개발 가능하기 때문에 업무 분담이 편리
  • 유지 보수 용이
  • 코드의 재사용 용이

📝 단점

  • 처리 속도가 상대적으로 느림
  • 객체 수가 증가함에 따라 용량이 늘어남
  • 설계 시간 증가

객체 지향 프로그래밍 언어라고 해서 자동적으로 우리가 하는 코딩의 결과가 객체 지향적으로 설계되는 것은 아니기 때문에 다음과 같은 원칙을 준수하여 설계해야 한다.

✍️ SOLID (객체 지향 설계 원칙)

  • 단일 책임 원칙 (SRP, SINGLE RESPONSIBILITY PRINCIPLE)
    • 하나의 클래스는 하나의 책임만 가져야 한다.
  • 개방-폐쇄 원칙 (OCP, OPEN/CLOSED PRINCIPLE)
    • 설계 시 확장성은 고려해야 하나 무분별한 변경은 막아야 한다.
  • 리스코프 치환 원칙 (LSP , LISKOV SUBSTITUTION PRINCIPLE)
    • 상위에서 하위로 상속 시, 상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다.
  • 인터페이스 분리 원칙 (ISP, INTERFACE SEGREGATION PRINCIPLE)
    • 범용 인터페이스 하나 보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋으며, 클라이언트를 기준으로 분리해야 한다.
  • 의존 관계 역전 원칙 (DIP, DEPENDENCY INVERSION PRINCIPLE)
    • 추상화에 의존해야 한다.
profile
🍖먹은 만큼 성장하는 개발자👩‍💻
post-custom-banner

0개의 댓글