16-4. 자바스크립트 특징 / 메소드 형태
지금까지 다뤘던 메소드와 함수 형태를 정리합니다.
메소드 호출 형태
데이터 형태
- 배열: [“book”, “책”, 123]
OOP의 일반적인 형태
var data = ["book", "책", 123]; var obj = new Array(); var result = obj.concat(data); console.log(result); // ["book", "책", 123]
- new Array()로 인스턴스 생성
- obj.concat(data);
obj 인스턴스의 concat() 호출
데이터를 파라미터로 넘겨줌 - JS는 일반적으로 이 방법을 사용하지 않고 아래의 방법을 사용
아주 일반적인 형태로 인스턴스를 활용해 메소드를 호출한다.
오브젝트를 활용해 메소드를 호출하는 경우도 있지만 대부분 인스턴스를 활용한다.
자바스크립트 형태
데이터로 메소드 호출
var data = ["book", "책", 123]; var result = data.concat(); console.log(result); // ["book", "책", 123]
- data.concat()
- 엔진이 data 타입에 따라 오브젝트 결정
원래는 말이 안됩니다.
자바스크립트 특성상 가능한 겁니다.
자바스크립트 엔진이 data 타입을 파악해 빌트인 Array 오브젝트의 prototype에 연결되어있는 메소드로 인스턴스를 만들어서 그 인스턴스의 concat 메소드를 호출하는 겁니다.
이때 data를 내부에서 파라미터로 넘겨주는 겁니다. - data가 배열이므로 Array의 concat() 호출
data를 파라미터로 넘겨 줌
오브젝트의 함수 호출
var data = ["book", "책", 123]; var bookObj = { concat: function (data) { return data.concat(); } } console.log(bookObj.concat(data)); // ["book", "책", 123]
위 방법은 꽤나 많이 사용하는 아주 심플한 방법입니다.
일단 위 방식은new
연산자는 사용할 수 없습니다.
즉, bookObj 안에 공통적인 내용이 들어간다는 겁니다.
예를 들어, 회사 전체에 공통으로 사용하는 어떤 기능이 있다고 합시다.
그런 것들을 위와 같이 작성해놓으면 그런 것들은 인스턴스를 만들 필요가 없으므로 위 처럼 심플하게 사용할 수 있습니다.
인스턴스를 만들지 않으므로 메모리를 많이 차지하지도 않는다.인스턴스의 메소드 호출
var data = ["book", "책", 123]; var Book = function (data) { this.data = data; } Book.prototype.concat = function () { return this.data.concat(); } var oneInstance = new Book(data); console.log(oneInstance.concat()); // ["book", "책", 123]
Object 확장
- 네임스페이스(NameSpace)로 사용
- Book = {};
- Book.Javascript = {}; Book.Html = {};
위와 같이 작성하면Javascript
,Html
은 오브젝트가 되고Book
은 네임스페이스가 됩니다.
예를 들면, 책을 관리하는 게 있고, 회원을 관리하는 게 있습니다.
그리고 각각에 속한 메소드들이 있습니다.
그런데 이를 하나로 통합해버리면 서로 메소드 이름이 중첩되면 사용하기 어렵잖아요?
그때 이런식으로 업무별로 그룹핑해서 오브젝트로 사용하는 겁니다.
이를 네임스페이스라고 합니다. 만약 Book.Javascript.abc가 있다면,Book.Javascript
가 네임스페이스가 되는 겁니다.
메소드 사용 팁
메소드를 알 수 없을 때
- MDN 활용 예시
각 메소드의 정의를 시간날 때 읽어보시기 바랍니다.
그것이 자바스크립트를 잘하는 방법입니다.
지름길은 없습니다. 이렇게 감을 잡으셔야됩니다. - MDN에서 “오브젝트 이름”으로 검색
- 왼쪽의 리스트에서 메소드 이름을 찾습니다.
- 메소드 이름이 시맨틱을 갖고 있으므로 메소드 이름으로 기능 예측 가능
- MDN 활용 예시
메소드를 알고 있을 때
- 기능을 정확하게 사용하기 위해 사용