AccessModifier

1개의 게시글

TypeScript

[TypeScript] 클래스 접근 제어자

November 27, 2025

접근 제어자(Access Modifier) 는 클래스의 특정 필드나 메서드에 접근할 수 있는 범위를 설정하는 기능이다. 자바스크립트(ES6) 클래스에는 없는 타입스크립트만의 고유 기능으로, 객체 지향 프로그래밍의 특징인 은닉화(Encapsulation) 를 돕는다. 타입스크립트에는 다음 3가지의 접근 제어자가 존재한다. 1. public: 모든 범위에서 접근 가능 2. protected: 클래스 내부 + 파생(자식) 클래스 내부에서만 접근 가능 3. private: 오직 클래스 내부에서만 접근 가능 --- 1. public (공공의) public은 말 그대로 '공공의'라는 뜻으로, 어디서든 자유롭게 접근할 수 있다. 접근 제어자를 별도로 명시하지 않으면 기본적으로 public으로 설정된다. TypeScript class Employee { // 필드 (기본적으로 public) name: string; public age: number; // 명시적으로 작성해도 됨 public position: string; constructor(name: string, age: number, position: string) { this.name = name; this.age = age; this.position = position; } work() { console.log("일함"); } } const employee = new Employee("조태민", 25, "developer"); // ✅ 외부에서 자유롭게 접근 및 수정 가능 employee.name = "강두칠"; employee.age = 21; employee.position = "디자이너"; --- 2. private (사적인) private은 오직 해당 클래스 내부에서만 접근할 수 있다. 외부에서는 물론이고, 상속받은 자식 클래스에서도 접근할 수 없다. 가장 엄격한 제어자다. TypeScript class Employee { private name: string; // 🔒 private 설정 public age: number; public position: string; constructor(name: string, age: number, position: string) { this.name = name; this.age = age; this.position = position; } work() { // ✅ 클래스 내부에서는 접근 가능 console.log(${this.name}이 일함); } } const employee = new Employee("조태민", 25, "developer"); // ❌ 오류 발생: 외부에서 접근 불가 // employee.name = "강두칠"; --- 3. protected (보호된) protected는 public과 private의 중간 단계다. 외부에서는 접근할 수 없지만, 클래스 내부와 이를 상속받은 파생 클래스(자식) 에서는 접근할 수 있다. TypeScript class Employee { private name: string; // 나만 쓸 거야 protected age: number; // 자식한테는 물려줄 거야 public position: string; // 다 써도 돼 constructor(name: string, age: number, position: string) { this.name = name; this.age = age; this.position = position; } } // Employee를 상속받은 자식 클래스 class ExecutiveOfficer extends Employee { func() { // this.name; // ❌ 오류 (private은 자식도 접근 불가) this.age; // ✅ 가능 (protected는 자식 접근 허용) } } const employee = new Employee("조태민", 25, "developer"); // ❌ 오류: 외부에서는 protected도 접근 불가 // employee.age = 30; 🔍 접근 범위 한눈에 보기 | 제어자 | 클래스 내부 | 자식 클래스 | 클래스 외부 | | --- | --- | --- | --- | | public | ⭕️ | ⭕️ | ⭕️ | | protected | ⭕️ | ⭕️ | ❌ | | private | ⭕️ | ❌ | ❌ | --- 4. 꿀팁: 생성자 매개변수로 필드 생략하기 타입스크립트에서는 생성자(constructor)의 매개변수에 접근 제어자를 붙여주면, 필드 선언과 초기화 코드를 한 번에 생략할 수 있다. Before: 일반적인 작성법 필드 선언하고, 생성자에서 매개변수 받고, this로 할당하고... 코드가 길다. TypeScript class Employee { private name: string; protected age: number; public position: string; constructor(name: string, age: number, position: string) { this.name = name; this.age = age; this.position = position; } } After: 접근 제어자 활용 (추천 👍) 생성자 매개변수 앞에 public, private, protected 중 하나만 붙이면, 타입스크립트가 알아서 "아, 이거 필드로 만들고 값도 자동으로 넣으라는 거구나" 라고 이해한다. TypeScript class Employee { // 필드 선언 제거! // 초기화 코드(this.xxx = xxx) 제거! constructor( private name: string, protected age: number, public position: string ) {} // 생성자 본문이 비어있어도 됨 work() { console.log(${this.name} 일함); } } 코드가 훨씬 간결해지므로 실무에서 매우 자주 사용하는 패턴이다. --- 요약 1. public: 기본값. 어디서든 접근 가능. 2. private: 내 클래스 안에서만 접근 가능. (가장 엄격) 3. protected: 내 클래스 + 상속받은 자식 클래스에서 접근 가능. 4. 필드 생략: 생성자 매개변수에 접근 제어자를 붙이면 필드 선언과 초기화를 자동으로 처리해 준다.

TypeScriptStudyClassOOPAccessModifier