웹개발/JAVA

캡슐화(Encapsulation// getter&setter)

bergerac 2025. 3. 8. 09:11

캡슐화 (Encapsulation)이란?

OOP(Object- Oriented Programming : 객체 지향 프로그래밍)에서 데이터와 해당 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 의미한다. 객체 내부의 구현을 숨기고, 외부에서는 제공된 메서드를 통해서만 접근하도록 설정

장점 :데이터 보호, 유지보수성 향상, 사용자 편의성 증대

 

Getter&setter Method

캡슐화된 데이터에 안전하게 접근하고 수정할 수 있도록 하는 메서드로, 데이터 무결성 유지와 정보 은닉을 위한 역할을 합니다.

 

1. 데이터 필드를 private로 선언

유지보수성 향상을 목적으로 데이터 필드를 private 선언하는 것이 일반적입니다. 외부에서 직접 접근할수 없도록 설정하여 무분별한 값 변경을 방지합니다. 또한 데이터에 접근하거나 수정할 때에는 getter setter method를 활영하여 데이터를 더 잘 보호할 수 있습니다. 

 

2. Getter

객체의 특정 필드 값을 읽는 메서드로, get<필드명>() 형식으로 사용됩니다.

public String getName() {
    return name;
}

 

3. Setter

객체의 특정 필드 값을 설정하는 메서드로, set<필드명>() 형식으로 사용됩니다

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

 

예제

다음은 Getter Setter 메서드를 통해 캡슐화개념을 적용한 예제입니다

class Student {
    private String name;
    private int residentNumber; // 주민등록번호
    private int age;
    private int score;

    // Getter & Setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public void setResidentNumber(int number) {
        this.residentNumber = number;
    }

    public String getAge() {
        return (age > 19) ? "성인" : "미성년자";
    }

    public void setAge(int age) {
        if (age < 0) {
            System.out.println("유효하지 않은 나이입니다.");
        } else {
            this.age = age;
        }
    }

    public int getScore() { return score; }
    public void setScore(int score) {
        if (score >= 0 && score <= 100) {
            this.score = score;
        } else {
            System.out.println("유효하지 않은 점수입니다.");
        }
    }
}

<메인>

public class B_Encapsulation {
    public static void main(String[] args) {
        Student student = new Student();

        student.setName("bergerac");
        student.setAge(-29); // 유효하지 않은 나이입니다.
        student.setAge(29);
        student.setResidentNumber(1234567);
        student.setScore(101); // 유효하지 않은 점수입니다.
        student.setScore(100);
    }
}

 

결론

  • 캡슐화를 활용하면 데이터의 직접적인 접근을 제한하고 필요한 경우 getter 과 setter 메서드를 통해 접근할 수 있도록 설계할 수 있습니다. 
  • 유지보수성이 향상되며 코드의 안정성이 높아집니다.