ToStringBuilder ๋ Apache Commons lang ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ ๊ณตํ๋ ๋์ฐ๋ฏธ ํด๋์ค์
๋๋ค . ToStringBuilder๋ Apache Commons Lang ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค์
๋๋ค. ์ด๋ toString() ๋ฉ์๋์์ ์ถ๋ ฅํด์ผ ํ๋ ๊ฐ์ฒด ๋ฐ์ดํฐ์ ์, ํ์์ ๋ํ ์์ ํ๊ณ ๋ ๋์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ToStringBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ ํด๋์ค์์ ToString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ง์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค. ToStringBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ผ์ข
์ ํ
ํ๋ฆฟ์ ๋ง๋ค ์ ์์ต๋๋ค. ํ๋ก์ ํธ์ Commons-Lang์ ํฌํจํ๋ ค๋ฉด Maven ๊ตฌ์ฑ ํ์ผ์ ๋ค์ ์ข
์์ฑ์ ์ถ๊ฐํ์ธ์. ์ด ๊ธฐ์ฌ์์๋ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋์ค์์ ToString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ธฐ ์ํ
๋ชจ๋ฒ ์ฌ๋ก ๋ก ๊ฐ์ฃผ๋ ์ ์๋ ๋ช ๊ฐ์ง ์ํ ์ฌ์ฉ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค . ๋ค์ํ ์๋๋ฆฌ์ค์์ ToStringBuilder๋ฅผ ์ฌ์ฉํ์ฌ toString() ๋ฉ์๋๋ฅผ ๋น๋ํ๋ ๋ค์ํ ๊ฐ๋ฅ์ฑ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด AbstractUser.java, WebUser.java ๋ฐ GuestUser.java๋ผ๋ ์ธ ๊ฐ์ง ๋ชจ๋ธ์ ๋ง๋ญ๋๋ค.
commons-lang
commons-lang
2.5
AbstractUser.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
์น์ฌ์ฉ์.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
๋ค์ํ ์ฌ์ฉ ์ฌ๋ก
1) ์ํผ ํด๋์ค์ toString() ๋ฉ์๋๋ ๋ชจ๋ ํ์ ํด๋์ค์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ต์์ ๊ฐ์ฒด ํด๋์ค์์ toString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ AbstractUser.java์
๋๋ค. ์ด ๋ฉ์๋๋ ์์ฒด ๋ฒ์ ์ toString() ๋ฉ์๋๋ฅผ ํฌํจํ์ง ์๋ ํ ๋ชจ๋ ํ์ ํด๋์ค์์ ์ฌ์ฉ๋ฉ๋๋ค.
@Override public String toString() { return ToStringBuilder.reflectionToString(this); }
์์ ToString() ๋ฉ์๋๋ ํ์ฌ ํด๋์ค์ ๋ํด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ผ๋ฉฐ, ํ์ ํด๋์ค๊ฐ ToString() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ง ์๋ ํ ํ์ ํด๋์ค์์๋ ์๋ํฉ๋๋ค.
package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) ๋ฐ์ดํฐ์ ๊ฐ์ ๋ชจ๋ ์ ํ์ ์ฌ์ฉ์ ์ ์ ํ์
ToString ๋ฉ์๋์ ๋ชจ๋ ํ๋์ ์ฌ์ฉ์ ์ง์ ํ์์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์ ํ์ํ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } }
ํ์ํ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฐ์นํ์ญ์์ค.
@Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) ์ฌ์ด ๋ฉ์๋ ํธ์ถ๋ก ์ํผ ํด๋์ค์ ์ ๋ณด๋ฅผ ํ์ ํด๋์ค์ ์ฌ์ฉ
ํ์ ํด๋์ค์์ ToString()์ ์ฌ์ ์ํ์ฌ ์ํผ ํด๋์ค์์ ๋ฐ์ ์ ๋ณด์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ญ์์ค.
public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) ์์ ๊ณ์ธต์ ํน์ ์์ค๊น์ง๋ง ์ ๋ณด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ผ๋ถ ํ์ ํด๋์ค์์ ๋ชจ๋ ์ํผ ํด๋์ค์ ํ๋๋ฅผ ํ์ฅํด์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์ ๊ณ์ธต์ ํน์ ์์ค๊น์ง ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) ์ํ๋ ์ ๋ณด๋ง ํ์
ToString() ๋ฉ์๋์ ํด๋์ค์ ๋ชจ๋ ํ๋๋ฅผ ํฌํจํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi]
์ด ๋งํฌ์์ ์ ์์ ์ ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์์ค ์๋ณธ ๋ค์ด๋ก๋ : ToStringBuilder๋ฅผ ์ฌ์ฉํ์ฌ
toString()์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ ์ํ๋ ๋ฐฉ๋ฒ ๋ฒ์ญ๋จ
GO TO FULL VERSION