has-a 관계 빈 사용 실습
이번에는 표현 언어에서 has-a 관계를 가지는 빈의 자식 빈 속성에 접근하는 벙법을 알아보겠습니다.
객체가 다른 객체를 속성으로 가지는 경우를 has-a 관계라고 합니다. 사용 형식은 다음과 같이 '속성 이름'과 .(마침표) 연산자로 자식 속성에 접근하면 됩니다.
${부모빈이름.자식속성이름.속성이름}
그러면 has-a 관계를 가지는 빈의 자식 속성에 접근하여 값을 출력하는 예제를 실습해 보겠습니다.
1. sec01.ex02 패키지를 만들고 MemberBean 클래스의 Address 클래스를 준비합니다.

2. MemberBean 클래스를 다음과 같이 작성합니다. 이번에는 회원의 주소를 지정하는 Address 클래스 타입으로 선언된 addr을 속성으로 가집니다. 이처럼 속성으로 다른 자바 빈을 가지는 경우를 has-a 관계라고 합니다.
package sec01.ex02;
import java.util.Date;
public class MemberBean {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
private Address addr; // 주소 정보를 저장하는 Address 클래스 타입 속성을 선언합니다.
public MemberBean() {
}
// 속성에 대한 getter/setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
}
3. 회원 거주 도시와 우편번호를 저장하는 자식 클래스 Address를 다음과 같이 작성합니다.
package sec01.ex02;
public class Address {
private String city;
private String zipcode;
public Address() {
}
// 속성에 대한 getter/setter
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
4. memberForm.jsp의 action 값을 member6.jsp로 수정합니다.
5. member6.jsp를 다음과 같이 작성합니다. 먼저 회원 가입창에서 회원 정보를 입력한 후 전달받아 빈 속성에 설정합니다. 그리고 다시 Address 클래스 빈을 생성하여 도시와 우편번호 정보를 설정합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false"
%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="m" class="sec01.ex02.MemberBean" />
<jsp:setProperty name="m" property="*" />
<jsp:useBean id="addr" class="sec01.ex02.Address"/>
<jsp:setProperty name="addr" property="city" value="서울" />
<jsp:setProperty name="addr" property="zipcode" value="07654" />
<%
m.setAddr(addr);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<table border=1 align="center">
<tr align="center" bgcolor="#99ccff" >
<td width="7%"><b>아이디</b></td>
<td width="7%"><b>비밀번호</b></td>
<td width="5%" ><b>이름</b></td>
<td width="5%"><b>이메일</b></td>
<td width="5%" ><b>도시</b></td>
<td width="5%" ><b>우편번호</b></td>
</tr>
<tr align="center">
<td>${m.id}</td>
<td>${m.pwd}</td>
<td>${m.name}</td>
<td>${m.email}</td>
<td><%=m.getAddr().getCity()%></td> <!-- ① -->
<td><%=m.getAddr().getZipcode()%></td><!-- ① -->
</tr>
<tr align="center">
<td>${m.id}</td>
<td>${m.pwd}</td>
<td>${m.name}</td>
<td>${m.email}</td>
<td>${m.addr.city}</td> <!-- ② -->
<td>${m.addr.zipcode}</td> <!-- ② -->
</tr>
</table>
</body>
</html>
①에서는 표현식을 이용해 getter를 두 번 호출해서 표시했는데 이 방법은 불편합니다. 반면에 ②에서는 빈 이름만을 사용해 .(마침표) 연산자로 주소 정보를 표시했습니다.
6. 브라우저에 요청하여 회원 가입창에서 회원 정보를 입력하고 가입하기를 클릭합니다.

7. 출력창에서 has-a 관계의 속성 값인 주소 정보를 출력합니다.

'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| 스코프 우선순위 (0) | 2026.01.28 |
|---|---|
| 내장 객체 속성 값 출력 실습 (0) | 2026.01.25 |
| HashMap 사용 실습 (0) | 2026.01.19 |
| Collection 객체 사용 실습 (0) | 2026.01.16 |
| 빈 사용 실습 (0) | 2026.01.13 |