개요
- 하나의 파일, 하나의 프로젝트 내에서 함수의 개수가 점점 많아지고 유사한 기능이 점점 많아지다보면, 함수명을 짓는게 힘듦.
- 특히 상속 받은 함수, 클래스 내 고유한 함수를 구분해주어야 하는 등 속성 측면에서도 함수명을 보다 구체적이고 구분 되도록 지어야 함.
- 따라서 이번 프로젝트 (hand-pose-detection, face-landmarks-detection, pose-detection) 에서는 함수를 구분하기 위해 ①상속 받은 함수는 부모 클래스와 동일한 함수명 ②static 키워드 ③_함수명 을 가장 많이 사용하였음
- 이하에서는 위 방법 중 ②, ③ 에 대해 소개함.
1. static
- 핵심 코드
static detect(imageData) {
if (!this._detector) {
this._createDetector().then(detector => {
this._detector = detector;
console.log("model loading success!, detector: ", this._detector);
})
}
//...//
}
- 의미, 기능
- 정적 메서드
- 클래스의 prototype이 아닌 함수 자체에 메서드를 설정 → 양자는 메서드 접근 방법에서 차이가 있음
const HandposeDetector = require('./detector-handpose');
// prototype에 메서드를 설정 : 생성자 호출 -> 메서드 호출
const handposeDetector = new HandposeDetector();
handposeDetector.detect(imageData);
// 함수 자체에 메서드를 설정 : 클래스명.메서드명으로 메서드 호출
HandposeDetector.detect(imageData);
- HandposeDetector.detect(imageData) 이 코드 같은 메서드 접근 방법에서도 알 수 있듯, 정적 메서드는 프로퍼티 형태로 직접 할당하는 것처럼 메서드를 정의
(마치 프로퍼티에 접근하는 것처럼 메서드를 호출) - 정적 메서드도 상속됨. 따라서 자식클래스명.함수명 형태로 호출 가능
- 사용 이유 : 데이터를 클래스 수준에 저장하고 싶을 때
- 프로젝트에 적용
- HandposeDetector, FaceDetector, PoseDetector 같은 커스텀 detector를 만들 때, Detector 클래스를 상속 받아 만들었음
- 그래서 상속 받은 함수와 커스텀 detector 만의 함수를 구분 지을 필요 有, 따라서 초기에 static으로 구분
- 정적 프로퍼티도 static 프로퍼티 정의 형태로 사용하면 됨
2. _함수명
- 예시 코드
_createDetector() {
const model = SupportedModels.MediaPipeHands;
const detector = createDetector(model, {
runtime: "tfjs",
modelType: "lite",
maxHands: 2, // or 2~10.
flipHorizontal: false,
staticImageMode: false,
detectorModelUrl:
"/static/tensorflow-models/tfjs-model_handpose_3d_detector_lite_1/model.json",
landmarkModelUrl:
"/static/tensorflow-models/tfjs-model_handpose_3d_landmark_lite_1/model.json",
});
return detector;
}
- HandposeDetector, FaceDetector, PoseDetector 같은 커스텀 detector를 만들 때, Detector 클래스를 상속 받아 만들었음
- 그래서 상속 받은 함수와 커스텀 detector 만의 함수를 구분 지을 필요 有
- 코딩 초기 당시 static 키워드를 활용하여 구분하였음. 그러나 이 방법은 중간 중간 해당 함수 호출할 때, 클래스명.함수명 으로 호출해야하여 번거롭다는 단점
- 따라서 사수께서 추천해주신 방법은 _함수명() 임. 위처럼 함수를 정의하고 호출할 때는 this._createDetector() 로 호출하면 됨
'Backend > Node.js' 카테고리의 다른 글
[Coding-Practice] 코드 최적화 - 2. 유효성 검사 (0) | 2023.11.30 |
---|---|
[Coding-Practice] 코드 최적화 - 1. this.~ (1) | 2023.11.30 |
[Class] 클래스 상속 (0) | 2023.11.30 |
[Setting] npm link 2 (0) | 2023.11.30 |
[Setting] Node.js, npm 버전 업데이트 (0) | 2023.10.18 |