해나아부지 개발일지

객체 지향 프로그래밍(OOP: Object-Oriented-Programming)이란? 본문

Developers/OOP

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

__APPA 2020. 7. 30. 03:18

객체란?

객체는 객체지향프로그래밍을 이해하기 위한 핵심 개념이다. 현실세계의 사람이나 사물 등을 객체라고 할 수 있고 객체는 상태와 행동 2가지 특징을 갖는다. 이것을 프로그래밍에서는 변수와 메서드로 표현할 수 있다.

 

예를 들어 사람을 객체로 표현하면 키, 몸무게, 이름 등의 상태를 가지고 있고(이것은 변수로 표현할 수 있다) 먹고, 자는 등의 행동들을 한다(이것은 메서드로 표현할 수 있다). 

 

절차지향 vs 객체지향

절차지향 프로그래밍과 객체지향 프로그래밍을 서로 반대개념이라고 오해하기 쉽지만 객체지향으로 프로그래밍을 해도 코드는 위에서부터 아래로 순차적으로 실행된다. 

 

let a = 10, b = 20

function add(a, b) {
  return a + b;
  }
  
 console.log( add(a,b) )
 // 30

 

위 코드를 보면 a, b라는 변수가 있고 두 변수를 더해주는 함수, 그리고 결과값을 출력해주고 있다. 3가지 중 하나라도 빠지면 원하는 결과를 얻을 수 없다. 이와 같이 순차적으로 어떤 프로세스가 진행되어야 하는 프로그래밍 패턴을 절차지향 프로그래밍이라고 한다.

 

class Car() {
  constructor(company, model, cc) {
    this.company = company
    this.model = model
    this.cc = cc
  }
  
  go() {
    console.log('출발') 
    }
  
  stop() {
    console.log('정지')
    }
   
 }
 
 let car1 = new Car(bmw, X4, 3000)
 let car2 = new Car(audi, A4, 3200)
 car1.company // bmw
 car1.model // X4
 car1.cc // 3000
 
 car2.company // audi
 car2.model // A4
 car2.cc // 3200

절차지향 프로그래밍에는 없는 개념이 class다. class는 설계도와 같다. class를 정의하고 정의된 class를 바탕으로 인스턴스들을 만들 수가 있는데 이것들을 객체라고 한다. car1과 car2는 같은 class이지만 각각 bmw와 audi라는 다른 객체가 된다. 

 

 

기본 구성 요소

  • 클래스
    같은 속성과 행위를 가진 집단을 정의한 것
  • 객체
    클래스의 인스턴스. 상위 클래스의 속성을 가지고 있으면서 개별적인 특성을 가지게 되는 것.
    company, model, cc등의 공통속성을 가지지만 car1은 bmw, car2는 audi라는 개별적인 특성을 가짐
  • 메서드
    go(), stop() 등 인스턴스를 사용할 수 있게 만들어 주는 것.
    객체의 속성을 조작할 수 있게 해준다.

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

  1. 캡슐화
  2. 추상화
  3. 상속
  4. 다형성

 

캡슐화 객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작이 가능하게 하는 작업

 

추상화 공통의 속성이나 기능을 묶어 이름을 붙이는 것. 클래스를 정의하는 것을 자체가 추상화

 

상속 클래스의 모든 것(상태, 행동)을 인스턴스가 가지는 것.

 

다형성은 상위 클래스 메서드와 하위클래스의 메서드가 달라질 수 있음을 의미하는 것(Customizing)

 

JavaScript에서 Object를 생성하는 여러가지 방법들

  • 객체 리터럴
  • 생성자 함수
  • Object() 생성자 함수

JavaScript에서 Prototype은 무엇이고 왜 사용해야 하는지?

자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다. 그리고 이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다. 이러한 부모 객체를 Prototype(프로토타입) 객체 또는 줄여서 Prototype(프로토타입)이라 한다.

 

 

 

다음 포스트에서는 OOP의 특징에 대해서 자세하게 살펴보겠다.

'Developers > OOP' 카테고리의 다른 글

ES6 Class 와 Super  (0) 2020.08.01
Object.create vs new #JavaScript  (0) 2020.07.31
Comments