Node.js 일반 도구
util은 너무 간소화된 핵심 JavaScript 기능의 단점을 보완하기 위해 일반적으로 사용되는 기능 모음을 제공하는 Node.js 핵심 모듈입니다.
util.inherits
util.inherits(constructor, superConstructor)는 객체 간 프로토타입 상속을 구현하는 함수입니다.
JavaScript의 객체 지향 기능은 프로토타입 기반으로 일반적인 클래스 기반 기능과 다릅니다. JavaScript는 객체 상속의 언어 수준 기능을 제공하지 않지만 프로토타입 복사를 통해 이를 제공합니다.
여기에서는 util.inherits의 사용법만 소개합니다.
var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello = function() { console.log('Hello ' + this.name); }; } Base.prototype.showName = function() { console.log(this.name); }; function Sub() { this.name = 'sub'; } util.inherits(Sub, Base); var objBase = new Base(); objBase.showName(); objBase.sayHello(); console.log(objBase); var objSub = new Sub(); objSub.showName(); //objSub.sayHello(); console.log(objSub);
기본 개체인 Base를 정의하고 Base에서 상속된 Sub는 생성자에 정의된 속성 3개와 프로토타입에 정의된 속성 1개입니다. 기능, 상속은 util.inherits를 통해 구현됩니다. 실행 결과는 다음과 같습니다.
base Hello base { name: 'base', base: 1991, sayHello: [Function] } sub { name: 'sub' }
참고: Sub는 프로토타입에서 Base로 정의된 함수만 상속하며, 생성자 내부에 생성된 base 속성과 sayHello 함수는 Sub로 상속되지 않습니다.
동시에 프로토타입에 정의된 속성은 console.log에서 객체의 속성으로 출력되지 않습니다. objSub.sayHello();의 주석을 제거하면 다음과 같이 표시됩니다.
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object #<Sub> has no method 'sayHello' at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)
util.inspect
util.inspect(object,[showHidden],[깊이],[colors])는 임의의 변환 방법입니다. 디버깅 및 오류 출력에 자주 사용되는 문자열에 대한 객체입니다. 변환할 개체인 매개변수 개체를 하나 이상 허용합니다.
showHidden은 선택적 매개변수입니다. 값이 true이면 숨겨진 정보가 더 많이 출력됩니다.
깊이는 최대 재귀 수준 수를 나타냅니다. 객체가 복잡한 경우 수준 수를 지정하여 출력 정보의 양을 제어할 수 있습니다. 깊이를 지정하지 않으면 기본적으로 2단계의 재귀가 수행됩니다. null을 지정하면 재귀 수준 수를 제한하지 않고 개체를 완전히 순회한다는 의미입니다. 색상 값이 true인 경우 출력 형식은 ANSI 색상으로 구분되며 일반적으로 터미널에서 더 아름다운 효과를 표시하는 데 사용됩니다.
특히 util.inspect는 객체를 단순히 문자열로 직접 변환하지 않으며 객체가 toString 메서드를 정의하더라도 호출되지 않는다는 점에 유의해야 합니다.
var util = require('util'); function Person() { this.name = 'byvoid'; this.toString = function() { return this.name; }; } var obj = new Person(); console.log(util.inspect(obj)); console.log(util.inspect(obj, true));
실행 결과는 다음과 같습니다.
{ name: 'byvoid', toString: [Function] } { toString: { [Function] [prototype]: { [constructor]: [Circular] }, [caller]: null, [length]: 0, [name]: '', [arguments]: null }, name: 'byvoid' }
util.isArray(object)
주어진 매개변수 "object"가 배열이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // false
util.isRegExp(object)
주어진 매개변수 "object"가 정규 표현식이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp('another regexp')) // true util.isRegExp({}) // false
util.isDate(object)
주어진 매개변수 "object"가 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isDate(new Date()) // true util.isDate(Date()) // false (without 'new' returns a String) util.isDate({}) // false
util.isError(object)
주어진 매개변수 "object"가 오류 객체이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isError(new Error()) // true util.isError(new TypeError()) // true util.isError({ name: 'Error', message: 'an error occurred' }) // false
자세한 내용은 http://nodejs.org/api/util.html을 참조하세요.