객체지향 프로그래밍에서 클래스를 정의하는 중요하게 적용되는 특징 4가지가 있다. 캡슐화(Encapsulation), 정보은닉(Information Hiding), 상속(Inheritance), 그리고 다형성(Polymorphism) 이다.
이번 장에서는 첫번째 특징인 캡슐화(Encapsulation) 개념을 이해한다. 또한, 실세계에서 또는 개발 과제의 도메인에서 1) 캡슐화를 통해 클래스를 도출해 나가는 과정을 이해하고 2) 파이썬으로 클래스를 정의하고 인스턴스를 생성하는 과정을 실습한다.
캡슐화(Encapsulation) 개념
캡슐화(Encapsulation)는 "~안에"라는 의미를 부여하는 접두사 'en'과 라틴어로 "작은 상자" 또는 "캡슐"을 의미하는 'Capsula'가 합쳐진 단어로 무언가를 포장하거나 보호하기 위해 감싸는 것을 의미합니다. 이러한 의미의 캡슐화를 객체지향에서는 다음과 정의합니다.
- Encapsulation is the process of bundling the data and the methods that operate on that data into a single unit or class.[1]
- 캡슐화는 데이터를 처리하는 메서드와 데이터를 하나의 단위(클래스)로 묶는 과정이다."
즉, 데이터와 메서드들을 클래스라는 단위로 묶는 과정인데, 이 묶는 과정에서 해당 클래스의 역할과 의미에 맞는 데이터와 메서드들을 묶는것이 중요합니다.
| [참고] 용어 정리 - 클래스에서 데이타와 메서드 1. 데이터
- 객체가 가지고 있는 정보로 클래스의 멤버변수로 정의한다. - 속성(Attribute)라고도 한다. - 예를 들어 고양이 클래스의 색깔, 크기, 품종 등
2. 메서드 (Methods)
- 객체가 수행하는 동작을 정의한 함수
- 오퍼레이션(operation) 이라고도 한다. - 예를 들어 고양이 클래스에서는 meow( ), jump( ), look( ), sleep( ) 등
|
캡슐화(Encapsulation) 과정
예제 1. 실세계에서의 고양이 클래스 캡슐화
아래의 그림의 왼쪽은 강아지와 고양이의 데이타(타원)와 메소드(둥근사각형)들이 흩어져 있는데 이를 '고양이'라는 개념의 클래스와 연관된 데이타와 메소드를 캡슐화 한 결과가 오른쪽 초록색 사각형 입니다.

예제 2. 도서관 시스템에서의 클래스 캡슐화
그렇다면 도서관 시스템에서 캡슐화를 할 수 있는 정보를 찾아보겠습니다.
| 도서관 시스템 요구사항 OO 대학교 도서관 시스템은 학생들이 도서관 자원을 효과적으로 이용하기 위해 시스템을 이용하는 사용자 정보와 도서관에서 소장하는 도서정보를 기본정보로 관리하고, 이를 기반으로 도서 검색, 대출, 반납, 연체 관리 기능을 제공한다. 각 기능의 상세 설명은 아래와 같다. 도서관에서 소장하는 도서 정보는 시스템에서 사용하는 도서의 고유 식별자를 포함하여 제목, 저자, ISBN, 출판사, 출판연도, 장르, 대출 가능 여부 등의 정보를 관리해야 한다. 새로운 도서는 시스템에 등록하고, 등록된 도서는 수정, 삭제와 같은 기능을 지원한다. 또한 등록된 도서는 검색 가능해야 하는데 키워드, 제목, 저자, 장르를 조건으로 검색할 수 있으며, 검색된 도서는 제목, 저자, 출판사, 출판연도, 장르 정보를 보여준다. 도서관 시스템을 사용하는 학생은 학생 기본정보를 시스템에서 관리하는데, 학번, 이름, 이메일, 연락처, 비밀번호, 전공, 선호장르를 저장한다. 학생 정보는 신규입력, 수정, 삭제(탈퇴)가 가능하며 비밀번호 재설정은 현재 비밀번호를 확인후 수정이 가능하다. 도서를 대출하기 위해, 사서는 사용자로부터 사용자 ID와 대출하려는 도서 정보를 전달받아 시스템에 사용자 ID와 도서 ID를 입력하면, 시스템은 누가(사용자ID), 어떤 도서를(도서ID), 언제 대출했는지를 저장한다. 대출 기한은 기본 2주(14일) 이며, 최대 5권 대출이 가능하다. 연체중인 사용자는 대출을 할 수 없으며, 연체중인 도서 반납한 후 대출이 가능하다. 도서관 시스템은 매일 아침 연체중인 사용자에게 연체상태 메일을 보낸다. 사용자가 대출한 도서를 사서에게 반납하면, 사서는 도서 바코드를 찍어 해당 사용자의 대출 상태를 반납완료 상태로 변경한다. |
위 요구사항은 크게 세단락으로 작성되어 있습니다. 처음 단락은 도서관 시스템의 전반적인 요구사항을 개략적으로 정리한 것이고 두번째, 세번째 단락은 도서정보와 사용자정보에 대한 요구사한을 기술한 것입니다. 다음은 요구사항을 기능별로 크게 구분하여 관련된 데이타와 기능을 캡슐화 하는 과정입니다.
| 요구사항 | 추출된 데이타와 기능들 | 캡슐화 |
| OO 대학교 도서관 시스템은 학생들이 도서관 자원을 효과적으로 이용하기 위해 시스템을 이용하는 사용자 정보와 도서관에서 소장하는 도서정보를 기본정보로 관리하고, 이를 기반으로 도서 검색, 대출, 반납, 연체 관리 기능을 제공한다. 각 기능의 상세 설명은 아래와 같다. | ![]() |
시스템 전체 개념으로 객체화 하기는 개념의 크기가 크다 |
도서관에서 소장하는 도서 정보는 시스템에서 사용하는 도서의 고유 식별자를 포함하여 제목, 저자, ISBN, 출판사, 출판연도, 장르, 대출 가능 여부 등의 정보를 관리해야 한다. 새로운 도서는 시스템에 등록하고, 등록된 도서는 수정, 삭제와 같은 기능을 지원한다. 또한 등록된 도서는 검색 가능해야 하는데 키워드, 제목, 저자, 장르를 조건으로 검색할 수 있으며, 검색된 도서는 제목, 저자, 출판사, 출판연도, 장르 정보를 보여준다. |
![]() |
![]() |
| 도서관 시스템을 사용하는 학생은 학생 기본정보를 시스템에서 관리하는데, 학번, 이름, 이메일, 연락처, 비밀번호, 전공, 선호장르를 저장한다. 학생 정보는 신규입력, 수정, 삭제(탈퇴)가 가능하며 비밀번호 재설정은 현재 비밀번호를 확인후 수정이 가능하다. |
![]() |
![]() |
| 도서를 대출하기 위해, 사서는 사용자로부터 사용자 ID와 대출하려는 도서 정보를 전달받아 시스템에 사용자 ID와 도서 ID를 입력하면 , 시스템은 누가(사용자ID), 어떤 도서를(도서ID), 언제 대출했는지를 저장한다. 대출 기한은 기본 2주(14일) 이며, 최대 5권 대출이 가능하다. 연체중인 사용자는 대출을 할 수 없으며, 연체중인 도서 반납한 후 대출이 가능하다. 도서관 시스템은 매일 아침 연체중인 사용자에게 연체상태 메일을 보낸다. 사용자가 대출한 도서를 사서에게 반납하면, 사서는 도서 바코드를 찍어 해당 사용자의 대출 상태를 반납완료 상태로 변경한다. |
![]() |
![]() |
[참고] 인식의 확장 - 클래스의 종류
클래스를 캡슐화 하는 과정은 개발하고자 하는 시스템의 요구사항에서 시스템의 (데이타를 갖는) 기능 단위를 도출하는 과정이다. 이렇게 도출된 클래스들은 위 과정에서 도출된 Book, BookLoan, Student와 같은 일명 엔티티 클래스들과 함께 다음과 같이 구분될 수 있다.
- 1. Entity (도메인 객체)
목표 도메인에서 시스템의 핵심 개념 표현하며 주로 저장될 데이터들이다. 따라서 이 객체들은 데이터의 상태를 CRUD(Create, Retrieve, Update, Delete)의 기능 또는 (도메인에 따라 요구되는) 해당 객체의 고유 기능 가진다. 이 객체는 주로 DB에 저장되어 오래 유지되는 종류의 객체들이다.- 예: 도서관 시스템에서 Book, User, BookLoan
- 현실 세계 개념을 모델링
-
2.Boundary (UI / Interface)
목표 시스템에서 사용자와 시스템의 접점으로 입력/출력 처리를 담당하는 사용자 인터페이스(User Interface) 클래스들이다. 화면과 메뉴로 나타난다.-
예: MenuUI, ConsoleUI
-
- 3. Control (Controller)
Entity 객체를 사용하여 Boundary 객체에 필요한 데이타를 넘겨주고 받아와서 요구사항에 맞게 기능을 수행하는 클래스이다. 주로 여러 클래스의 기능을 호출하여 실행한다.- 예: UserController - UI 클래스로부터 사용자의 정보를 받아 사용자 Entity 클래스 인스턴스를 생성하여 CRUD한다.
- 예: LoanController - UI클래스로부터 도서정보와 사용자 정보를 받아 대출 Entity 클래스 인스턴스를 생성하여 저장하거나 조회한다.
- 4. Repository (Data Access)
Entity 클래스를 데이타베이스에 저장하고 읽어오는 역할을 한다. Entity 클래스의 정보에 대한 관리가 역할이 클래스들이다. 학부에서 구현하는 간단한 콘솔베이스 프로그램의 경우 메모리에 리스트로 관리하기도 하고, MySQL과 같은 DBMS에 저장/검색하는 역할로 구현 하기도 한다.- 예: BookRepository, UserRepository
'[2] 객체지향 프로그래밍 설계(파이썬) > 3주차. 캡슐화' 카테고리의 다른 글
| [3주차] 3.2 [실습] 클래스 찾기 (0) | 2026.01.26 |
|---|






