자바스크립트에서 정적 메서드(Static Method)란 무엇인가요?
_____A: 정적 메서드는 클래스 인스턴스가 아니라 클래스 자체에 속하는 메서드를 의미합니다. 즉, 해당 메서드는 클래스를 통해 직접 호출할 수 있고, 클래스에서 생성된 개별 객체에서는 접근할 수 없습니다.
Q: 정적 메서드를 어떻게 정의하나요?
A: 클래스 내부에서 메서드 앞에 `static` 키워드를 붙여 정의합니다. 예:
```javascript
class MyClass {
static myStaticMethod() {
return 'Hello from static method';
}
}
```
Q: 정적 메서드는 어떻게 호출하나요?
A: 클래스 이름을 통해 직접 호출합니다. 예:
```javascript
MyClass.myStaticMethod(); // "Hello from static method"
```
Q: 정적 메서드와 인스턴스 메서드의 차이점은 무엇인가요?
A: - 정적 메서드: 클래스에 속하며 인스턴스 없이 호출 가능
- 인스턴스 메서드: 각각의 객체 인스턴스에 속하며 인스턴스를 통해 호출해야 함
Q: 정적 메서드 내에서 `this`는 무엇을 가리키나요?
A: 정적 메서드에서 `this`는 해당 클래스를 가리킵니다. 인스턴스가 아니므로 인스턴스 프로퍼티에는 접근할 수 없습니다.
Q: 정적 메서드는 언제 사용하나요?
A: - 객체의 특정 상태나 데이터와 무관한 유틸리티 함수 작성 시
- 클래스 관련 공통 기능을 제공할 때
- 팩토리 메서드 구현 시 (인스턴스를 생성하는 메서드)
Q: 정적 메서드는 인스턴스 메서드에서 호출할 수 있나요?
A: 네, 호출할 수 있지만 인스턴스 메서드 내에서는 `this.constructor.staticMethod()`와 같은 방식으로 호출해야 합니다. 직접 `this.staticMethod()`는 불가능합니다.
Q: 정적 메서드는 클래스를 상속받은 자식 클래스에서 사용할 수 있나요?
A: 네, 자식 클래스가 부모 클래스의 정적 메서드를 상속받아 그대로 사용할 수 있습니다. 필요하면 자식 클래스에서 오버라이드도 가능합니다.
Q: 예제 코드
```javascript
class Calculator {
static add(a, b) {
return a + b;
}
multiply(a, b) {
return a * b;
}
}
console.log(Calculator.add(3, 4)); // 7
const calc = new Calculator();
console.log(calc.multiply(3, 4)); // 12
// calc.add(3, 4); // 오류: add는 인스턴스 메서드가 아님
```
Q: 요약
- 정적 메서드는 `static` 키워드로 선언
- 클래스에서 직접 호출 가능
- 인스턴스에서는 접근 불가
- 유틸리티성 기능이나 클래스 공통 기능에 적합한 메서드 유형
즉, 정적 메서드는 클래스의 인스턴스를 생성하지 않고도 호출할 수 있는 메서드입니다.
이러한 메서드는 주로 유틸리티 기능이나 클래스와 관련된 특정 작업을 수행하는 데 사용됩니다.
정적 메서드의 정의 정적 메서드는 `static` 키워드를 사용하여 정의됩니다.
예를 들어, 다음과 같이 클래스를 정의하고 정적 메서드를 추가할 수 있습니다: ```javascript class MathUtils { static add(a, b) { return a + b; } static multiply(a, b) { return a * b; } } // 정적 메서드 호출 console.log(MathUtils.add(5,
3)); // 8 console.log(MathUtils.multiply(5,
3)); // 15 ``` 위의 예제에서 `add`와 `multiply` 메서드는 `MathUtils` 클래스의 정적 메서드입니다.
이 메서드는 `MathUtils` 클래스의 인스턴스를 생성하지 않고도 직접 호출할 수 있습니다.
정적 메서드의 특징 1. 클래스에 속함 : 정적 메서드는 클래스의 인스턴스가 아닌 클래스 자체에 속합니다.
따라서 인스턴스 변수나 인스턴스 메서드에 접근할 수 없습니다.
2. 유틸리티 함수 : 정적 메서드는 주로 클래스와 관련된 유틸리티 함수로 사용됩니다.
예를 들어, 수학 연산, 문자열 처리, 데이터 변환 등의 기능을 제공할 수 있습니다.
3. 상속 : 정적 메서드는 클래스 상속을 통해 자식 클래스에서도 사용할 수 있습니다.
자식 클래스에서 부모 클래스의 정적 메서드를 호출할 수 있으며, 필요에 따라 오버라이드할 수도 있습니다.
```javascript class Shape { static describe() { return 'This is a shape'; } } class Circle extends Shape { static describe() { return 'This is a circle'; } } console.log(Shape.describe()); // This is a shape console.log(Circle.describe()); // This is a circle ```
4. 정적 프로퍼티 : 정적 메서드는 정적 프로퍼티와 함께 사용될 수 있습니다.
정적 프로퍼티는 클래스 자체에 속하는 변수로, 클래스의 모든 인스턴스에서 공유됩니다.
```javascript class Counter { static count = 0; constructor() { Counter.count++; } static getCount() { return Counter.count; } } new Counter(); new Counter(); console.log(Counter.getCount()); // 2 ``` 정적 메서드의 사용 사례 정적 메서드는 다양한 상황에서 유용하게 사용될 수 있습니다.
몇 가지 예를 들어보면: 1. 팩토리 메서드 : 객체를 생성하는 메서드를 정적 메서드로 정의하여, 인스턴스를 생성하는 방법을 캡슐화할 수 있습니다.
```javascript class User { constructor(name) { this.name = name; } static createAdmin(name) { const user = new User(name); user.role = 'admin'; return user; } } const admin = User.createAdmin('Alice'); console.log(admin); // User { name: 'Alice', role: 'admin' } ```
2. 유틸리티 클래스 : 여러 관련 기능을 제공하는 유틸리티 클래스를 만들고, 그 안에 정적 메서드를 정의하여 코드의 재사용성을 높일 수 있습니다.
```javascript class StringUtils { static toUpperCase(str) { return str.toUpperCase(); } static toLowerCase(str) { return str.toLowerCase(); } } console.log(StringUtils.toUpperCase('hello')); // HELLO console.log(StringUtils.toLowerCase('WORLD')); // world ``` 결론 정적 메서드는 자바스크립트에서 클래스의 인스턴스와 독립적으로 동작하는 메서드로, 유틸리티 기능, 팩토리 메서드, 상수 및 공유 데이터를 처리하는 데 매우 유용합니다.
이러한 메서드를 적절히 활용하면 코드의 가독성과 재사용성을 높일 수 있으며, 클래스의 구조를 더욱 명확하게 정의할 수 있습니다.
작성자:
정지안 [비회원]
| 작성일자: 1년 전
2024-09-08 14:47:26
조회수: 212 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 212 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.