Menu
Coddy logo textTech

캡슐화

Coddy JavaScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 56개 중 17번째.

캡슐화는 클래스 내부의 데이터를 하나의 단위로 결합하는 과정입니다.

이를 통해 클래스 데이터에 직접 액세스하는 것을 제한할 수 있으며, 궁극적으로 데이터가 실수로 수정되는 것을 방지할 수 있습니다. 

간단한 예제로 캡슐화가 실제로 어떻게 작동하는지 살펴봅시다. 공개 속성을 가진 기본 객체를 만들어 보세요:

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
challenge icon

챌린지

user data를 보호하기 위해 캡슐화를 사용하는 코드가 주어졌습니다. age에 access할 수 있도록 getAge() method를 추가하는 것이 과제입니다.

Tests will check:

  • getAge() method가 존재하는지 확인합니다
  • correct age를 반환하는지 확인합니다
  • age info가 private으로 유지되는지 확인합니다

Expected Output:

john_doe

25

직접 해보기

import { createUser } from './createUser.js';

// 테스트 코드 - 수정하지 마세요
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // "john_doe"를 출력해야 합니다
console.log(user.getAge());      // 25를 출력해야 합니다

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 JavaScript 컴파일러