[SEB] Today I Learn

wldns12378·2021년 4월 18일
0

TIL

목록 보기
42/46
post-thumbnail

** - OOP가 무엇인가? **
** - Prototype은 무엇인가? **

Object Oriented Programming


Object Oriented Programing(이하 OOP)는 객체 지향 프로그래밍이라고 한다.

OOP가 나오기 이전에 프로그래밍언어는 절차지향 프로그래밍이 있었고, 이 이전에는 저급 언어인 기계어와 어셈블리어등이 있었다.

절차 지향 프로그래밍은 90년대 이전에 나온 개념으로
대표적은로 C, 파스칼, 코볼등이 있다고 한다.

이 패러다임은 프로그램을 순서대로 작성하고 실행한다.
예를들어 오렌지 쥬스를 만드는 과정을 수행하려면,

  1. 냉장고를 연다.
  2. 오렌지를 꺼낸다.
  3. 냉장고를 닫는다.
  4. 착즙기를 꺼낸다.
  5. 착즙기의 뚜껑을 열어 오렌지를 넣는다.
  6. 코드를 꽂는다.
    ...
    ...

이런 식으로 프로그램을 작성한다.
이런 방식은 프로그램의 순서를 바꾸거나 복잡한 로직을 짜기에는 부족하다.
그래서 등장한 패러다임이 객체지향 프로그래밍이다.

90년대 이후로 등장한 개념으로 Java, C++, Python등 최근에 나오는 언어들은 모두 적용이 된다.
원하는 기능과 특성을 캡슐화를 하여 필요할때 마다 부품처럼 가져와서 사용하는 개념이다.

그럼 이러한 개념이 프로그래밍에서 어떻게 작용이 되는가?
그것은 Class, Instance이라는 개념이 생긴다.
클래스는 세부사항이 들어가지않은 청사진이다.
즉 붕어빵으로 예를든다면 붕어빵들을 찍어내는 붕어빵 틀인것이다.
이러한 클래스에서 만들어진 객체를 인스턴스라고 한다.

붕어빵틀을 통해 팥이들어간 붕어빵, 피자소스가 들어간 붕어빵, 슈크림이 들어간 붕어빵 등등 이렇게 하나의 틀에서 다양한 속성을가진 붕어빵 틀이 클래스이며, 거기서 만들어진 붕어빵이란 객체들을 인스턴스라 한다.

여기서 팥, 피자, 슈크림 등의 재료라는 속성과, 큰붕어빵과 작은 붕어빵이라는 속성, 가격이라는 속성등을 클래스 속성이라고 하며, Java에서는 Membe라고 표현하였다.
자바스크립트에서는 그냥 속성(property)라고 하는것 같다.

그리고 해당 붕어빵을 만들다. 반죽한다 등의 행위는 하나의 기능을하는 함수로 정의될수 있으며, 객체에서 정의된 함수는 메서드라고 부른다.

객체지향언어의 4가지 특성

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

캡슐화란? 특정 속성과 행동을 하나로 묶어 캡슐화한다고 생각할 수 있다. 또한, 이러한 캡슐화를 통해서 속성값을 쉽게 접근할수 없도록 getter/setter메서드를 따로 만들고 속성자체는 접근제한자인 private로 막아둬 보안성을 높일수도 있다. 이것을 은닉화라고 한다.

상속이란? 부모의 속성과 기능을 그대로 물려받는것을 말하는데,
프로그래밍에서는 extends라는 키워드를 통하여 구현할 수 있다.
부모클래스(super)가 구현한 속성과 기능을 상속받아 만들지 않더라고 사용할 수 있다. 이 때 부모의 기능을 이름을 같게 하여 재 구현을 하는것을 오버라이딩이라고 한다.



Prototype

자바스크립트에는 class라는 키워드가 존재하지만 실제론 클래스라는 개념이 없다고 한다.
기존의 객체를 복사해서 새로운 객체를 생성하는 프토토타입 기반의 언어 라고한다.
이는 객체의 원형객체인 프로토타입을 이용하여 새로운 객체를 만들어 낸다.
이렇게 생성된 객체는 다른 객체의 원형이 될수도 있다.
프로토타입의 사용법을 보자

function Person() {
  this.name = 'quakka';
  this.age = 99;
  this.job = teacher;
}

let quakka1 = new Person();
let quakka2 = new Person();

console.log(quakka1.age , quakka2.age); // 99, 99

보통 객체는 이렇게 특별한 특성과 행동을 정의해놓고 복사해서 사용할 것이다.
하지만 위의 코드를 본다면 행동을 정의한 코드는 볼수가 없다.
속성은 function 키워드를 통하여 정의한 함수에 정의를 하고
행동은 prototype이라는 원형객체에 구현을 한다.


Person.prototype.sayHello = function() {
  console.log('무야호 ~ ');
}

let quakka = new Person();
quakka.sayHello(); // '무야호 ~ '
profile
Front-End Dev(진)

관심 있을 만한 포스트

0개의 댓글