• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[정리시간]부족하지만...

22.03.18 04:00 작성 조회수 107

3

fromCodePoint() 와 codePointAt()의 차이는

함수와 메소드의 차이입니다.

함수와 메소드의 차이는 객체에 종속 되는가? 라고 생각합니다.

 

빌트인 오브젝트는 엔진이 만든 객체이고, 우리가 사용하는 값들은 객체로 생성된 인스턴스라는 생각입니다.

 

fromCodePoint()는  코드포인트를 해당하는 문자로 반환하는 함수인데,

유니코드의 코드포인트는 "숫자"입니다. 

만약 "숫자"에 fromCodePoint()를 '메소드'로 연결하려한다면,

자바스크립트엔진은 "숫자"를 Number타입으로 판단하고 빌트인Number오브젝트 객체안에서

fromCodePoint()를 찾으려 할 것입니다.(당연히 에러가나고 엔진은 찾지도 않겠지만 '만약'입니다)

'숫자'를 처리한다는 것이 요점입니다. 처리하기이전에 생성되어야하고

개발자입장에서 생성하는과정은 생략되어있지만 엔진입장에서는

let num = 123 은

let num = new Number(123);// 이과정이 생략되어있음을 기억해야합니다.

이것이 유니코드 "숫자"를 처리하는 빌트인String오브젝트의

fromCodePoint()가 메소드가 될수 없고 함수 일수 밖에 없는 이유입니다.

빌트인 Number오브젝트의 인스턴스인 '숫자'에 빌트인String오브젝트의 '메소드'를 연결하는것은 맞지않으나,

함수의 파라미터로서 숫자를 받아 처리하는것은 상관없기 때문입니다. 

 

반대로

codePointAt()은 "문자열"을 유니코드포인트로 반환합니다.

중요점은 "문자열"을 처리한다는 것입니다.

"문자열"이 이미 빌트인String오브젝트 객체로 생성된 인스턴스입니다. 마찬가지로

let hello = "hello" 는

let hello = new String("hello") 가 생략되어있음을 기억해야합니다.

이때 인스턴스와 객체는 프로토타입으로 연결되어있고 인스턴스는 빌트인String오브젝트 메소드를 상속받아

사용할수있습니다. 

 

메서드는 객체에 종속된다는 설명은 이런것입니다.

메서드는 메서드를 가지고 있는 객체, 그리고 그 객체로 생성되고 메소드를 상속받은 인스턴스만

메서드를 사용하기를 바라는(기대하는) 것입니다.

굳이 그렇지 않다면 같은기능을 하는 함수로 정의하면 되는거 아닐까요?

굳이 메소드로 만들 이유가없습니다.

 

그러므로 만약 codePointAt()앞에 [1,2,3]을 작성한다면,

 is not function() 에러가 뜨겠지만, 엔진입장에서는

[1,2,3]은 빌트인Array오브젝트 객체로 생성된 인스턴스이기때문에 빌트인Array오브젝트 객체안에서는

해당 메소드를 찾을수 없다는 논리로 설명 할수 있겠습니다. 

 

부족하지만 제 이해는 이렇습니다. 다른분들은 더 나은 답을 찾으시리라 믿습니다.

감사합니다.

 

 

 

 

 

 

 

 

 

답변 0

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!