[JavaScript] 객체 지향 프로그래밍 | 의미, 특징, 주요 개념

Eunji Lee·2022년 11월 18일
0

[TIL] JavaScript

목록 보기
15/22
post-thumbnail

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

의미

하나의 모델이 되는 청사진(blueprint)을 만들고→ class
그 청사진을 바탕으로 한 객체를 만드는→ instance object
프로그래밍 패턴

특징

  • 일종의 프로그램 설계 철학임
  • 모든 것은 객체로 그룹화됨
    • 한 번 객체를 만들면 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지됨
  • “데이터와 기능이 함께 있다”
    • 메서드와 속성이 존재함
  • 4가지 주요 개념을 통해 재사용할 수 있다

참고하면 좋은 자료 (유튜브 영상, 한글 자막o)
https://youtu.be/cg1xvFy1JQQ


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

기준절차 지향 프로그래밍객체 지향 프로그래밍
지향점구조(structure)객체(object)
구성요소함수(function)객체(object)
작동 방식단순히 별개의 변수와 함수로 순차적으로 작동데이터와 기능을 한꺼번에 묶어서 처리
예시초기의 프로그래밍 언어 (ex. C, Pascal 등)현재 대부분의 프로그밍 언어 (java, C++ 등)

참고하면 좋은 자료 (영문)
https://www.geeksforgeeks.org/difference-between-oop-and-pop/


주요 개념

Encapsulation(캡슐화)

  • 데이터(속성)와 기능(메서드)를 하나의 캡슐(객체)로 묶는 것
  • 느슨한 결합(Loose Coupling)에 유리 → 언제든 구현 수정할 수 있음
    • 느슨한 결합: 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아(속성과 메소드) 결합하는 것을 의미
      (예) 키보드의 작동 원리를 하나하나 구현하지 않는 대신에 키보드의 상태는 속성으로, 버튼 누르기나 글자 입력 등은 메소드를 정하는 것
  • 은닉화: 내부 데이터나 내부 구현이 외부로 노출되지 않음
    → 구현은 숨기되 동작은 노출
    → 어떻게 클래스에 접근/수정할지를 결정할 권한을 설정할 수 있음
  • 장점
    Reduce complexity + increase reusablility
    코드가 복잡하지 않고, 재사용성이 높아짐

Inheritance(상속)

  • 기본 클래스(base)의 특징을 파생 클래스(derived class)가 상속 받는다
  • 즉, 부모 클래스의 특징을 자식 클래스가 물려받는다
    ex. 부모 클래스(Human) 자식 클래스(baby)
  • 장점
    Eliminate redundant code
    불필요한 코드를 줄임 → 재사용성 높임

Abstraction(추상화)

  • 내부 구현은 복잡하지만 실제로 노출되는 부분은 단순함 ex) 스마트폰
  • 인터페이스: 클래스를 정의할 때, 속성과 메서드의 이름만 노출시켜서 사용을 단순화
  • 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의
  • 장점
    Reduce complexity + isolate impact of changes
    복잡성을 줄이고 변화에 대한 영향을 최소화함

Polymorphism(다형성)

  • 같은 메서드도 다른 방식으로 구현될 수 있음
  • 장점
    Refactor ugly if else if statements
    if else if 구문을 사용하지 않아도 메소드마다 작동 방식을 다르게 할 수 있음

참고하면 좋은 자료 (유튜브 영상, 한글 자막o)
https://youtu.be/IeLWSKq0xIQ

0개의 댓글