캡슐화 (Encapsulation)

제민·2024년 7월 12일

Java 개념 공부

목록 보기
12/21
post-thumbnail

캡슐화란?

캡슐화(Encapsulation)는 객체지향 프로그래밍(OOP)에서 중요한 개념 중 하나로, 추상화를 통해 정의된 속성과 기능을 하나로 묶어 관리하는 기법입니다.
캡슐화는 데이터의 접근을 제한하고, 데이터를 안전하게 보호하는데 중요한 역할을 합니다. 이를 통해 외부에서는 객체 내부의 구현 세부 사항을 알 필요 없이 객체와 상호작용할 수 있게 됩니다.

캡슐화의 원칙

  • 정보 은닉: 클래스 내부의 데이터는 외부에서 직접 접근할 수 없도록 하고, 대신 메서드를 통해 접근하도록 합니다. 이를 통해 데이터의 무결성을 유지할 수 있습니다.
  • 데이터 접근 제한: 외부에서 직접 데이터를 수정하거나 접근할 수 없도록 하여 데이터의 오염을 방지합니다.
  • 간접적인 데이터 처리: 데이터를 직접 조작하지 않고, 메서드를 통해 데이터를 처리하여 데이터를 안전하게 관리합니다.

캡슐화 예제 코드

아래 예제 코드는 Human 클래스를 사용하여 캡슐화를 설명합니다. Human 클래스는 이름(name), 나이(age), 그리고 총 고객 수(count)를 포함하고 있습니다. 이 클래스는 데이터 접근을 위해 Getter와 Setter 메서드를 사용하며, 캡슐화를 통해 데이터를 보호합니다.

public class Human {
    private String name; // 이름을 나타내는 private 변수
    private int age; // 나이를 나타내는 private 변수
    public static int count = 0; // static 변수를 사용하여 총 고객 수를 추적

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

    public Human() { }

    public String getName() { // name 변수의 Getter 메서드
        return name;
    }

    public void setName(String name) { // name 변수의 Setter 메서드
        this.name = name;
    }

    public int getAge() { // age 변수의 Getter 메서드
        return age;
    }

    public void setAge(int age) { // age 변수의 Setter 메서드
        this.age = age;
    }

    public void inform() { // 고객 정보를 출력하는 메서드
        System.out.println("이름 : " + this.name);
        System.out.println("나이 : " + this.age);
        System.out.println("고객번호 : " + count);
    }    
}

static 키워드

  • static 변수: static 변수를 사용하면 모든 객체가 해당 변수를 공유합니다. 프로그램 실행 시점에 메모리가 생성되며, 객체 생성 없이도 접근할 수 있습니다.
  • static 메서드: static 메서드는 클래스 이름을 통해 호출할 수 있으며, 인스턴스 변수에 접근할 수 없습니다. 클래스 메서드는 인스턴스와 관계없는 기능을 제공할 때 사용합니다.

실행 코드

아래 실행 코드는 Human 클래스를 사용하여 여러 객체를 생성하고, 각 객체의 정보를 출력합니다. 또한, static 변수를 통해 총 방문 고객 수를 추적합니다.

package g.object_static;

public class Run {
    public static void main(String[] args) {
        Human a = new Human("전", 22);
        a.inform();

        Human b = new Human("제", 33);
        b.inform();

        Human c = new Human("민", 44);
        c.inform();

        System.out.println("총 방문 고객은 : " + Human.count);
    }
}

실행 결과

이름 : 전
나이 : 22
고객번호 : 1
이름 : 제
나이 : 33
고객번호 : 2
이름 : 민
나이 : 44
고객번호 : 3
총 방문 고객은 : 3

위 예제에서, Human 클래스는 이름과 나이를 private 변수로 선언하여 외부에서 직접 접근할 수 없도록 했습니다. 대신, Getter와 Setter 메서드를 통해 간접적으로 접근하고, static 변수를 사용하여 모든 객체가 공유할 수 있는 총 고객 수를 관리합니다. 이를 통해 캡슐화의 이점을 잘 보여줍니다.

캡슐화는 데이터 보호와 코드 유지 보수에 큰 도움이 되며, 객체지향 프로그래밍에서 중요한 원칙 중 하나입니다. 이 원칙을 잘 이해하고 활용하면 더욱 견고하고 신뢰성 있는 프로그램을 작성할 수 있습니다.

profile
초보부터 시작하는 개발자 생활

0개의 댓글