OOP (Object Oriented Programming)

김세주·2021년 1월 14일
0

TIL

목록 보기
2/3

객체 지향 프로그래밍 이란 무엇인가

서로 연관되어 있는 변수, 함수를 객체(Object)로 그루핑한다

인간은 프로그래밍을 하면서 굉장히 많은 고도화된 코드들과 함수 변수들을 사용하게 되었고, 이를 구분하고 정렬, 인간이 알아 볼 수 있도록 설계 할 필요성을 느끼게 되었다.

복잡도를 낮추기 위해 근본적인 해결책을 제시한 것이 바로 객체 지향 프로그래밍이다.
라이브러리를 의미하는게 아니라, 프로그래밍 세계에서 한 철학이다. 모든 것은 전부 Object로 되어있고 그것으로 설명이 가능하다.

class = prototype
클래스는 청사진 이다. ( 세부사항만 기입을 하면 object로 만들어 진다 )
그래서 Objectclassinstance다 라고 할 수 있다
클래스가 가지고 있는 constructor에서 specification을 정의한다.

class = 자동차 color;price;speed; = 속성
Start();Backward(); 등 = 메소드

other..()
do()
do1()
do2()
other..()

라는 함수가 있다면 우리는 do계열 끼리 묶어야 할 것이다.
이를 toy 라는 object에 묶는다면,

other..()
toy.do()
toy.do1()
toy.do2()
other..()

이런식으로 찾기 쉽게 만들 수 있다.

자동차를 예로 들어보자

모델명 : Tesla model 3
제조사 : Tesla
제조일 : 2020-01-14
제로백 : 2.7초

이런식으로 어떤 특정 자동차를 자동차가 가지고 있는 특성을 대입 시켜 이해 할 수 있다. 즉 제조사.(Tesla model 3)가 가능하다

자동차가 class라고 한다면

class car {
      	생성자(model, company, madeDate, zeroback){
        this.model = model; // 모델명
        this.company = company; // 회사명
        this.madeDate = madeDate; // 만들어진 날짜
        this.zeroback = zeroback; // 제로백
     }
}

이런식으로 클래스에 특정 값들을 부여해 객체를 만들 때,
이 특징 값들을 인자로 받아 객체를 만들어 준다.

여기 클래스에 메소드를 추가 할 수도 있다.

class car {
      	생성자(model, company, madeDate, zeroback){
        this.model = model; // 모델명
        this.company = company; // 회사명
        this.madeDate = madeDate; // 만들어진 날짜
        this.zeroback = zeroback; // 제로백
     }
     function 운전하다() {
         // 자동차 1시간 운전하는 함수
         // 자동차의 이동거리 반환
         }
}

이러면 각자 자동차를 대입을 했을 때, function 운전하다를 반환하므로 각 자동차의 이동거리(특징)를 알 수 있다

객체 지향 프로그래밍 4대 특성

encapsulation (캡슐화)

오브젝트 안에 모든 요소들을 넣어놓는다( 쌓아놓는다 )

자동차의 종류가 20종류라고 쳤을 때, 20개에 대한 각각의 속성과 동작들을 변수와 메서드로 정의해야 한다면 정말 끔찍하다.

--> 자동차 class를 만들고 각각 자동차객체를 넣는다면 쉽게 문제를 해결할 수 있다.

let model = tesla;
let speed = 20;
let zeroback = 3;

function getSpec(model, speed, zeroback) {
   	return ` ${model} speed is ${speed*zeroback} `
}

이렇게 표현된 함수를 (절차 지향)- 하나에 다 들어가있음

let car = {
	model : tesla;
    speed : 20;
    zeroback : 3;
    getSpec : function() {
      return ` ${this.model} speed is ${this.speed*this.zeroback} `
      }
  };
  car.getSpec();

이렇게 한다면 car안에 종속되어 있기 때문에 (프로퍼티를 계속 넣어주고 할 필요가 없다) 이것이 바로 객체 지향 객체화 시켜서 tesla.getSpec(); benz.getSpec() 등이 가능

Inheritance (상속)

만약 새로운 버전의 벤츠를 특성이 몇가지 바뀌었다고 했을 때,

class (새로운버전) extends // <-새로 포함 (기존버전)을 해서
만들 수 있다

Abstraction (추상화)

전화기를 예로 들자면, 사용자가 전화기 내부에 있는 로직들과 기계들의 조합을 알 필요 없이
input = 다이얼
output = 수화기 이렇게 기능한다.

Polymorphism (여러가지이다 = 다형성)

html을 예로 들면 textbox(), select(), render()등
html을 부모로 가지고 있으니 각각의 성격을 갖고 일일이 그 특성을 매치 해 줄 필요가 없다.

정리

profile
시간은 내 편이다.

0개의 댓글