안녕하세요 개발하는 토마토입니다 🍅 제 글을 보신 분들은 아시겠지만, 우테코 프리코스를 참여하면서 기존에 해왔던 함수형 프로그래밍을 잠깐 내려놓고 클래스형 프로그래밍을 해보았습니다! 하면서 들었던 가장 큰 의문,,,
정적 메서드랑 인스턴스 메서드 보기엔 static 붙는 거만 다르고, 호출할 때 방식만 좀 다르다는 건데 도대체 이걸 언제 써야 하고, 왜 둘이 분리되어 있는가!?
우선 인스턴스 메서드에 대해 알아봅시다.
인스턴스 메서드
인스턴스 메서드는 아래와 같은 특징을 가진 메서드입니다
1) 객체 고유의 상태와 관련된 것을 다룰 때 사용
2) 각각의 인스턴스에 종속
3) 클래스의 인스턴스를 생성해야 호출 가능
전 1,2에 대한 부분이 이해가 잘 안됐어요 😳
아래 Person 이라는 사람에 대한 클래스가 있다고 가정해보죠
객체의 name과 age를 활용해서 인삿말을 출력하는 greet()과 객체의 age 값을 1 증가시키는 addAge() 라는 인스턴스 메서드가 존재합니다
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
greet() {
//메서드 내부에서 클래스의 인스턴스 변수에 접근 가능
return `Hello, my name is ${this.name} and I'm ${this.age} years old.`
}
addAge() {
return this.age += 1
}
}
const john = new Person('John', 24)
const alice = new Person('Alice', 30)
console.log(john.greet()) // Hello, my name is John and I'm 24 years old.
console.log(alice.greet()) // Hello, my name is Alice and I'm 30 years old.
alice.addAge()
console.log(john.greet()) // Hello, my name is John and I'm 24 years old.
console.log(alice.greet()) // Hello, my name is Alice and I'm 31 years old.
addAge() 라는 메서드는 alice 에 대해서만 사용이 되었기 때문에, alice 객체의 나이인 30에 1을 증가 시켰고, john의 경우 값이 변하지 않고 그대로 있는 것을 알 수 있습니다 :)
즉, "인스턴스 메서드는 객체의 고유한 상태를 처리하는 동작에 사용이 되고,
객체의 데이터의 상태에 따라 달라지기 때문에
객체 고유의 데이터를 읽거나 수정하는 작업에서 사용하는 것이 적절하다."
라는 결론이 나오게 되겠죠 !
정적 메서드
정적 메서드는 아래와 같은 특징을 가졌습니다
1) static 키워드를 붙임
2) 클래스.메서드명() 형식으로 호출하며 인스턴스로 호출하지 않음
3) 메서드 내부의 this는 클래스 자체를 참조함
여기선 3에 대한 부분이 이해가 잘 안됐어요 😳
class MathUtils {
// 스태틱 메서드
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
}
console.log(MathUtils.add(10, 5)); // 15
console.log(MathUtils.subtract(10, 5)); // 5
정적 메서드는 인스턴스가 아닌 클래스로 호출이 되죠 ! 즉, 정적 메서드 내부의 this는 호출한 클래스 자체를 가리키게 됩니다!
즉, 정적 메서드는 클래스와 연관된 전역적인 동작(예: 유틸리티 함수)을 수행하며, 특정 인스턴스와는 무관하게 작동하게 됩니다!
이렇게 정리해보고 나니 어떤 점이 다르고, 어떨 때 어떤 메서드를 쓰는 것이 좋을지 한 눈에 보이네요 ! (그렇지만 적용은 또 다른,, 일인거 다들 아시죠?)
다음 편 예고 : private 메서드, 무엇이 그렇게 private 한 것일까?
'궁금증 해결소' 카테고리의 다른 글
| [라이브러리 개발 일기] Stylelint 가 어떻게 하드코딩을 막을까? (0) | 2026.03.21 |
|---|---|
| [라이브러리 개발 일기] 디자인 시스템 컨벤션 좀 지켜 !! - 1 (1) | 2026.01.06 |
| ‘깨져도 괜찮은 웹’을 만드는 법 – 우아한 낮춤 (0) | 2025.10.20 |
| 프론트 개발자가 바라보는 멱등성🔥 (0) | 2025.10.17 |
| TroubleShoot Ep.1 험난했던 빌드 오류 해결의 과정.. (2) | 2025.01.22 |