프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 비트마스크
  • 알고리즘
  • nomadcoders
  • 내일배움카드
  • nomadcoder
  • 투포인터알고리즘
  • 국비지원
  • 스파르타코딩클럽
  • JavaScript
  • 자바스크립트비트마스크
  • 2023 인프콘 후기
  • 내일배움단
  • 코드스테이츠
  • 코딩프로젝트
  • 자바스크립트알고리즘
  • MySQL
  • vanilaJS
  • Til
  • 모던자바스크립트딥다이브
  • 자바스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

[JavaScript] 객체지향 프로그래밍 : OOP란 무엇인가?
JavaScript/JavaScript

[JavaScript] 객체지향 프로그래밍 : OOP란 무엇인가?

2022. 7. 22. 13:39

객체 지향 프로그래밍 : Object Oriented Programming

  • 말 그대로 객체의 개념에 기반을 둔 프로그래밍 패러다임이다.
    (여기서 패러다임이란 우리가 작성하는 코드의 스타일, 코드를 어떻게 작성하고 조직화 할 것인가에 대한 체계, 개념같은 것이다.)
  • 객체를 현실 세계의 개념이나 요소를 표현하기 위해 - 모델링 하기 위해서 사용한다. 사람이 현실 세계를 이해하는 방식을 모방한 방식이라고 생각하면 된다. 
  • 객체는 데이터(프로퍼티)와 그에 상응하는 행동(메서드)를 포함한다. 객체 하나가 하나의 개념을 표현한다면, 이 개념과 연관되어있는 데이터와 행동들을 따로 분리하는 것이 아니라, 객체라는 구조 안에 모아두어 활용성을 높인다.
  • 이런 객체들이 여럿 모여 애플리케이션을 구성하고, 다른 객체들과 상호작용 하는 방식을 객체 지향 프로그래밍이라고 한다. 

Why OOP? 왜 객체 지향 프로그래밍을 하는가.

  • OOP의 목적은 데이터모음을 더 유연하게 활용하고, 유지보수와 확장이 쉽도록 조직화하기 위함이다. 
  • OOP의 탄생 배경에는 이전 절차 지향 프로그래밍에서 덩치가 커질수록 수 많은 코드들이 잘 조직화되어 관리되지 않는 이른바 스파게티 코드가 되는 문제점이 있었기 때문이다. (내가 간략하게 이해한 바로는 그렇다.) 
  • 동작 보다는 의미있는 데이터들(객체)를 중심으로 코드를 짜면, 코드의 덩치가 커져도 일관성이 유지되었고 OOP는 여기에서부터 출발하게 되었다.
  • OOP는 현재 가장 널리 쓰이는 프로그래밍 패러다임일 것이며, 이와 비슷하지만 다른 개념으로는 함수형 프로그래밍이 존재한다. 

클래스와 인스턴스

  • OOP에서는 객체 리터럴을 사용해 객체를 직접 만드는 대신에, 새롭게 객체를 생성해내는 방식을 사용해야 한다.
  • 이 때 사용되는 것이 클래스와 인스턴스 개념이다.

클래스

  • 클래스는 청사진, 설계도 같은 개념이다. 붕어빵이 있을 때 붕어빵(인스턴스)를 찍어내는 붕어빵 틀 같은 존재이다. 실제 객체는 아니지만, 실제 객체를 만들어내기 위한 개념적인 것이라고 볼 수 있다.
  • 클래스를 생성할 때 인스턴스에 들어갈 세부적인 정보 (프로퍼티와 메서드)를 설정한다. 예시를 들자면 붕어빵 속은 무엇인지, 크기는 어떤지 등등 붕어빵이 되기 위한 속성들을 만들어준다. 

인스턴스

  • 인스턴스 : 클래스(붕어빵 틀)을 통해서 찍혀져 나오는 실제 객체 데이터(붕어빵).
  • 인스턴스를 생성하면서 각 객체가 가질 고유한 데이터를 전달하면, 어떤 인스턴스는 슈크림에 대왕 잉어빵, 어떤 인스턴스는 팥에 미니 붕어빵이 될 것이다. 

 

이러한 클래스 인스턴스 개념은 모든 OOP 언어에서 활용되는 공통 개념이고, 자바스크립트는 이 방식과 유사하지만 약간 다른 방법을 사용하여 객체를 생성한다.

OOP의 4가지 중요한 원칙!

  • 클래스를 만들어 내는데 정해진 한 가지 정답이 있다고는 할 수 없다. 하지만 중요하게 여겨야 할 개념은 아래와 같다.

추상화 Abstraction

  • 필요하지 않은 디테일은 무시하라!
  • 우리가 생성하고 있는 것에 대해서 한 눈에 파악할 수 있도록, 필요하지 않은 정보들로 복잡하게 만들지 말아야 한다.
  • 사용자와 상호작용 하기 위해 필요하지 않은 저수준의 디테일은 과감히 무시하고 필요한 정보만 담아 단순화된 인터페이스를 만들 수 있다.
  • 추상화는 OOP 뿐만 아니라 프로그래밍 전반에서 공통적으로 중요하게 생각해야하는 원칙 중 하나이다. 

캡술화 Encapsulation

  • 속성과 메서드를 따로따로 작성하는 것이 아니라, 코드가 상징하는 실제 모습 (객체)안에 모아서 결합 즉, 캡슐화를 시키는 것이다. 
  • 또한 이렇게 캡슐화 시킨 데이터 모음들, 속성과 메서드들은 외부에서 쉽게 접근하거나 변경할 수 없도록 은닉화한다. 이렇게 은닉화 시켜야 예기치 못한 변경을 방지해 결과적으로 버그를 줄일 수 있다. 
  • 외부에 공개할 몇 개의 메서드들만 선별적으로 public하게 공개하여 API로써 의도적으로 노출시킬 수 있다. 

상속 Inheritance

  • 두 개의 유사한 속성을 지닌 클래스들이 있을 때, 하나의 클래스에서 다른 클래스를 상속시키고, 상속 받을 수 있다. (쉽게 생각하면 부모 클래스와 자식 클래스가 존재할 수 있는 것. ) 이렇게 하여 코드의 중복을 막을 수 있다. 
  • 하나의 클래스에 속하는 모든 속성을 특정 클래스에게 상속시킬 수 있고, 이렇게 하여 부모 - 자식 관계같은 클래스간의 계층적인 구조가 생긴다. 중복을 방지해 공통의 로직을 재사용할 수 있으며, 실제 세계에서의 각 객체과 관계를 모델링 할 수 있다. 

다형성 Polymorphism

  • 그리스어에서 파생된 단어로 영어로 표현하면 many shapes. 부모로부터 상속받은 클래스를 각 인스턴스가 자신에게 맞게 변형시켜서 사용할 수 있는 것을 의미한다.
  • 이를 통해 부모 클래스를 용도별로 분기시키지 않아도 각 인스턴스가 변형하여 목적에 맞게 사용할 수 있기 때문에, 다양한 상황에 더 유연하게 대처할 수 있다는 장점이 있다.

참고 자료

  • 코드스테이츠 유어클래스

https://www.udemy.com/course/the-complete-javascript-course

 

Learn Modern Javascript (Build and Test Apps) - Full Course

The modern JavaScript course for everyone! Master JavaScript with projects, challenges and theory. Many courses in one!

www.udemy.com

https://yozm.wishket.com/magazine/detail/1396/

 

자바스크립트에서 객체 지향을 하는 게 맞나요? | 요즘IT

이번 글에서는 객체지향 프로그래밍에 대해 이야기를 해보려고 합니다. 그리고 자바스크립트의 객체지향은 일반적인 객체지향 프로그래밍과는 어떻게 다른지 그리고 Javascript에서는 객체지향

yozm.wishket.com

 

저작자표시 (새창열림)

'JavaScript > JavaScript' 카테고리의 다른 글

[JavaScript] 프로토타입  (0) 2022.07.22
[JavaScript] OOP in JavaScript : 생성자 함수, 클래스 문법  (0) 2022.07.22
[JavaScript] 클로저와 커링 초간단 정리  (0) 2022.07.21
[JavaScript] Promise  (0) 2022.07.18
[JavaScript] 동기와 비동기  (0) 2022.07.16
    'JavaScript/JavaScript' 카테고리의 다른 글
    • [JavaScript] 프로토타입
    • [JavaScript] OOP in JavaScript : 생성자 함수, 클래스 문법
    • [JavaScript] 클로저와 커링 초간단 정리
    • [JavaScript] Promise
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바