본문 바로가기
✍ 따뜻한 개발 공부

객체지향 프로그래밍?

by 따따시 2023. 5. 9.

 

객체지향 프로그래밍은 

프로그램을 명령어 혹은 함수의 목록으로 보는 '명령형 프로그래밍'의 절차지향적 관점에서 벗어나

 

여러 개의 독립적인 단위, 즉 '객체'의 집합으로 프로그램을 표현하는 프로그래밍 패러다임을 말한다.

 

객체는 '상태 데이터'와 '동작'을 하나의 논리적인 단위로 묶은 복합적인 자료구조이다.

이때 객체의 상태 데이터를 '프로퍼티' , 동작을 '메소드'라고 부른다.

 

각 객체는 고유의 기능을 갖는 독립적인 부품으로 볼 수 있지만, 자신의  고유한 기능을 수행하면서 다른 객체와의 관계성을 가질 수도 있다. 

 

 

"상속"은 객체지향 프로그래밍의 핵심 개념으로

어떤 객체의 프로퍼티 또는 메소드를 다른 객체가 상속받아 그대로 사용할 수 있는 것을 의미한다. 

 

// OOP (Object Oriented Programing)
// js는 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어다.
// => 한마디로, js는 프로토타입 기반의 객체지향언어이다.

// java는 클래스기반의 객체지향 프로그래밍 언어징

function Circle(radius) {
  this.radius = radius;
  this.getArea = function () {
    return Math.PI * this.redius ** 2;
  };
}

const circle1 = new Circle(1);
const circle2 = new Circle(2);

// false
console.log(circle1.getArea === circle2.getArea);

// 한마디로
// 같은 기능의 메소드가 두 개나 생성이 된 것 -> 비효율적임

// 이런 경우 "상속"을 통해 불필요한 중복을 제거해보자

function 상속Circle(radius) {
  this.radius = radius;
}

상속Circle.prototype.getArea = function () {
  return Math.PI * this.redius ** 2;
};

const circle3 = new 상속Circle(1);
const circle4 = new 상속Circle(1);
// True 가 나온다. 
console.log(circle3.getArea === circle4.getArea);


// ⭐️ 이렇게 불필요한 중복을 없애게 된 원인?? ⭐️
// 상속Circle 생성자 함수가 생성한 모든 인스턴스는 '부모 객체' 역할을 하는 프로토타입으로부터 getArea를 상속받는다.

 

 

 

 

 

댓글