[Java] Chapter 09. 정보 은닉과 캡슐화
📌09-1. 정보 은닉
앞서 살펴본 것처럼, 클래스는 데이터와 그 데이터를 사용하는 메소드로 이루어져있다.
정보 은닉은 클래스 외부에서 클래스 내부의 데이터로의 직접 접근을 막는 것이다.
클래스의 메소드에서만 해당 클래스의 데이터에 접근할 수 있게 한다.
정보 은닉이 왜 필요할까?
정보 은닉을 통해서 코드의 안정성을 더해줄 수 있다.
만약 정보 은닉이 없다면, 클래스의 데이터에 직접 접근하여 논리적으로 올바르지 않은 값을 저장해도 이를 막을 수가 없다.
즉, 정보 은닉은 논리적 오류를 문법적 오류, 컴파일 에러로 이어지게끔 할 수 있다.
그렇다면 정보 은닉은 어떻게 할까?
class Circle {
private double rad = 0;
...
이처럼, 변수 선언시에 private 선언을 추가해주면 된다.
이제 외부에서 이 변수로의 접근은 불가해진다.
내부의 메소드에서만 접근이 가능해진다.
private 선언된 변수를 초기화하거나 가져올 수 있는 클래스의 메소드 "getter"와 "setter"를 만들어줄 수 있고, 이 메소드들은 내부와 외부의 통로 역할을 하게 된다.
📌09-2. 접근 수준 지시자
public > protected > default > private
-
public : 모든 접근을 허용, Getter, Setter
-
protected : default보다 한 군데 더 접근 허용
-
default : private보다 한 군데 더 접근 허용
"선언되어 있지 않다"는 뜻 -
private
-
클래스 정의 대상 : public, default
-
인스턴스 변수와 메소드 대상 : public, protected, default, private
✅클래스 정의 대상
-
public : 어디서든 인스턴스 생성이 가능하다.
-
default : 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성을 허용한다.
자바 파일 내에 public class가 있는 경우, 해당 파일 이름은 그 클래스 이름으로 만들어야 한다.
public class를 외부에 노출시키기 위함이다.
이러한 이유로 1개의 소스 파일에는 1개의 public class만 존재해야 한다.
✅인스턴스 멤버 대상
class AAA {
public int num1;
protected int num2;
private int num3;
int num4;
public void md1() {...}
protected void md2() {...}
private void md3() {...}
void md4() {...}
-
public : 어디서든 접근 가능
-
default : 동일 패키지로 묶인 클래스 내에서만 접근 가능
위의 내용이 private보다 허용된 점이다.
패키지 선언을 하지 않으면 디폴트 패키지로 선언이 되고, 모두 같은 패키지로 묶이게 된다.
- protected : 서로 다른 패키지에 존재하더라도 상속이 되어 있다면 접근 가능
📌09-3. 캡슐화
자바의 문법적인 부분이라기 보다는 소프트웨어 공학적인 측면에 해당된다.
캡슐화란 클래스에서 필요한 메소드와 클래스를 적절히 잘 담는 것을 말한다.
하나의 클래스에서 필요한 메소드를 다른 클래스에서 가지고 있거나 하면 코드의 복잡도는 매우 증가하게 되므로 하나의 클래스는 자신의 역할을 충분히 이행할 수 있도록 메소드 등을 가지고 있어야 한다.
클래스가 필요로 하는 정보들은 클래스들이 활용되는 환경 등에 따라 달라지기 때문에 캡슐화에는 정답이 존재하지 않다.
캡슐화를 통해 하나의 클래스 안에 필요한 모든 메소드들을 담는 것 보다는 여러 클래스를 만들고 하나의 클래스 안에서 그 클래스들을 가지는 관계가 더 일반적이다.
🔗강의 및 자료 출처
Author And Source
이 문제에 관하여([Java] Chapter 09. 정보 은닉과 캡슐화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@nandgate110/java-chapter-09
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여([Java] Chapter 09. 정보 은닉과 캡슐화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nandgate110/java-chapter-09저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)