본문 바로가기

언어(JS,TS)/그룹스터디

그룹스터디 [CS: OOP란?]

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

 - 속성(properties)과 메소드(method)를 하나의 "객체"(class)에 묶어서 청사진을 만들고,

 - 그 청사진을 바탕으로 인스턴스 객체(instance object)를 만드는 것

 - 사람이 세계를 보고 이해하는 방법을 컴퓨터에게 흉내낸 방법론

 

 

OOP에서 말하는 객체는 자바스크립트에 내장 객체(object)와 다르며, 클래스(class)라고 부릅니다.

 

정리

Class Instance Object
동물 개, 고양이, 여우, ...
도형 원, 삼각형, 사각형, ...

 

장점

 - 기능을 한 곳에 묶어서 처리하기 때문에 강한 응집력(Strong Cohesion)을 갖음

 - 클래스 간에 독립적인 디자인을 함으로써 약한 결합력(Weak Coupling)을 갖음

 

객체 지향 프로그래밍 특징

객체 지향 프로그래밍의 기본 특징

  1. 캡슐화 (Encapsulation)
  2. 추상화 (Abstraction)
  3. 다형성 (Polymorphism)
  4. 상속 (Inheritance)



1. 캡슐화 (Encapsulation)

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 데이터를 은닉(Hiding)을 할 수 있음.
    • 은닉(Hiding) : 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
  • 하나의 단위로 묶음으로써 (클래스 간의 독립적인 디자인을 함으로써) 약한 결합력(Weak Coupling)을 가짐
  • 복잡성 줄이고 재사용성을 높임


2. 추상화 (Abstraction)

  • 복잡한 내부 구현을 숨기고, 노출되는 부분(interface)은 단순하게 만든다는 개념
    • ex) 전화기는 복잡한 내부구조를 가지지만 사용자가 사용할 때는 숫자버튼 등의 인터페이스(interface)만을 이용함
  • 인터페이스
    • 메소드와 속성만을 정의한 것. 추상화의 본질
  • 복잡성을 줄이고, 변화에 대한 영향을 줄입니다.


3. 다형성 (Polymorphism)

  • Polymorphism이라는 단어의 poly는 "많은", 그리고 morph는 "형태"라는 뜻을 가짐
    • 즉, 다형성: 다양한 형태를 가질 수 있다는 것
  • switch 문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능

ex)

"도형"이라는 클래스와 "사각형", "삼각형", "원" 인스턴스 객체가 있다고 가정 해보겠습니다.
클래스 "도형"에 너비를 구하는 메소드 getArea(){ return this.width * this.height }이라고 정의 되었다면
삼각형과 원의 getArea 메소드는 각각 달라야 할 것 입니다.
 - 삼각형 너비 공식 : width*height / 2 
 - 원 너비 공식 : 원의 반지름 * 원의 반지름 * 원주율
이렇게 동일한 메소드라고 하더라도 개별 인스턴스에 따라 다양한 형태를 가질 수 있는 것을 다형성이라고 합니다.



4. 상속 (Inheritance)

  • 기본 클래스(base class)의 특징을 파생 클래스(derive class)가 상속 받는 것
    • 부모 클래스의 속성을 자식 클래스가 물려 받는 것
      즉, 도형이라는 클래스가 있을 때 도형의 속성(width가 있다. width와 height로 너비를 구할 수 있다. 등)의 속성을
      사각형이 해당 속성을 물려 받을 수 있는 것이 상속
    • 반복되는 의미의 코드를 없에야 함

 

 

절차적 프로그래밍

 - 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임

 

 

 절차 지향 vs 객체 지향

절차적 프로그래밍에서 프로시저와 프로시저의 입력과 출력을 다루는 대신에

객체지향 프로그램들은 객체(classes)들을 다룹니다.

연산은 객체에게 내부 프로시저 중에 하나(혹은 상속받은 것)를 수행하라고 요청하는 것으로 이루어지며

이런 방법으로 내부상태를 다룹니다.