Node.js는 util 모듈을 통해 다양한 문자열을 처리하는 기초 함수들을 제공한다.
util.format()
함수는 첫번째 전달인자로 가공 형식 문자열을 입력 받고, 문자열을 가공한 결과를 반환한다. 다음은 format()
함수의 문법이다.
util.format(format, [...]);
format
은 가공 형식 문자열이고, [...]
는 추가될 수 있는 전달인자들이다.
format
전달인자는 문자형으로 0이나 다른 대체문자를 포함할 수 있다. 다음과 같은 대체 문자를 사용할 수 있다.
format()
을 사용할 때 다음을 주의해야 한다.
대체문자만큼 전달인자가 존재하지 않다면, %s
와 같은 대체 문자는 변환되지 않는다.
util.format('%s = %s', 'Item1'); // 'Item1'=%s
대체문자보다 전달인자가 더 많다면, 추가로 명시된 전달인자들은 공백 구분자로 연결해 하나의 문자열로 변환된다.
util.format('%s = %s', 'Item1', 'Item2', 'Item3'); // 'Item1 = Item2 Item3'
첫번째 전달인자가 가공 형식 문자열이 아니라면, util.format()
은 각 전달인자를 문자열로 변환하고 공백 구분자로 연결해 하나의 문자열로 생성해 반환한다.
util.format(1, 2, 3); // '1, 2, 3'
종종 어떤 명령에 의해 돌려받은 객체가 어떤 형식인지를 확인하는 것이 필요하다.
util 모듈은 객체가 Array 혹은 RexExp, Date, Error 객체 형식인지를 확인하기 위해 isArray(object)
및 isRegExp(object)
, isDate(object)
, isError(object)
와 같은 편리한 함수를 제공한다.
util.isArray([1,2,3]); // true
util 모듈의 유용한 특징 중 하나는 stdout`이나 stderr 출력 스트림에 데이터를 동기화 모드로 슬 수 있다는 점이다. 동기화 쓰기는 데이터를 다 쓸 때까지 프로세스를 블록킹하는 것을 의미한다. 따라서 데이터를 쓰는 동안 시스템은 데이터를 변경하는 동작을 할 수 없다는 것을 보장한다.
동기화 데이터 쓰기를 사용하려면 쓰기 동작을 완료할 때까지 프로세스를 블로킹하는 함수를 사용한다.
util.inspect()
함수는 객체를 점검하고 객체의 값을 문자열로 표현해 반환한다.
util.inspect(object, [options])
object
전달인자는 문자열로 변환해야 할 자바스크립트 객체를 나타낸다. options
메소드는 문자열을 가공하는 과정의 몇 가지 과정을 제어할 수 있다. options
는 다음 속성을 포함한다.
showHidden
, depth
, colors
, customInspect
출력결과를 원하는 대로 생성하기 위해 객체에 직접 inspect()
함수를 정의할 수 있다.
var obj = {first: 'Brad', last: 'Dayley'};
obj.inspect = function(depth){
return '{name: "' + this.first + " " + this.last + '"}';
};
console.log(util.inspect(obj)); // {name: "Brad Dayley"}
util.inherits()
메소드는 기타 객체의 prototype 메소드들을 상속받는 객체를 생성할 수 있다. 새 객체를 생성할 때 prototype 메소드는 자동 적용된다.
util.inherits(constructor, superConstructor);
prototype의 constructor
는 prototype의 superConstructor
로 설정되고, 새로운 객체가 생성될 때 실행된다. constructor.super_
속성을 사용하면 직접 생성한 객체의 생성자에서 superConstruct
를 접근할 수 있다.
다음은 inherits()
를 사용해 events.EventEmitter
객체의 생성자를 상속받아 Writable 스트림을 생성한 예다.
var util = require("util");
var events = require("events");
function Writer() {
events.EventEmitter.call(this);
}
util.inherits(Writer, events.EventEmitter);
Writer.prototype.write = function(data) {
this.emit("data", data);
};
var w = new Writer();
console.log(w instanceof events.EventEmitter);
console.log(Writer.super_ === events.EventEmitter);
w.on("data", function(data) {
console.log('Received data: "' + data + '"');
});
w.write("Some Data!");
위 코드에서 console.log(w instanceof events.EventEmitter)
는 객체가 event.EventEmitter
의 인스턴스임을 확인한다. 또한 console.log(Writer.super_ === events.EventEmitter)
는 Writer.super_
의 값이 eventsEmitter
라는 것을 보여준다.