본문 바로가기
프로그래밍/Javascript & React

[Javascript] 생성자 함수(클래스), 객체와 객체 지향 프로그래밍 OOP(Object Oriented Programming)

by Dean30 2022. 1. 15.
728x90

[Javascript] 생성자 함수(클래스), 객체와 객체 지향 프로그래밍 OOP(Object Oriented Programming)

 

 

객체

name과 value로 구성된 정렬되지 않은 property 혹은 method의 집합

객체 내에서의 변수를 '속성(Property)', 함수를 '메소드(Method)'라고 한다.

 

객체 리터럴

let user = {
	name = 'dean';
    age = '31';
}

 

생성자(Constructor) 함수

객체를 생성하는 함수를 생성자 함수라고 한다.

비슷한 객체를 여러개 만들어야 하는 상황에서 쓰는 것

붕어빵 틀이라고 생각하면 된다.

생성자는 객체(this)를 return 한다.

function User(name, age) {
	this.name = name;
    this.age = age;
}

let user1 = new User('Dean', 31);
let user2 = new User('정글러', 22);
let user3 = new User('후론트엔드', 1);

 

이 생성자 함수는 실제 다음 순서로 작동한다.

function User(name, age){
    this = {} // 빈 객체 생성
    
    this.name = name;
    this.age = age;
    
    return this // this를 반환
}

 

클래스

위 함수형 생성자를 클래스형으로 쓰면 다음과 같다. 기능은 같다. (ES6 이후 class가 추가됨)

 

class User {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    ...
}

let user1 = new User('Dean', 31);
let user2 = new User('정글러', 22);
let user3 = new User('후론트엔드', 1);

 

 

객체 지향 프로그래밍

객체를 기준으로 코드를 구현 하는 것이다.

 

 

객체 지향 프로그래밍의 이유

서비스가 커지다보면 코드가 복잡해져 유지/보수가 힘들어진다. 이 때 알아보기 쉽게 만들어 유지/보수를 용의하게 하고 똑같이 반복되는 부분의 재활용이 필요하여 생긴 것이 객체 지향 프로그래밍(OOP)이다. OOP는 각각의 목적에 맞는 변수 및 함수들을 모아놓은 Categorizing의 결과라고 할 수 있다.

 

 

 

 

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

은닉화, 캡슐화(Encapsulation)

변수와 함수를 하나로 묶고 필요에 따라 접근 권한을 나누어 외부에서 함부로 접근하지 못하게 제한하여 객체의 손상을 방지한다.

이에 따라 내부 구현 내용을 감추어 외부에서 확인 할 수 없도록 은닉할 수 있다.

 

추상화(Abstraction)

공통적인 변수와 함수들을 따로 묶어 객체를 정의하는 과정이다. 클래스화 하는 것이 추상화 하는 것이다.

 

다형성(Polymorphism)

같은 객체임에도 상황에 따라 다르게 동작 할 수 있다.

 

  • 오버로딩(Overloading) : 같은 이름의 함수명을 가지면서 매개 변수의 타입과 개수를 다르게 만들어 쓸 수 있다.
int sum(int n1, int n2) {
  return n1 + n2;
}

int sum(int n1, int n2, int n3) {
  return n1 + n2 + n3;
}

 

  • 오버라이딩(Overriding) : 부모 객체가 가지고 있는 함수를 자식 객체가 해당 함수를 재정의해서 사용할 수 있다.
class Person {
  eat() {
    console.log("밥 먹을거야");
  }
}

class Kim extends Person {
  eat() {
    console.log("난 밥 싫어 라면 먹을거야");
  }
}

let kim = new Kim();
kim.eat(); // 난 밥 싫어 라면 먹을거야

 

 

상속(Inheritance), 재사용

자식 객체가 부모 객체의 변수와 함수를 그대로 물려 받을 수 있는 것을 뜻한다.

단순히 물려받는 것이라면 의미가 없다. 기존의 로직을 수정하고 변경해서 파생된 새로운 객 체를 만들 수 있게 해준다.

 

상속은 생성자(=클래스)를 이용하며, 직접 property, method를 정의할 수도 있고, prototype을 이용할 수도 있다.

 

내 정리 : https://dean30.tistory.com/105

728x90

댓글