day11

Antipiebse·2022년 3월 31일
0

TIL

목록 보기
9/17

객체를 만들자(class)

class란 물건을 만드는 설명서라고 할 수 있다.

Method

class 안에서 함수를 만들 땐 function을 사용하지 않고 적는다.

그럼 직접 작성해보자.

class Monster{
	power = 10//변수 선언
	speed = 25
	name = "aa1"
	
	constructor(speed, power, name){ //인스턴스를 생성하고 초기화하기 위한 메서드로 생성자라고 부른다.
      this.speed = speed
      this.power = power
      this.name = name
    }

	//prototype 메소드
	attack(){
    	console.log(`${this.name}${this.power}의 힘으로 공격합니다`)
    }
	run(){
    	console.log(`${this.name}${this.speed}의 속도로 도망칩니다`)
    }
	
}
const mymonster1 = new Monster(50, 200, "zero")//몬스터 클래스의 인스턴스를 만든다.
mymonster1.attack()//공격하자 => prototype chain으로 연결해서 사용!
mymonster1.run()//도망가자

이때 constructor안에서 return을 하면 안 된다!

명시적으로 this가 아닌 다른 값을 반환하는 것은 클래스의 기본동작을 훼손하므로 반드시 return문을 생략해야한다.

class Person {
	constructor(name){
    	this.name = name	
    	return {}
    }
}
const me = new Person('Lee')
console.log(me)// {}
//명시적으로 객체를 반환하면 암묵적인 this반환이 무시됨,

class Person {
	constructor(name){
    	this.name = name	
    	return 300
    }
}
const me = new Person('Lee')
console.log(me)// 'Lee'
//명시적으로 원시값을 반환하면 암묵적으로 this가 반환된다.

super를 통한 상속?

클래스 함수는 다른 클래스의 변수나 함수를 이용할 수 있다는 장점이 있다. 이를 extends를 통해 확장하고, super로 super클래스의 변수나 함수를 가져와보자.

//super class
class Base{
	constructor(a, b){
		this.a = a
      	this.b = b
    }
}
// sub class
class Derived extends Base{
	constructor(a,b,c){
    	super(a, b)
      	this.c = c
    }
}

const derived = new Derived(1,2,3)
console.log(derived)
//Derived {
//  a: 1,
//  b: 2,
//  c: 3,
//  __proto__: { constructor: ƒ Derived() }
//}

이때 서브 클래스의 constructor 안에서 this구문을 통한 재할당을 super보다 먼저 쓰면 에러가 난다.

왜냐하면 서브클래스는 자신이 직접 인스턴스를 생성하지 않고 수퍼 클래스에게 인스턴스 생성을 위임하기 때문이다.
서브 클래스가 new연산자와 함께 호출되면 그 안의 super키워드가 함수처럼 호출된다. 그러면 super클래스의 constructor가 호출이 되므로 그 전에 this를 사용해 만들게 되면 생성이 되지 않는 것이다.

Date 객체를 사용해보기

//날짜 내장 객체를 이용해서 클래스 사용
const aaa = new Date()
console.log(aaa.getFullYear())//2022
console.log(aaa.getMonth() + 1)//3

객체지향프로그래밍? (OOP Object-Oriented-Programming)

객체지향은 인간의 입장에서 객체를 설계하고 데이터를 처리하는 프로그래밍 패러다임이다.

이러한 OOP의 장점은

  • 강한 응집력, 약한 의존성을 이용
  • 클래스 하나에 문제 해결을 위한 데이터를 모아 사용하므로 응집력이 높다
  • 재사용성이 좋다
  • 유지보수가 좋다
  • 협업시 유용하다
  • 캡슐화를 통해 내부 구현을 감추므로 보안이 좋다.

단점은

  • 처리속도가 느리며, 설계시 어려움을 겪을 수 있다.

이외에도 많은 특징이 있는데 잘 정리한 블로그가 있어 링크를 건다.

아래처럼 객체 사용을 지향하는 프로그래밍을 말한다.

유지보수가 좋은 폴더 구조 만들기(MVC Model-View-Controller)

Model-View-Controller로 역할을 나누어 개발하는 방식으로 비지니스 처리 로지고가 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발하는데 좋다.

Model

이때 Model은 우리의 api가 무엇을 할지 정의하며 내부 비즈니스 로직을 처리하기 윈한 역할을 한다.
controller가 model 호출 시 DB와 연동하여 입출력 데이터 처리와 비지느스 로직을 처리한다.

View

클라이언트가 직접적으로 보는 페이지이며 프론트엔드에서 주로 담당한다.

Controller

앞선 2가지를 중간에서 제어한다고 보면된다. 이 안의 service에서 다양한 다양한 데이터 처리 알고리즘을 구현한다.

옵셔널 체이닝

profile
백엔드 주니어 개발자

0개의 댓글