객체 지향 프로그래밍에서 클래스 접근 제어자는 매우 중요한 개념입니다. TypeScript에서는 public
, private
, protected
라는 세 가지 주요 접근 제어자를 제공하여 개발자가 코드의 가독성과 안전성을 높일 수 있도록 돕습니다. 이번 포스트에서는 각 접근 제어자의 정의와 사용 예시를 통해 이들이 어떻게 코드의 품질을 향상시키는지 살펴보겠습니다.
접근 제어자의 중요성
클래스 접근 제어자는 다음과 같은 역할을 합니다:
- 데이터 보호: 객체의 상태를 보호하고, 의도하지 않은 데이터 변경을 방지합니다.
- 코드 가독성 향상: 코드의 구조를 명확하게 하여 다른 개발자들이 이해하기 쉽게 만듭니다.
- 유지보수 용이성: 코드의 변경이 필요할 때, 접근 제어자를 통해 영향을 최소화할 수 있습니다.
1. Public (공개)
정의
public
으로 선언된 속성이나 메서드는 클래스 외부에서도 자유롭게 접근할 수 있습니다. 이는 클래스의 인터페이스를 외부에 노출하여 다른 코드와의 상호작용을 가능하게 합니다.
예시
class Person {
public name: string;
constructor(name: string) {
this.name = name;
}
public greet() {
console.log(`안녕하세요, ${this.name}입니다.`);
}
}
const person = new Person("홍길동");
person.greet(); // 안녕하세요, 홍길동입니다.
위 예제에서 name
속성과 greet()
메서드는 모두 공개되어 있어 외부에서 직접 호출할 수 있습니다. 이는 객체가 자신의 상태를 외부에 알리고, 다른 객체와의 상호작용을 가능하게 하는 중요한 기능입니다.
2. Private (비공개)
정의
private
로 선언된 속성이나 메서드는 해당 클래스 내부에서만 접근할 수 있으며, 외부에서는 사용할 수 없습니다. 이는 데이터 은닉을 통해 객체의 내부 상태를 보호하고, 클래스의 구현 세부사항을 숨기는 데 유용합니다.
예시
class BankAccount {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
public deposit(amount: number) {
this.balance += amount;
console.log(`입금 후 잔액은 ${this.balance}원입니다.`);
}
private logTransaction(message: string) {
console.log(message);
}
}
const account = new BankAccount(1000);
account.deposit(500); // 입금 후 잔액은 1500원입니다.
// account.balance; // 오류 발생! 'balance'는 private이므로 접근 불가
위 예제에서 balance
와 logTransaction()
은 비공개로 설정되어 있어 외부 코드에서는 직접적으로 호출하거나 수정할 수 없습니다. 이는 클래스의 내부 상태를 보호하고, 외부에서의 불필요한 접근을 차단하여 데이터의 무결성을 유지하는 데 기여합니다.
3. Protected (보호)
정의
protected
로 선언된 속성이나 메서드는 해당 클래스를 상속받은 자식 클래스 내에서만 접근 가능합니다. 이는 부모 클래스와 그 자식들 간에 공유되는 데이터나 기능을 제공하는 데 유용하며, 상속 구조에서의 코드 재사용성을 높입니다.
예시
class Animal {
protected species: string;
constructor(species: string) {
this.species = species;
}
}
class Dog extends Animal {
public bark() {
console.log(`${this.species}가 짖습니다!`);
}
}
const dog = new Dog("강아지");
dog.bark(); // 강아지가 짖습니다!
// console.log(dog.species); // 오류 발생! 'species'는 protected이므로 외부에서는 직접 접근 불가
위 예제에서 species
는 보호되었기 때문에 자식 클래스인 Dog
에서는 사용할 수 있지만 인스턴스화된 객체인 dog
를 통해서는 직접적으로 접근할 수 없습니다. 이는 상속 관계에서 부모 클래스의 속성을 자식 클래스가 안전하게 사용할 수 있도록 하여, 코드의 일관성을 유지하는 데 도움을 줍니다.
요약
클래스의 접근 제어자는 다음과 같은 역할을 합니다:
- Public - 모든 곳에서 자유롭게 액세스 가능하여 외부와의 상호작용을 용이하게 함.
- Private - 클래스 내부에서만 액세스 가능하며 데이터 은닉 효과를 제공하여 내부 상태를 보호함.
- Protected - 부모 및 자식 클래스 간에 공유되지만 외부에는 노출되지 않아 상속 구조에서의 안전성을 보장함.
이러한 개념들을 활용하면 코드 구조를 보다 명확하게 하고, 의도하지 않은 변경으로부터 데이터를 보호하여 프로그램의 안정성을 높일 수 있습니다. 이를 통해 개발자는 더 나은 품질의 소프트웨어를 작성할 수 있으며, 유지보수와 확장성 또한 용이해집니다.
'프로그래밍 > Typescript' 카테고리의 다른 글
타입스크립트에서의 클래스 상속: 객체 지향 프로그래밍의 핵심 (0) | 2025.03.27 |
---|---|
TypeScript의 교차 타입: 복잡한 데이터 구조를 간편하게 관리하는 방법 (0) | 2025.03.27 |
TypeScript에서 배열의 중요성과 활용법 (0) | 2025.03.26 |
타입스크립트에서의 클래스 데코레이터 활용법 (0) | 2025.03.26 |
TypeScript에서의 인터페이스: 함수 타입의 중요성 (0) | 2025.03.26 |