-
JS - 정적메서드JAVA SCRIPT 2023. 1. 19. 19:51728x90
class 정적& 동적 메서드
class Person { constructor(_name, _age, _date) { this.name = _name this.age = _age this.date = _date } getName() { return this.name } static getAge(){ console.log(this) } } const person = new Person("ingoo", 32)
자 여기서 우리가 person에 대한
console.dir(person)
을 찍어본다고 생각하자.이렇게 생성할 경우 person에서 메서드는 prototype으로 상속되어서 움직인다.
따라서 사용될떄 프로토 타입을 통해서 실행이 된다는 것이다.
그래서 우리가 인스턴스에서
person.prototype.getName
이다. 라고 쓸 필요가 없는것이다.그래서 중ㅇ한 것은 getName()이라고 만들면 접근이 가능한것이다.
this값은 person부터 실행되기 때문에 위에 있는 값에 접근이 가능한 것이다.
이제 정적 메서드를 살펴보자.
이렇게 할 경우 아까처럼 접근이 가능할까? 불가능하다. 왜냐하면 애초에 실행이 안되기 때문이다.
인스턴스안에서
getAge
라는 메서드가 실행할 수 없다. 그럼 어떻게 실행을 시켜야 하나?console.dir(Person)
를 찍어보자 그러면 안에서 발견할 수가 있다.즉 static은 class 자체에 함수나 변수를 할당하겠다! 라는 뜻으로 해석해야 한다.
그래서 사용하기 위해서는
Person.getAge()
를 실행해야 한다는 것이다. 그러면 문제가 되는게그럼 class가 가지고 있는데 this가 다르다. getAge의 부모는 class Person이고 클래스 자체가 this가 된다.
즉
getName()
과static getAge()
는 this가 다르고 this.name을찍으면 절대 나오지 않는다.원리에 대해서 알아봤다. 다음은 좀 더 들어가보자.
정적 메서드 용처
자 우리는 앞으로 정적 메서드로 만들어야 하는것과, 동적으로 만들어야 하는 메서드를 구분할때가 있을 것이다.
어떨때 구분을 하냐면 예를들어 객체를 만드는 코드를 만들었고 많이 쓰는 함수가 있다.
Person을 통해서 100만개의 객체를 만들면 100만개의 메서드가 생긴다.
근데 100만개의 함수를 만들어도 static getAge()는 한번만 만들어진다는 것
즉 정적 메서드는 전체적인 클래스를 조절할때는 필요하지만 동적으로 만들 필요가 없을때 사용한다.
예를들어 person을 만들기 위해 요소가 있는데 날짜를 시분초로 나누고 싶다고 하면 위 코드를 다음과 같이 바꾸자
class Person { key constructor(_name, _age, _date) { this.name = _name this.age = _age this.date = _date } getName() { return this.name } static setDate(now){ console.log(this) return '시분초' && '날짜' } } const person = new Person("ingoo", 32)
이런식으로 전체 내용을 조절하고 싶을때 사용한다는 사실을 기억하자.
'JAVA SCRIPT' 카테고리의 다른 글
JS -This 바인딩 (0) 2023.02.21 JS - 접근제어자 (0) 2023.01.19 Node.js - 의존성 주입 (0) 2023.01.17 JS(심화) - 실행컨텍스트 (0) 2023.01.12 JS (심화) - 렉시컬 환경/클로저 (0) 2023.01.12