[JS] Class & 4 Basic concepts of OOP

soor.dev·2021년 4월 9일
0

Java Script

목록 보기
14/26
post-thumbnail

Class & instance

클래스는 일종의 고유한 속성(property)method 들이 들어 있는 틀이라고 보면 좋을 것 같다.

세부사항(property)은 생성자(constructor)를 통해 함수에 인자를 넣듯이 넣어준다. 생성자 함수를 작성하고, new() 를 사용해 객체를 생성하면 같은 prototype 을 가지는 객체(instance)를 생성할 수 있다.

class Dog {  // Dog라는 class를 만들어 줌
// 생성자를 통해 함수에 인자 넣듯이 세부사항을 넣어줌
    constructor(name, age, color) { // 생성자 함수 작성
        this.name = name; // name property
        this.age = age;   // age property
        this.color = color;   // color property
    }
  // 객체의 property가 함수인 경우, 이 함수를 method라고 부름
    info() {
        return `${this.name}${this.color}색이고, ${this.age}살 입니다.`
    }
}
// Dog class의 속성을 갖는 mydog 생성
// mydog라는 객체는 Dog라는 prototype을 가짐
// instance
const mydog = new Dog('jindo', 3, 'white')


// mydog에 class Dog가 갖고 있는 속성들이 적용됨
mydog
Dog {name: "jindo", age: 3, color: "white"}

mydog.info()
"jindo은 white색이고, 3살 입니다."

// Dog class에 적용된 속성 이외의 속성을 추가할 수 있음. 이는 Dog에는 적용되지 않음
mydog.breed = 'Jindo' // breed property를 추가
"Jindo"

mydog.weight = 13  // weight property를 추가
13

mydog
Dog {name: "jindo", age: 3, color: "white", breed: "Jindo", weight: 13}
// Dog class의 속성을 같은 또다른 변수 yourdog 생성
// instance
const yourdog = new Dog('네그로', 2, 'black')

yourdog
Dog {name: "네그로", age: 2, color: "black"}

yourdog.weight = 5
5

yourdog
Dog {name: "네그로", age: 2, color: "black", weight: 5}

✅ 위와 같이 class를 사용하여 실습하면서 불필요한 코드를 최소화 시키며, 같은 컨셉을 갖는 서로 다른 변수에게 원하는 extra 속성을 자유롭게 넣고, 제거할 수 있었다.


4 Basic concepts of OOP

좋은 설계를 하기 위해서, 객체지향을 이해 & 응용하는 것이 중요하다. 같은 코드 반복, 재사용 불가능한 코드 짜기 등..의 비효율적인 코딩에서 벗어나기 위해서 !!

1️⃣ Encapsulation : 캡슐화

  • 데이터와 기능을 하나의 단위로 묶는 것
  • 동작은 노출, 구현은 숨기는 것
  • 언제든 구현을 수정할 수 있음
  • 복잡도를 줄이고, 재사용성을 높임

2️⃣ Inheritance : 상속

  • 클래스를 이용하여 중복되는 메소드를 재구현하지 않는 것 (추가할 것)
  • 새로운 클래스에서 기존 클래스의 모든 프로퍼티와 메소드를 사용할 수 있는 것
  • 불필요한 코드를 제거

3️⃣ Abstraction : 추상화

  • 내부는 아주 복잡한데 노출 부분은 단순하게 만드는 것
  • 사용자가 필요한 메소드만을 노출시키고, 단순하게 정의하는 것
  • 복잡성을 줄이고, 변화의 영향을 최소화

4️⃣ Polymorphism : 다형성

  • 객체 역시 똑같은 메소드라 하더라도, 다른 방식으로 구현될 수 있음

Reference

TCP school
bluesh55님의 medium

0개의 댓글