상세 컨텐츠

본문 제목

[자바 CS지식] 캡슐화와 정보 은닉의 차이점

JAVA

by 소란한소란 2024. 2. 11. 21:54

본문

728x90

제목: 캡슐화와 정보 은닉: 객체 지향 프로그래밍의 핵심 원리


소개: 객체 지향 프로그래밍(OOP)에서 캡슐화와 정보 은닉은 코드의 안전성과 모듈화를 강화하는 데 중요한 역할을 합니다. 이 게시글에서는 캡슐화와 정보 은닉의 차이와 중요성에 대해 살펴보겠습니다.


 

1. 캡슐화(Encapsulation): 캡슐화는 OOP의 핵심 개념 중 하나로, 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어 객체를 형성하는 과정을 의미합니다. 캡슐화를 통해 코드는 모듈화되며, 객체는 자체적으로 데이터를 관리하고 외부에는 인터페이스를 통해서만 데이터에 접근할 수 있습니다.

  • 목적: 객체 내부의 상태를 보호하고, 객체 간의 상호 작용을 관리하여 코드의 안전성을 향상시킵니다.
  • 구현: 클래스를 사용하여 데이터 멤버와 메서드를 묶어 객체를 형성하고, 객체의 인터페이스를 통해 외부와 상호 작용합니다.

 

2. 정보 은닉(Hiding): 정보 은닉은 캡슐화의 일부로, 객체의 내부 구현을 외부로부터 감추는 개념입니다. 이를 통해 외부에서 객체의 세부 구현에 직접 접근하는 것을 방지하고, 제한된 방법으로만 객체에 접근할 수 있도록 합니다.

  • 목적: 객체의 내부 구현을 감춤으로써 외부로부터 객체를 보호하고, 코드의 안전성을 높입니다.
  • 구현: 접근 제어 한정자를 사용하여 클래스의 멤버에 대한 접근을 제한하고, getter와 setter 메서드를 통해 외부에서 제한된 방법으로만 데이터에 접근을 허용합니다.

예제코드를 보면 둘의 차이를 알 수 있습니다.

 

// 간단한 학생 클래스 예제
public class Student {
    // 캡슐화를 통한 멤버 변수 은닉
    private String name;
    private int age;

    // 생성자
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 정보 은닉을 위한 getter와 setter 메서드
    public String getName() {
        return name;
    }

    public void setName(String name) {
        // 여기서 유효성 검사 등을 추가할 수 있습니다.
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        // 나이에 대한 유효성 검사 등을 추가할 수 있습니다.
        this.age = age;
    }

    // 학생 정보 출력 메서드
    public void displayStudentInfo() {
        System.out.println("학생 이름: " + name);
        System.out.println("나이: " + age);
    }
}

// 메인 클래스
public class Main {
    public static void main(String[] args) {
        // 학생 객체 생성
        Student student1 = new Student("홍길동", 20);

        // 캡슐화를 통한 정보 은닉 확인
        // 외부에서 직접 접근 불가
        // student1.name = "김철수";  // 에러 발생

        // setter를 통한 정보 수정
        student1.setName("김철수");
        student1.setAge(22);

        // getter를 통한 정보 읽기
        System.out.println("학생 이름: " + student1.getName());
        System.out.println("나이: " + student1.getAge());

        // 정보 은닉을 유지하면서 학생 정보 출력
        student1.displayStudentInfo();
    }
}

 


 

결론: 캡슐화와 정보 은닉은 객체 지향 프로그래밍에서 중요한 원리로, 코드의 안전성과 모듈화를 향상시키는 데 결정적인 역할을 합니다. 이러한 원리를 적절히 활용함으로써 유지보수성이 높은 안정적인 코드를 작성할 수 있습니다. 객체 지향 프로그래밍에서는 이러한 원리를 적극적으로 활용하여 코드의 품질을 향상시키는 것이 중요합니다.

 

728x90

관련글 더보기