개발

[Java] 캡슐화(Encapsulation)

GoblinMode 2024. 3. 25. 20:01
728x90
반응형

자바에서 캡슐화는 코드와 데이터를 하나의 단위로 묶는 과정을 의미합니다. 
마치 여러 약을 하나의 캡슐에 담는 것처럼, 변수와 메소드를 클래스 내에 묶어서 관리합니다. 
이를 통해 데이터 보호 및 코드의 유지보수성을 향상시킬 수 있습니다.

캡슐화의 기본 개념
정의: 코드와 데이터를 하나의 단위, 즉 클래스로 묶는 것입니다.
목적: 데이터 보호와 구현의 세부 사항을 숨기는 것입니다. 
이를 통해 객체의 내부 상태를 외부의 변경으로부터 보호하고, 객체의 사용 방법만을 노출시킵니다.

캡슐화의 장점
정보 은닉 : 외부에서 객체의 내부 정보에 직접 접근하는 것을 막아 정보를 보호합니다.
유지보수 용이 : 객체의 내부 구현이 변경되어도, 인터페이스가 동일하면 사용하는 코드를 변경할 필요가 없습니다.
모듈화 : 객체를 독립적인 모듈로 관리할 수 있어, 시스템의 다른 부분에 영향을 주지 않고 변경하거나 확장할 수 있습니다.


캡슐화 구현 방법
접근 제어자: public, private, protected 등의 접근 제어자를 사용하여 클래스 멤버의 접근 수준을 제어합니다. 
이를 통해 클래스 외부에서의 접근을 제한하고, 객체의 데이터를 보호합니다.

캡슐화는 객체 지향 프로그래밍의 핵심 원칙 중 하나로, 코드의 안정성과 유지보수성을 높이는 데 큰 역할을 합니다. 
자바에서 캡슐화를 적절히 활용하면, 보다 견고하고 안전한 프로그램을 개발할 수 있어요! 


자바에서 캡슐화를 구현하는 방법을 알아보기 위해 간단한 예제를 살펴보겠습니다. 
캡슐화는 클래스의 필드(변수)를 private으로 선언하여 외부에서 직접 접근할 수 없도록 하고, 
public 메소드(getter와 setter)를 통해 이 필드들에 접근할 수 있도록 하는 방식으로 이루어집니다.

 

public class Student {
    // private 필드 선언
    private String name;
    private int age;

    // name 필드에 대한 getter 메소드
    public String getName() {
        return name;
    }

    // name 필드에 대한 setter 메소드
    public void setName(String name) {
        this.name = name;
    }

    // age 필드에 대한 getter 메소드
    public int getAge() {
        return age;
    }

    // age 필드에 대한 setter 메소드
    public void setAge(int age) {
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        // Student 객체 생성
        Student student = new Student();

        // setter 메소드를 통해 필드 값 설정
        student.setName("홍길동");
        student.setAge(20);

        // getter 메소드를 통해 필드 값 읽기
        System.out.println("이름: " + student.getName());
        System.out.println("나이: " + student.getAge());
    }
}

 

이 예제에서는 Student 클래스를 정의하고, name과 age라는 두 개의 private 필드를 가지고 있습니다. 
이 필드들에 대한 접근은 각각의 getter와 setter 메소드를 통해서만 가능합니다. 
이렇게 함으로써, Student 클래스의 내부 구현을 숨기고, 필드에 대한 접근을 제어할 수 있습니다.

캡슐화를 통해 클래스의 데이터를 보호하고, 클래스의 사용 방법을 명확하게 정의할 수 있습니다. 
이는 객체 지향 프로그래밍에서 매우 중요한 개념이며, 코드의 유지보수성과 확장성을 높이는 데 기여합니다.

 

728x90
반응형