2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

타입스크립트에서 접근 제어자(Access Modifiers)는 무엇인가요?

_____
타입스크립트에서 접근 제어자(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)
```

---

이처럼 타입스크립트의 접근 제어자는 클래스 멤버의 접근 권한을 설정해 코드 구조를 명확히 하고, 데이터 보호와 유지보수를 용이하게 만듭니다.
타입스크립트(TypeScript)는 자바스크립트의 상위 집합으로, 정적 타입을 지원하는 프로그래밍 언어입니다.

타입스크립트는 객체 지향 프로그래밍(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
내용이 부정확하다면 싫어요를 클릭해주세요.