자바빈(JavaBean)과 프로퍼티(Property) 접근 방식은 Java, 특히 Spring 프레임워크에서 데이터를 다루는 매우 중요한 기본 규칙입니다.
간단히 말해, 자바빈은 '정해진 규칙에 따라 만든 데이터 객체'이고, 프로퍼티 접근 방식은 '그 객체의 데이터를 특정 규칙(getter/setter)에 따라 읽고 쓰는 방법'을 의미합니다. 사실상 같은 개념을 가리키는 말입니다.
## 핵심 개념: 캡슐화와 표준 규약
이 방식의 핵심은 클래스의 필드(멤버 변수)를 private으로 선언하여 외부에서 직접 접근하지 못하게 막고(캡슐화), 오직 public으로 열려있는 특정 메서드(getter/setter)를 통해서만 데이터를 다루게 하는 것입니다.
** analogy ** 자판기를 생각하면 쉽습니다. 우리는 자판기 안의 음료수(데이터)를 직접 손으로 꺼낼 수 없습니다. 대신 '버튼을 누르는'(메서드 호출) 표준화된 방법을 통해서만 음료수를 얻을 수 있죠. 자바빈 규약은 이 '자판기'를 만드는 표준 설계도와 같습니다.
## 자바빈(JavaBean) 규약: 클래스를 만드는 규칙 📜
어떤 클래스가 자바빈으로 인정받으려면 몇 가지 규칙을 따라야 합니다.
- public 클래스여야 합니다.
- 필드(멤버 변수)는 **private**으로 선언하여 외부 접근을 막습니다.
- 매개변수가 없는 public 기본 생성자가 반드시 있어야 합니다.
- 각 필드에 접근할 수 있는 public getter와 setter 메서드가 있어야 합니다.
## 프로퍼티(Property) 접근 방식: getter와 setter ⚙️
**프로퍼티(Property)**는 자바빈 클래스가 가진 '데이터 속성'을 의미하는 논리적인 이름입니다. 예를 들어, private String name;이라는 필드는 name이라는 프로퍼티가 됩니다. 이 프로퍼티에 접근하는 표준 방식이 바로 getter와 setter입니다.
#### Getter
- 프로퍼티 값을 읽을(Get) 때 사용하는 메서드입니다.
- 규칙: get + 프로퍼티이름 (첫 글자는 대문자) 형식의 이름을 가집니다. (e.g., getName())
- boolean 타입의 경우 is로 시작할 수도 있습니다. (e.g., isAvailable())
#### Setter
- 프로퍼티 값을 **설정(Set)**할 때 사용하는 메서드입니다.
- 규칙: set + 프로퍼티이름 (첫 글자는 대문자) 형식의 이름을 가집니다. (e.g., setName(String name))
## 코드 예시: Member 클래스
public class Member { // 1. public 클래스
private String name; // 2. private 필드
private int age;
public Member() { // 3. public 기본 생성자
}
// 4. name 프로퍼티의 Getter와 Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 4. age 프로퍼티의 Getter와 Setter
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
## ✨ 왜 이 방식이 중요할까? (스프링과의 관계)
Spring을 포함한 대부분의 Java 프레임워크는 이 자바빈 규약을 기반으로 동작합니다.
- 데이터 바인딩: 사용자가 웹 폼에 데이터를 입력하고 전송하면, Spring은 Member 객체를 생성한 후 setName(), setAge() 같은 setter를 자동으로 호출하여 폼 데이터를 객체에 채워줍니다.
- Thymeleaf 연동: 템플릿 엔진인 Thymeleaf에서 ${member.name}과 같은 코드를 사용하면, Thymeleaf는 member 객체의 name 필드에 직접 접근하는 것이 아니라, 내부적으로 member.getName()이라는 getter를 호출하여 값을 가져옵니다.
이처럼 정해진 규칙(규약)이 있기 때문에 프레임워크가 우리 코드를 분석하고 자동으로 값을 넣어주거나 빼오는 등의 편리한 작업을 수행할 수 있는 것입니다.
'개발 공부 > 자바' 카테고리의 다른 글
| 모든 클래스의 조상: Object 클래스 핵심 정리 (0) | 2025.12.03 |
|---|---|
| Java의 다형성 완전 정복 (0) | 2025.09.25 |
| 자바 면접 질문2 (0) | 2025.09.24 |
| 자바 면접 질문1 (0) | 2025.09.24 |
| 스프링 부트 개발자를 위한 Java 핵심 정리 (0) | 2025.09.24 |