본문 바로가기
쿤즈 Dev/Java

[Java] 캡슐화 (Encapsulation)란 무엇일까

by Koonz:) 2023. 9. 7.
728x90

객체지향 언어에서는 캡슐화라는 말을 사용한다. 캡슐화란 무었일까.

이번 포스티에서는 자바에서 사용하는 캡슐화를 알아보자.


자바의 캡슐화 Encapsulation

객체지향 프로그래밍(OOP)의 개념 중 하나로, 데이터와 해당 데이터를 다루는 메서드들을 하나의 단위로 묶어 정보 은닉과 보안을 강화하는 개념을 자바의 캡슐화라고 한다. 캡슐화는 객체의 내부 상태를 외부로부터 감추고, 외부에서는 오직 공개된 메서드를 통해서만 내부 상태에 접근할 수 있도록 하는 것을 의미한다.

 

자바에서 캡슐화를 구현하는 방법은 주로 두 가지 요소를 활용하여 이루어진다.


private 접근 제한자

멤버 변수를 'private'으로 선언하여 클래스 외부에서 직접 접근할 수 없게 한다. 이로써 내부 데이터에 직접 접근하는 것을 막고, 데이터의 무결성과 보안을 보장할 수 있다.

 

public 메서드

'public' 접근 제한자로 선언된 메서드를 통해서만 멤버 변수에 접근하고 조작할 수 있도록 한다. 이 메서드들은 내부 데이터를 다루는 로직을 포함하여, 외부 사용자들은 이 메서드들을 통해 데이터에 간접적으로 접근할 수 있다.


다음은 캡슐화의 개념을 보다 구체적으로 보여주는 간단한 예시이다.

// 학생 클래스
public class Student {
    private Integer id; // 식별자
    private String name; // 이름
    private Integer age; // 나이

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

    /* getter */
    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    /* setter */
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    // 출력 메서드
    public String toString() {
        return "id: " + this.id + ", name: " + this.name + ", age: " + this.age;
    }
}

위의 예시에서 'Student' 클래스는 'id', 'name', 'age'라는 멤버변수를 가지고 있다. 이 멤버변수는 모두 'private'으로 선언되었다. 따라서 외부에서 조작이 불가능하다.

 

이 값들을 초기화하기 위한 생성자(Constructor)는 'public'으로 선언되었으며 각 변수를 조회할 수 있도록 getter 메서드들이 정의되어 있다. 또한 이름과 나이는 수정이 가능하도록 setter 메서드가 정의되어 있다.

 

이로써 변수에는 직접 접근이 불가능하지만 'public' 메서드를 만들어서 변수를 변경할 수 있도록 기능 제한을 둔 것이다.


이번 포스팅에서는 자바에서 사용하는 캡슐화에 대해서 알아보았다. 캡슐화는 코드의 모듈화와 재사용성을 증가시키며, 데이터의 일관성을 보장하고 보안을 유지하는 데 도움을 준다.

 

댓글