[TypeScript] Class - 접근 제어자 / 상속

dev.galim·2023년 9월 8일
0

TypeScript

목록 보기
4/10

접근 제어자

→ 속성 또는 메소드로의 접근을 제한하기 위해 사용.

  • 타입스크립트에는 3종류의 접근 제어자가 존재함.

    public > protected > private

  • Java와 다르게 package 개념이 없어 default 접근 제어자는 존재하지 않음.

public 접근 제어자

→ 프로그램 내에서 선언된 멤버들이 자유롭게 접근할 수 있음.

타입스크립트에서 멤버는 기본적으로 public으로 선언됨.

명시적으로 멤버를 public으로 표시할 수도 있음.

class Animal {
	public name: string
	constructor(theName: string) {
		this.name = theName;
	}
}
newAnimal("Cat").name;

private 접근 제어자

→ 멤버가 포함된 클래스 외부에서의 접근을 막음.

class Animal {
	private name: string
	constructor(theName: string) {
		this.name = theName;
	}
}
newAnimal("Cat").name; // Error, name 필드는 private로 선언되었기 때문에 에러가 발생함.

접근 제어자(protected)

→ 멤버가 포함된 클래스와 그 하위 클래스 외부에서의 접근을 막음.

class Animal {
	protected name: string
	constructor(theName: string) {
		this.name = name;
	}
}

class Employee extends Person {
	private department: string;

	constructor(name: string, department: string) {
		super(name);
		this.department = department;
	}

	public getElevatorPitch() {
		return 'Hello, my name is ${this.name} and I work in ${this.department}.';
	}
}

let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // Error, name 필드는 protected로 선언되었기 때문에 에러가 발생함.
  • Employee 클래스는 Person 부모 클래스를 상속받았고 Person 클래스의 name 필드엔 protected 접근 제어자가 선언되어 있음. 따라서 Employee 자식 클래스는 this.name 연산자를 통해 Person 클래스의 name 필드를 재사용 할 수 있음. 하지만 protected 접근 제어자가 선언되었기 때문에 외부에서 직접적으로 접근할 시 에러가 발생함.

상속

→ OOP는 상속을 이용하여 존재하는 클래스를 확장해 새로운 클래스를 생성할 수 있음.

  • 파생된 클래스는 하위클래스(subclass) 기초 클래스는 상위클래스(superclass)라고 부름.
class Animal {
	move(distanceInMeters: number) {
		console.log('Animal moved ${distanceInMeters}m.');
}

class Dog extends Animal {
	makeSound() {
		console.log("멍멍!");
	}
}

class Cat extends Animal {
	makeSound() {
		console.log("야옹!");
	}
}

const dog = new Dog();
dog.move(10);
dog.makeSound();

const dog = new Cat();
cat.move(5);
cat.makeSound();
  • extends 키워드Animal이라는 기초 클래스에서 Dog 클래스가 파생됨. Dog, Cat 클래스는 Animal 클래스를 상속받았기 때문에 Animal 클래스의 move 메소드를 확장하여 재사용 할 수 있음.
profile
열심히 해볼게요

0개의 댓글