캡슐화(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); } }
아래 실행 코드는 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 변수를 사용하여 모든 객체가 공유할 수 있는 총 고객 수를 관리합니다. 이를 통해 캡슐화의 이점을 잘 보여줍니다.
캡슐화는 데이터 보호와 코드 유지 보수에 큰 도움이 되며, 객체지향 프로그래밍에서 중요한 원칙 중 하나입니다. 이 원칙을 잘 이해하고 활용하면 더욱 견고하고 신뢰성 있는 프로그램을 작성할 수 있습니다.