728x90
캡슐화의 개념
- 캡슐화는 데이터(필드)와 데이터를 조작하는 메서드(동작)를 하나의 단위로 묶는 것을 의미한다.
-> 즉, 객체의 내부 데이터를 보호하고, 데이터에 접근할 수 있는 인터페이스(메서드)를 제공한다.
- 실제로 구현되는 부분을 외부에 드러나지 않도록 캡슐로 감싸 이용 방법만을 알려주는 것을 말한다.
- 데이터를 절대로 외부에서 직접 접근을 하면 안되고 오로지 함수를 통해서만 접근해야하는데 이를 가능하게 해주는 것이 바로 캡슐화이다.
정보 은닉Information Hiding) : 내부의 데이터나 함수를 외부에서 참조하지 못하도록 차단하는 개념
캡슐화가 객체지향 프로그래밍에서 중요한 이유
- 데이터 보호: 외부 코드가 객체의 내부 데이터에 직접 접근하지 못하게 하여, 데이터의 무결성을 유지한다.
- 인터페이스 제공: 데이터를 조작하는 메서드를 통해 제한적이고 안전한 접근을 허용한다.
- 유지보수성 향상: 내부 구현을 변경하더라도 외부 코드에 영향을 최소화할 수 있다.
왜 캡슐화를 할까?
- C언어는 프로그램을 함수 단위로 구조화할 수 있으나, 프로그램이 커지면 이해하고 수정하기가 어렵다. 그에 반해 객체지향 프로그램에서는 클래스 단위로 구분할 수 있어 프로그램 관리가 편해졌다.
- 자바에서는 캡슐화로 내부를 숨길 수 있기 때문에 구현한 부분을 자유롭게 변경할 수 있다. 이전의 함수 중심적인 구조적 프로그래밍 언어에서는 프로그램 내부에서 데이터가 어디서 어떻게 변경되는지 파악하기 어려웠고, 그로 인해 유지 보수가 힘들었기 때문에 자료를 중심으로 함수가 종속되는 구조가 되기도 하였다. 객체 지향에서는 클래스 내부의 데이터를 외부에서 참조하지 못하도록 차단하여 이러한 폐단을 없앨 수 있다.
은닉화의 개념
은닉화(Information Hiding)란 무엇인가?
- 은닉이란 내부 데이터, 내부 연산을 외부에서 접근하지 못하도록 은닉(hiding) 혹은 격리(isolation)시키는 것
- 변수에 접근지정자를 private 로 지정한다
- setter , getter 를 사용해 변수의 접근, 제어한다.
은닉화는 캡슐화에 비해 비교적 구체적인 개념이다. 은닉화는 캡슐화의 한 개념으로 객체 외부에서 객체내의 자료로의 접근을 제한하고 데이터를 수정,조작하는 동작은 내부에 두고 접근(getter),설정(setter)하는 메소드로 결과만 받는것이다.
이렇게 되면 외부에서는 내부적인 움직임을 알수가 없으며 데이터에 어떤값이 있는지 또는 어떤 변화가 일어나는지 알 수 없다. 단지 데이터의 접근을 메서드(setter , getter)를 통해 결과만 받을뿐이다.
예를 들어, 사람(Person) 객체에서 이름과 나이를 필드로 가지면서, 이를 변경하거나 읽을 수 있는 메서드를 제공하는 것이 은닉화이다.
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
}
은닉화와 캡슐화의 관계
- 캡슐화는 데이터를 묶고, 은닉화는 그 데이터를 숨긴다.
- 은닉화는 캡슐화를 구현하는 방법 중 하나이며, 접근 제어자를 활용하여 내부 데이터와 동작을 보호한다.
- 은닉화는 중요사항이(변수든 메소드든 간에) 밖으로 드러나지 않도록 숨기는 것이다.
- 캡슐화는 중요사항을 감춘 상태에서 외부에 그것을 사용할 수 있는 방법을 설정하고 외부와 직접적으로 의사소통을 의미한다.
캡슐화(Encapsulation)은닉화(Information Hiding)
캡슐화 | 은닉화 | |
개념 | 데이터(필드)와 메서드(행동)를 하나의 단위로 묶는 구조적 개념 | 객체의 내부 구현 세부사항을 숨기고 필요한 부분만 공개하는 보안적 개념 |
목적 | 데이터와 동작을 결합하여 객체를 정의하고, 객체 간 상호작용을 단순화 | 외부로부터 데이터와 구현을 보호하여 무결성과 안정성 유지 |
구현 방법 | 클래스와 메서드를 통해 데이터와 동작을 묶음 | 접근 제어자(private, protected)로 데이터와 구현 세부사항을 숨김 |
사용 사례 | 데이터와 행동을 함께 묶어 사용하고 인터페이스를 통해 외부와 상호작용 | 민감한 정보를 숨기고 안전한 접근 경로 제공 (getter, setter) |
참고 : 접근 제어자.
private: 클래스 내부에서만 접근 가능.
protected: 동일 패키지와 하위 클래스에서 접근 가능.
public: 어디서든 접근 가능.
default: 동일 패키지 내에서만 접근 가능.
728x90
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
String, StringBuffer, StringBuilder? – 문자열 처리의 모든 것 (0) | 2024.11.19 |
---|---|
자바의 장단점을 알아보자. (0) | 2024.11.19 |
예외 처리 (Exception Handling) – 안정적인 코드를 작성하는 법 (3) | 2024.11.18 |
자바 람다와 스트림 – 효율적인 코드 작성 (2) | 2024.11.09 |
자바 컬렉션 프레임워크 – 자바에서 데이터를 다루는 방법 (0) | 2024.11.09 |