JAVA/포스팅

자바 캡슐화 (Encapsulation)

짜집퍼박사(짜박) 2023. 11. 5. 11:01

자바에서 캡슐화(Encapsulation)는 객체 지향 프로그래밍(OOP)의 기본 원리 중 하나로, 클래스의 상태(속성)를 보호하고 외부에서 직접 접근하지 못하도록 하는 메커니즘입니다. 캡슐화는 데이터 은닉(Data Hiding)이라고도 불립니다.

 

캡슐화의 주요 개념 및 원리

 

1. 접근 제어 지시자 (Access Modifiers)

자바에서는 다음과 같은 네 가지 주요 접근 제어 지시자를 사용하여 클래스의 멤버(필드 및 메서드)에 대한 접근 권한을 제어합니다.

- public : 어떤 클래스에서든 접근 가능
- protected : 같은 패키지 내의 클래스 및 하위 클래스에서만 접근 가능
- default (package-private) : 같은 패키지 내에서만 접근 가능 (접근 제어 지시자를 명시하지 않은 경우 기본값)
- private : 해당 클래스 내에서만 접근 가능

 

2. getter 및 setter 메서드 

캡슐화를 통해 클래스의 속성에 접근하려면 getter(읽기) 및 setter(쓰기) 메서드를 사용해야 합니다. 이러한 메서드는 속성 값을 가져오거나 설정할 때 중요한 역할을 합니다.

 

3. 데이터 은닉

클래스 내의 속성은 일반적으로 private로 선언되어 외부에서 직접 접근할 수 없습니다. 이렇게 함으로써 데이터의 무결성을 보장하고 잘못된 수정을 방지할 수 있습니다.

 

4. 접근자 (Accessor) 메서드

getter 메서드는 속성 값을 반환하는 메서드입니다. 이 메서드를 사용하여 속성 값을 읽을 수 있습니다.

 

5. 수정자 (Mutator) 메서드

setter 메서드는 속성 값을 설정하는 메서드입니다. 이 메서드를 사용하여 속성 값을 변경할 수 있습니다.

 

예시

public class Student {
    private String name;
    private int age;

    // getter 메서드 (읽기)
    public String getName() {
        return name;
    }

    // setter 메서드 (쓰기)
    public void setName(String name) {
        this.name = name;
    }

    // getter 메서드 (읽기)
    public int getAge() {
        return age;
    }

    // setter 메서드 (쓰기)
    public void setAge(int age) {
        if (age >= 0) {
            this.age = age;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("Alice");
        student.setAge(25);

        System.out.println("Name: " + student.getName());
        System.out.println("Age: " + student.getAge());
    }
}

이 예시에서 Student 클래스의 name 및 age 속성은 private로 선언되어 직접 접근할 수 없습니다. 대신, getName 및 setName, 그리고 getAge 및 setAge 메서드를 사용하여 속성 값을 읽고 쓸 수 있습니다. 이렇게 하면 데이터의 일관성과 보안이 유지되며, 코드의 유지 보수 및 디버깅이 용이해집니다.

캡슐화는 객체 지향 프로그래밍에서 중요한 원리 중 하나이며, 클래스 및 객체의 내부 상태를 효과적으로 관리하고 제어할 수 있도록 도와줍니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 다형성 (Polymorphism)  (0) 2023.11.05
자바 상속 (Inheritance)  (0) 2023.11.05
자바 클래스와 객체  (0) 2023.11.05
자바 객체지향언어  (0) 2023.11.05
자바 객체지향언어의 역사  (0) 2023.11.05