캡슐화
Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 56개 중 17번째.
캡슐화(Encapsulation)는 데이터를 클래스 내부의 하나의 단위로 결합하는 과정입니다.
이는 클래스 데이터에 직접 접근하는 것을 제한하는 데 도움이 되며, 결과적으로 데이터의 예기치 않은 수정을 방지하는 데 도움이 됩니다.
간단한 예제를 통해 캡슐화가 실제로 어떻게 작동하는지 살펴보겠습니다. 공개 속성을 가진 기본적인 객체를 생성해 보겠습니다:
const user = {
name: "John",
email: "john@example.com"
};누구나 이러한 속성에 직접 접근하고 수정할 수 있습니다:
user.name = "Jane"; // 외부에서 수정하기 쉬움
console.log(user.email); // 외부에서 접근하기 쉬움더 캡슐화된 접근 방식은 클로저를 사용하여 데이터를 숨깁니다:
function createUser(name, email) {
// 이 변수들은 비공개(캡슐화)입니다
let userName = name;
let userEmail = email;
// 비공개 데이터와 상호작용하는 메서드를 포함한 객체를 반환합니다
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");이제 데이터와 상호작용해 보겠습니다:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// 데이터에 직접 접근할 수 없습니다
console.log(encapsulatedUser.userName); // undefined챌린지
사용자 데이터를 보호하기 위해 캡슐화를 사용하는 코드가 제공됩니다. 여러분의 작업은 나이에 접근할 수 있는 getAge() 메서드를 추가하는 것입니다.
테스트 확인 사항:
getAge()메서드가 존재함- 올바른 나이를 반환함
- 나이 정보가 비공개(private)로 유지됨
예상 출력:
john_doe
25
치트 시트
캡슐화(Encapsulation)는 데이터를 하나의 단위로 클래스 내부에 결합하고 해당 데이터에 대한 직접적인 접근을 제한하여, 의도치 않은 수정을 방지하는 프로세스입니다.
캡슐화가 없으면 객체의 속성에 공개적으로 접근할 수 있습니다:
const user = {
name: "John",
email: "john@example.com"
};
user.name = "Jane"; // 직접 수정 가능
console.log(user.email); // 직접 접근 가능클로저(closures)를 사용하여 데이터를 캡슐화하기:
function createUser(name, email) {
// 비공개 변수 (캡슐화됨)
let userName = name;
let userEmail = email;
// 비공개 데이터와 상호작용하는 공개 메서드
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (비공개 데이터에 접근 불가)직접 해보기
import { createUser } from './createUser.js';
// 테스트 코드 - 수정하지 마세요
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // "john_doe"가 출력되어야 합니다
console.log(user.getAge()); // 25가 출력되어야 합니다
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.