타입스크립트에서 접근 제어자(Access Modifiers)는 무엇인가요?
_____Q1. 접근 제어자(Access Modifiers)란 무엇인가요?
접근 제어자는 클래스 내 멤버(속성, 메서드)의 접근 수준을 지정하는 키워드로, 객체지향 프로그래밍에서 데이터 캡슐화(encapsulation)를 지원합니다. 타입스크립트에서는 `public`, `private`, `protected` 세 가지 접근 제어자를 제공합니다.
Q2. 타입스크립트에 어떤 접근 제어자가 있나요?
- `public`: 기본값이며, 모든 곳에서 접근 가능합니다.
- `private`: 선언된 클래스 외부에서는 접근할 수 없습니다. (클래스 내부에서만 접근 가능)
- `protected`: 선언된 클래스 및 해당 클래스를 상속받은 자식 클래스에서만 접근 가능합니다.
Q3. `public` 접근 제어자의 특징은 무엇인가요?
- 클래스 외부와 내부에서 모두 접근 가능합니다.
- 생략해도 기본적으로 `public`이 적용됩니다.
- 주로 외부에 노출해도 좋은 멤버에 사용합니다.
Q4. `private` 접근 제어자는 어떻게 동작하나요?
- 같은 클래스 내부에서만 접근할 수 있습니다.
- 클래스 외부나 상속받은 자식 클래스에서도 접근할 수 없습니다.
- 멤버를 외부에서 직접 수정하거나 조회하지 못하도록 감추고 싶을 때 사용합니다.
Q5. `protected`는 어떤 상황에서 사용하나요?
- 클래스 내부 및 상속받은 자식 클래스에서 접근할 수 있습니다.
- 외부에는 숨기되, 상속 관계에서는 멤버를 공유하고 싶을 때 사용합니다.
Q6. 타입스크립트에서 접근 제어자의 용도는 무엇인가요?
- 데이터 무결성 보호: 외부에서 직접 변경하지 못하도록 멤버를 제어합니다.
- API 명확화: 어떤 멤버가 외부에서 사용 가능한지 명확히 합니다.
- 상속 관계 관리: 자식 클래스가 접근해야 하는 멤버를 조절합니다.
Q7. 예제를 통해 각 접근 제어자 사용법을 알려주세요.
```typescript
class Person {
public name: string; // 외부에서 접근 가능
private age: number; // 외부에서 접근 불가
protected gender: string; // 상속받은 클래스에서만 접근 가능
constructor(name: string, age: number, gender: string) {
this.name = name;
this.age = age;
this.gender = gender;
}
public greet() {
console.log(`Hi, I'm ${this.name}`);
}
private getAge() {
return this.age;
protected getGender() {
return this.gender;
}
}
class Employee extends Person {
public role: string;
constructor(name: string, age: number, gender: string, role: string) {
super(name, age, gender);
this.role = role;
}
public showDetails() {
console.log(this.name); // 가능 (public)
// console.log(this.age); // 오류 (private)
console.log(this.gender); // 가능 (protected)
}
}
const p = new Person("Alice", 30, "female");
console.log(p.name); // 가능
// console.log(p.age); // 오류
// console.log(p.gender); // 오류
```
Q8. 인터페이스에서는 접근 제어자를 사용할 수 있나요?
아니요, 인터페이스는 타입 구조를 정의하기 때문에 접근 제어자를 직접 사용할 수 없습니다. 구현하는 클래스에서 접근 제어자를 지정합니다.
Q9. 접근 제어자 없이 변수를 선언하면 기본값은 무엇인가요?
기본적으로 `public`이 적용되어 클래스 외부에서 자유롭게 접근 가능합니다.
Q10. 접근 제어자를 통해 생성자 매개변수를 간결하게 선언할 수 있나요?
네, 접근 제어자를 생성자 매개변수 앞에 붙이면 자동으로 클래스 멤버로 선언되고 초기화됩니다.
```typescript
class Car {
constructor(public brand: string, private year: number) {}
}
const car = new Car("Toyota", 2020);
console.log(car.brand); // 접근 가능 (public)
// console.log(car.year); // 접근 불가능 (private)
```
---
이처럼 타입스크립트의 접근 제어자는 클래스 멤버의 접근 권한을 설정해 코드 구조를 명확히 하고, 데이터 보호와 유지보수를 용이하게 만듭니다.
타입스크립트는 객체 지향 프로그래밍(OOP) 패러다임을 지원하며, 이 과정에서 클래스와 함께 접근 제어자(Access Modifiers)를 사용하여 클래스의 속성과 메서드에 대한 접근 권한을 제어할 수 있습니다.
접근 제어자는 클래스의 멤버(속성 및 메서드)에 대한 접근을 제한하거나 허용하는 역할을 합니다.
타입스크립트에서 제공하는 접근 제어자는 다음과 같습니다: 1. public : - `public` 접근 제어자는 기본 접근 제어자입니다.
클래스의 속성이나 메서드가 `public`으로 선언되면, 해당 멤버는 클래스의 인스턴스뿐만 아니라 외부에서도 접근할 수 있습니다.
즉, 클래스의 외부에서 자유롭게 사용할 수 있습니다.
- 예시: ```typescript class Person { public name: string; constructor(name: string) { this.name = name; } public greet() { console.log(`Hello, my name is ${this.name}`); } } const person = new Person("Alice"); console.log(person.name); // Alice person.greet(); // Hello, my name is Alice ```
2. private : - `private` 접근 제어자는 클래스 내부에서만 접근할 수 있는 멤버를 정의합니다.
즉, 해당 멤버는 클래스의 인스턴스나 외부에서 접근할 수 없습니다.
이는 클래스의 내부 구현을 숨기고, 외부에서의 잘못된 접근을 방지하는 데 유용합니다.
- 예시: ```typescript class BankAccount { private balance: number; constructor(initialBalance: number) { this.balance = initialBalance; } public deposit(amount: number) { this.balance += amount; } public getBalance(): number { return this.balance; } } const account = new BankAccount(100); account.deposit(50); console.log(account.getBalance()); // 150 // console.log(account.balance); // 오류: 'balance'는 private 멤버입니다.
```
3. protected : - `protected` 접근 제어자는 `private`와 유사하지만, 상속된 클래스에서도 접근할 수 있는 멤버를 정의합니다.
즉, `protected`로 선언된 멤버는 해당 클래스를 상속받은 자식 클래스에서 접근할 수 있으며, 외부에서는 접근할 수 없습니다.
- 예시: ```typescript class Animal { protected species: string; constructor(species: string) { this.species = species; } } class Dog extends Animal { public bark() { console.log(`Woof! I am a ${this.species}`); } } const dog = new Dog("Dog"); dog.bark(); // Woof! I am a Dog // console.log(dog.species); // 오류: 'species'는 protected 멤버입니다.
``` 접근 제어자의 중요성 접근 제어자는 객체 지향 프로그래밍에서 중요한 개념으로, 다음과 같은 이유로 중요합니다: - 캡슐화(Encapsulation) : 접근 제어자를 사용하여 클래스의 내부 구현을 숨기고, 외부에서의 직접적인 접근을 제한함으로써 데이터 보호 및 무결성을 유지할 수 있습니다.
- 유지보수성(Maintainability) : 클래스의 내부 구현을 변경하더라도 외부 코드에 미치는 영향을 최소화할 수 있습니다.
이는 코드의 유지보수를 용이하게 합니다.
- 재사용성(Reusability) : 상속을 통해 `protected` 멤버를 사용할 수 있으므로, 코드의 재사용성을 높일 수 있습니다.
결론 타입스크립트에서 접근 제어자는 클래스의 멤버에 대한 접근을 제어하여 코드의 안전성과 유지보수성을 높이는 데 중요한 역할을 합니다.
`public`, `private`, `protected`와 같은 접근 제어자를 적절히 사용함으로써, 개발자는 더 나은 구조의 코드를 작성하고, 객체 지향 프로그래밍의 원칙을 준수할 수 있습니다.
이러한 접근 제어자는 특히 대규모 애플리케이션에서 코드의 복잡성을 관리하는 데 필수적입니다.
작성자:
박다희 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:09
조회수: 139 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 139 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.