언어(Language)/Java

[Java] 자바 캡슐화(Encapsulation) 개념 정리

잇트루 2022. 9. 17. 00:00
반응형

캡슐화 (Encapsulation)

캡슐화란 특정 객체 안에서 관련된 속성과 행위(필드와 메서드)를 하나의 캡슐 형태로 묶어 데이터를 외부로부터 보호하기 위해 정보 은닉(Data Hiding)을 하는 것이다.

즉, 외부에서 내부로 직접적인 접근을 막고, 객체가 제공하는 필드와 메서드를 통해서만 접근이 가능하도록 한다.

 

캡슐화를 하면 데이터 보호와 함께 내부적으로만 사용되는 데이터를 외부로 노출하는 것을 방지할 수 있으며, 데이터가 변경되더라도 다른 객체에 영향을 주지 않아 독립성을 확보할 수 있다.

또한, 유지보수와 코드 확장 시 오류의 범위도 최소화할 수 있는 장점이 있다.

 

캡슐화를 수행하기 위해 접근제어자와 getter(), Setter() 메서드에 대해 학습할 필요가 있다.

 

접근 제어자(Access Modifier)

접근 제어자는 클래스 외부로의 불필요한 데이터 노출을 방지하고, 외부로부터 데이터가 임의로 변경되지 않도록 막을 수 있다. 즉, 정보 은닉(data hiding)과 연관이 깊다.

 

접근 제어자는 public, protected, default, private로 구성되어 각각의 역할을 한다.

public : 접근 제한 없음. 즉, 외부로의 노출 또는 외부에서 접근이 모두 허용

protected : 동일 패키지와 다른 패키지의 하위 클래스에서 접근 가능

default(기본값) : 동일 패키지 내에서만 접근 가능.

private : 동일 클래스에서만 접근 가능

 

캡슐화를 통해 정보 은닉을 했다고 가정한다면, private 접근 제어자가 포함되어 있는 데이터의 변경이 필요한 경우, getter와 setter 메서드를 사용하여 데이터의 값을 추가하거나 수정을 할 수 있다.

 

getter 메서드

getter 메서드는 설정한 변수 값을 읽어오는 데 사용한다. 경우에 따라 객체 외부에서 필드 값을 사용하기에 부적절한 경우가 발생할 수 있는데, 이러한 경우에는 값을 가공한 이후에 외부로 전달하는 역할을 한다.

 

setter 메서드

setter 메서드는 외부에서 메서드에 접근하여 조건에 맞을 경우 데이터 값을 변경할 수 있도록 한다.

 

캡슐화 예제

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

    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 class Main{
    public static void main(String[] args) {
        Encapsulation e = new Encapsulation();
        e.setName("홍길동");
        e.setAge(26);

        System.out.println(e.getName() + " " + e.getAge() + "세");
    }
}

 

 

반응형