Programing Language/Java

[Java] 클래스의 캡슐화(Encapsulation)

vinedpillar 2022. 6. 24. 02:25

캡슐화(encapsulation)

  • 캡슐화란 클래스의 구성 요소를 마치 캡슐처럼 하나의 단위로 포장하여 관리하는 것을 뜻합니다. 

  • 이를 통해 클래스 안에 관련된 속성과 기능을 외부로부터 보호할 수 있게 됩니다.

  • 외부에서 클래스의 내부 정보에 대해 직접 접근하거나, 직접 변경할 수 없도록 설계합니다.

  • 클래스가 제공하는 메소드를 통해서만 필드에 접근이 허용됩니다.

  • 클래스를 캡슐화 하는 이유는 아래와 같습니다.
    • 내부적으로만 사용되는 데이터의 불필요한 외부 노출을 방지
    • 데이터를 무작위한 변경으로부터 보호
    • 유지 보수나 확장 시 오류의 범위를 최소화

 

 

 

 

정보의 은닉(Data Hiding)

  • 캡슐화에서 가장 핵심적인 개념으로, 다른 클래스에게 자신의 정보를 숨기고 자신의 메서드를 통해서만 접근을 허용합니다.

  • 이를 통해 외부로부터 클래스의 속성과 기능이 쉽게 변경되지 못하도록 합니다.

  • 데이터가 변경되더라도 다른 인스턴스에 영향을 최소화하여 독립성을 유지할 수 있도록 합니다.

  • 정보를 은닉하는 방법
    • 자바에서는 접근 제어자(Access Modifier)를 활용해 정보를 은닉합니다.
      (public / protected / (default) / private)
    • 클래스, 필드, 메서드 앞에 접근 제어자를 붙여 단위별로 정보의 공개 범위를 제어할 수 있습니다.
정보의 은닉 사용 예시

package student;

//상위 클래스
public class Student {
    //접근제어자 활용
    public double name;
    protected int grade;
    int age;
    private int StudentID;
}

//하위 클래스
public class StudentGrade extends Student {
    //상속 관계 시 하위 클래스에서 protected 정보 활용 가능
    Student studentLee = new Student;
    studentLee.grade = elementary;
}

//무관한 클래스
public class Subject {
    //무관한 클래스일 경우 protected로 선언한 변수는 오류 발생
    Student studentKim = new Student;
    studentLee.studentID = 12312412;
}