Menu
Coddy logo textTech

캡슐화

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

챌린지

사용자 데이터를 보호하기 위해 캡슐화를 사용하는 코드가 제공됩니다. 여러분의 작업은 나이에 접근할 수 있는 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가 출력되어야 합니다

quiz icon실력 점검

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

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