[JS] 객체지향 프로그래밍

지후맨·2021년 8월 23일
0

section 2 [JS]

목록 보기
1/3
post-thumbnail

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

  • 객체 지향 프로그래밍(OOP, Object-oriented programming)은, 절차 지향 프로그래밍과는 다르게 데이터와 기능을 한 곳에 묶어서 처리한다. 속성과 메소드가 하나의 "객체"라는 개념에 포함되며, 이는 자바스크립트 내장 타입인 object(이하, object literal)와는 다르게, 클래스(Class)라는 이름으로 부른다.
    (무슨 소리인지 정확히 이해는 못한다..)

  • 객체지향 프로그래밍은 함수들의 집합 혹은 단순한 컴퓨터의 명령어들의 목록이라는 전통적인 절차지향 프로그래밍과는 다른, 관계성있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인으로 볼 수 있다.

  • 각 객체는 메시지를 받을 수도 있고, 데이터를 처리할 수도 있으며, 또다른 객체에게 메시지를 전달할 수도 있다. 각 객체는 별도의 역할이나 책임을 갖는 작은 독립적인 기계 또는 부품으로 볼 수 있다.

  • 객체지향 프로그래밍은 보다 유연하고 유지보수하기 쉬우며 확장성 측면에서서도 유리한 프로그래밍을 하도록 의도되었고, 대규모 소프트웨어 개발에 널리 사용되고 있다.

✔️객체지향 프로그래밍의 장점

코드의 재사용성 증가
유지보수의 용이
간결한 코드

✔️객체지향 프로그래밍의 단점

처리 시간이 오래걸린다.
프로그램을 설계할 때 많은 고민과 시간을 투자해야한다.

객체지향 4가지 핵심요소

캡슐화
추상화
상속
다형성

1. 캡슐화

  • 실제로 구현 부분을 외부에 드러나지 않도록 하는 것
  • 변수와 메소드를 하나로 묶음
  • 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근
  • ex) public, private, protected
    public: 클래스 외부에서 접근가능
    private: 클래스 내부에서만 접근 가능
    protected: 상속받은 자식 클래스에서만 접근 가능

2. 추상화

  • 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것

3. 상속

  • 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
  • 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
  • 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해준다.

4. 다형성

  • 어떤 변수, 메소드가 상황에 따라 다른 결과를 내는 것

class와 instance

  • 하나의 모델이 되는 청사진 class, 그 청사진을 바탕으로 한 객체를 만드는 객체를 instance.

  • 객체지향 프로그래밍을 이용한 객체를 만드는 방법은 함수를 정의하듯 만든다.
    클래스를 그냥 함수로 정의할때, 암묵적인 규칙으로 보통 클래스는 대문자, 그리고 일반명사로 만든다.

  • class의 instance를 생성할때마다 constructor메서드가 호출됩니다.

  • constructor()메서드에 this 키워드를 사용했습니다. class의 실행범위(context)에서 this는 해당 instance를 의미합니다.

  • 인스턴스는 class이름에 new를 붙여서 생성합니다.

예시)

class Car {
  constructor(brand, name, color) { //생성자 함수
    this.brand = brand;
    this.name = name;
    this.color = color;
  }
  drive() { //메소드
    return `${this.brand}${this.color} ${this.name} 출발`
}
  
let genesis = new Car('hyundai', 'genesis', 'black') //인스턴스

console.log(genesis); 
console.log(genesis.brand);
console.log(genesis.drive());

/*
Car {brand: 'hyndai, name: 'genesis', color: 'black'}
'hyundai'
'hyundai의 black genesis 출발'
*/
profile
ghooman's area

0개의 댓글