캡슐화의 정의
캡슐화(Encapsulation)라는 이름은 두 가지 특성을 묘사하고 있습니다.
그 두 가지는 곧, 데이터와 기능을 '감추는 특성'과 '모으는 특성'을 말합니다.
- 접근지정자를 통해 데이터를 감춥니다.
- 속성(Data fields)과 행위(Methods)를 클래스로 모읍니다.
우리는 어떠한 클래스를 사용할 때, 그 클래스의 모든 측면을 이해하고 사용할 필요가 없습니다. 만약 그래야만 한다면 수많은 프로그래머들이 한 프로그램을 작성하기란 불가능한 일이 됩니다. 우리는 클래스 내부가 어떻게 되어 있는지 몰라도 됩니다. 다르게 말하면, 언제나 "몰라도 되게 끔 프로그래밍"해야만 합니다.
당신은 남이 만든 코드를 사용할 때, 코드의 작성자가 '당신이 볼 수 있도록 외부로 드러낸 것', '사용을 허가해준 것'만 이해하면 됩니다. Print 계열, Convert 계열의 함수를 사용할 때 그 동작방식을 속속들이 이해하지 않아도 쓸 수 있으셨을 것입니다. 내부 동작이 어떻게 돌아가는지 모르더라도, 우리는 그 클래스를 사용할 수 있어야 합니다. 캡슐화는 그것이 수월하게 이루어질 수 있도록 돕습니다.
캡슐화의 두 가지 측면
은닉
클래스 내부의 데이터를 감추는 것을 정보 은닉(Information Hiding)이라고 하며, 보통 public, private, protected 같은 접근제한자를 사용하여 원하는 정보를 감추거나 노출시킬 수 있습니다. 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있습니다. 또한 객체 내의 정보 손상과 오용을 방지합니다. 결과적으로 데이터가 변경될지라도 타 객체에 영향이 줄어들어 독립성이 확보됩니다.
통합
필드와 메서드를 하나로 묶는 것입니다. 무작정 묶는 것이 아니라 객체가 맡은 '하나의 목적(SRP)'을 이루기 위한 기능, 그리고 데이터만을 한 데 묶습니다. 클래스와 인터페이스로 프로그래머의 의도를 통합할 수 있습니다. 클래스를 만들 때에는 객체가 특정한 목적을 잘 수행할 수 있도록 사용해야할 변수를 잘 파악해야 합니다. 그런 다음 그 변수를 가지고 해야 할 일, 즉 메서드를 설계해야 합니다.
'OOP' 카테고리의 다른 글
[OOP] Inheritance, 상속이란 무엇인가 (0) | 2022.08.26 |
---|---|
[OOP] Abstraction, 추상화란 무엇인가 (0) | 2022.08.26 |
[OOP] 디자인 패턴의 유형 (0) | 2022.08.20 |
[OOP] 인터페이스로 다형성을 이끌어내기 (0) | 2022.08.20 |
[OOP] Interface 인터페이스를 이용하는 이유와 장점 (0) | 2022.08.19 |
댓글