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

2021. 4. 9. 13:58CodeStates/TIL_IM

728x90
반응형

OOP 란?

 

-  프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법

  => 프로그램을 객체들과 객체들 간의 소통으로 바라보는 것

- 문제를 여러 개의 객체 단위로 나누어 처리하는 방식 

 


OOP의 장점

  • 프로그램을 유연하고 변경이 용이하게 만든다
  • 프로그램의 개발과 보수를 간편하게 만든다
  • 직관적인 코드 분석을 가능하게 한다

 

OPP의 특성

 

  • 추상화(Abstraction)
    • 객체에서 공통된 속성과 행위를 추출하는 것 
    • 불필요한 정보는 숨기고 중요한 정보만을 표현해 프로그램을 간단하게 만드는 것
      • 인터페이스가 단순해짐
  • 캡슐화(Encapsulation)
    •   데이터와 기능을 하나의 단위로 묶는 것
    •   디테일한 구현이나 데이터는 숨기고, 동작만 노출시킨다.
  • 상속(Inheritance)
    • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
    • 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이
    • 보다 적은 코드로 새로운 클래스 작성 가능
    • 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여
  • 다형성(Polymorphism)
    • 한 요소에 여러 개념을 넣어 놓는 것
    • 오바라이딩 - 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
    • 오버로딩 - 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것

 

Classm, Instance

클래스(Class)

  • 세부 사항(속성)이 들어가지 않은 청사진 또는 설계도 
  • 연관되어 있는 변수와 메서드의 집합
// ES5. 함수로 정의
// 첫 글자는 대문자로

function Car(name, brand, color) {
  // 인스턴스가 만들어 질때 실행되는 코드
}

// ES6. class 라는 키워드를 이용해서 정의 할 수 있음
class Car {
    // constructor(생성자)
  constructor(name, brand, color) {
  // 인스턴스가 만들어 질 때 실행되는 코드  
  {
}

 

인스턴스(Instance)

  • 클래스를 통해 만들어진 객체 
  • 세부사항은 어떻게 넣지? => 이 역할을 하는 것이 생성자(Constructor)
  • 생성자를 통해 세부 사항(속성)을 넣어준다.
    • 함수에 인자를 넣듯 속성을 넣을 수 있다.
  • 인스턴스는 어떤 원본으로부터 생성된 복제본을 의미한다. 
const mymaincar = new Car('THE 6 GranTurismo', 'bmw', 'Portimao Blue');
const mysecondcar = new Car('The iX3', 'bmw', 'white');

 

클래스: 속성 정의

// ES5.
function Car(name, brand, color) {
  // 인스턴스가 만들어 질때 실행되는 코드
  // constructor(생성자)
  this.name = name;
  this.brand = brand;
  this.color = color;
}

// ES6.
class Car {
    // constructor(생성자)
  constructor(name, brand, color) {
  // 인스턴스가 만들어 질 때 실행되는 코드
  this.name = name;
  this.brand = brand;
  this.color = color;
  {
}

클래스: 메소드의 정의

// ES5.
function Car(name, brand, color) {
  // 인스턴스가 만들어 질때 실행되는 코드
  // constructor(생성자)
  this.name = name;
  this.brand = brand;
  this.color = color;
  
  Car.prototype.select = function() {
    console.log(`사고싶은 차는 ${this.name}`);
  }
}

// ES6.
class Car {
    // constructor(생성자)
  constructor(name, brand, color) {
  // 인스턴스가 만들어 질 때 실행되는 코드
  this.name = name;
  this.brand = brand;
  this.color = color;
  }
  
  select() {
    console.log(`사고싶은 차는 ${this.name}`);
  }
}

인스턴스에서 사용

let mythirdcar = new Car('THE X6', 'BMW', 'Manhattan')
mythirdcar.name;
mythirdcar.select();

 

 

 

728x90
반응형

'CodeStates > TIL_IM' 카테고리의 다른 글

4. 13.(화) TIL  (0) 2021.04.13
Prototype Chain + ES6. Class  (0) 2021.04.09
화살표 함수  (0) 2021.04.08
node.js, package.json, 짝수 생성기  (0) 2021.04.08
Git - 페어 프로그래밍(git remote, pull, merge, 충돌해결)  (0) 2021.04.06