6-6. 변수 캡슐화하기
적용 시점
전역 변수의 접근을 제한하는 경우
절차
변수로의 접근과 갱신을 전담하는 캡슐화 함수들을 만든다.
정적 검사를 수행한다.
변수를 직접 참조하던 부분을 모두 적절한 캡슐화 함수 호출로 바꾼다. 하나씩 바꿀 때마다 테스트한다.
변수의 접근 범위를 제한한다.
테스트한다.
변수 값이 레코드라면 레코드 캡슐화하기를 고려한다.
예시
❌ Before
// constant.ts
const GRADES = ["A", "B", "C", "D", "E"]; // 변경 가능함, 하지만 삭제는 하면 안 됨
const DEPARTMENTS = ["컴퓨터공학과", "영어영문학과", "수학과"]; // 변경 불가함
// main.ts
GRADES.pop() // 삭제가 가능해져버림, 추후 문제 생길 여지 있음
DEPARTMENTS.push('화학공학과') // 변경이 가능해져 버림, 추후 문제 생길 여지 있음
⭕ After
// constant.ts
class CONSTANTS {
private grades = ["A", "B", "C", "D", "E"]; // 변경 가능함, 하지만 삭제는 하면 안 됨
private readonly departments = [
"컴퓨터공학과",
"영어영문학과",
"수학과",
] as const; // 변경 불가함
getGrades() {
return this.grades;
}
updateGrades(grade) {
this.grades = [...this.grades, grade]
}
getDepartments() {
return this.departments;
}
}
// main.ts
const temp = new CONSTANTS();
// temp.grades.pop()으로 삭제 불가. grades에는 어떤 짓을 해도 접근이 불가능
// temp.grades.push('화학공학과')로 원소 삽입 불가, readonly이면서 private한 속성임
temp.updateGrades('Z'); // 오직 이 함수로만 데이터 업데이트 가능
Last updated