객체지향 프로그래밍 OOP 2

KoEunseo·2022년 7월 22일
0

javascript

목록 보기
12/32

객체지향하는 이유

원래 프로그래밍은 절차지향이었음. 절차지향 프로그래밍은 유지보수하기도 힘들고 확장성도 좋지 않음.
그래서 나온 게 객체지향. 내가 이해한바에 따르면 객체지향 프로그래밍은 블록쌓기임! 기능별로 블록(객체)을 만들어서 최종적으로 내가 원하는 블록(객체)들만 쏙쏙 뽑아 쌓아서 로봇을 만드는 것!
객체지향 프로그래밍은 유연하고 유지보수하기 쉽고, 확장성도 좋고 재사용하기도 좋다.

OOP는 프로그램 설계 철학중 하나임.

  • 모든것은 객체로 그룹화된다.
  • 이 객체는 한번 만들어놓으면 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
  • 클래스는 일종의 원형(original form)으로 객체를 생성하기 위한 청사진. * 세부사항(속성)이 들어가지 않는다. 세부사항을 넣으면 객체가 된다.
  • 인스턴스는 클래스의 사례.
  • 클래스는 객체를 만들기 위한 생성자함수를 포함한다.
  • 생성자를 통해 세부사항(속성)을 넣는다.

객체지향 주요 개념

https://poiemaweb.com/js-object-oriented-programming


캡슐화 Encapsulation

  • 캡슐화로 얻는것
    정보은닉: 공개될 필요가 없는 내부 데이터나 구현은 숨긴다.
    느슨한 결합: 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것. 언제든지 구현 수정이 가능.
    *코드가 복잡하지 않고 재사용성을 높인다.

~결합도란 서로다른 모듈들이 상호 의존하는 정도
응집도란 내부 구성요소들이 서로 관련되어 있는 정도
결합도는 낮추고 응집도는 높히는 것이 좋다.~

  • 자바스크립트는 자바와 같이 public, private는 없지만..
    functional-level scope를 사용한다.

상속 Inheritance

부모클래스의 속성과 메서드를 자식클래스가 상속받는것. 자바스크립트에서는 프로토타입을 통해서 직접 상속한다. 자식클래스에 속성과 메서드를 추가할 수 있다.

const Parent = function(){
  function Parent(name){this.name;} //constructor
  Parent.prototype.greet = function(){ console.log('hi');} //method
  return Parent //return constructor
}();
const Child = function(){
  function Child(name){this.name;} //constructor
  Child.prototype = new Parent(); 
  //자식 생성자함수의 프로토타입 객체를 부모 생성자 함수의 인스턴스로 교체한다. child.constructor는 Child가 아닌 Parent임.
  //오버라이드: 재정의함
  Child.prototype.greet = function(){
    console.log('hello!');
  }
  //farewell메서드는 Parent 생성자함수의 인스턴스에 위치한다.
  Child.prototype.farewell = function(){
    console.log('bye!');
  }
  return Child;
}();

const child = new Child('child');
child.greet(); //'hello'
child.farewell(); //'bye'

추상화 Abstraction

내부 구현은 복잡하지만 노출되는 부분은 단순하게 만드는 것을 뜻함. 클래스를 사용하는 사람이 필요하지 않은 메서드를 노출시키지 않고, 단순한 이름으로 정의한다.
코드가 복잡하지 않게 만들고, 변화에 대한 영향을 최소화함

다형성 Polymorphism

다양한 형태를 가질 수 있음.
같은 메서드라도 다른 방식으로 구현될 수 있다.
조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.

자바스크립트는 #로 은닉화를 할 수 있다.

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글